diff --git a/index.975ef6c8.js b/index.975ef6c8.js index acd3382..c2f7855 100644 --- a/index.975ef6c8.js +++ b/index.975ef6c8.js @@ -33009,1742 +33009,94 @@ class State { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); parcelHelpers.export(exports, "Puzzles", ()=>Puzzles); -var _001 = require("./001"); -var _001Default = parcelHelpers.interopDefault(_001); -var _002 = require("./002"); -var _002Default = parcelHelpers.interopDefault(_002); -var _003 = require("./003"); -var _003Default = parcelHelpers.interopDefault(_003); -var _004 = require("./004"); -var _004Default = parcelHelpers.interopDefault(_004); -var _005 = require("./005"); -var _005Default = parcelHelpers.interopDefault(_005); -var _006 = require("./006"); -var _006Default = parcelHelpers.interopDefault(_006); -var _007 = require("./007"); -var _007Default = parcelHelpers.interopDefault(_007); -var _008 = require("./008"); -var _008Default = parcelHelpers.interopDefault(_008); -var _009 = require("./009"); -var _009Default = parcelHelpers.interopDefault(_009); -var _010 = require("./010"); -var _010Default = parcelHelpers.interopDefault(_010); -var _011 = require("./011"); -var _011Default = parcelHelpers.interopDefault(_011); -// These are just for testing purposes -// They won't show up in the list but are accessible via URL -var _testLayout = require("./testLayout"); -var _testLayoutDefault = parcelHelpers.interopDefault(_testLayout); -var _testPortal = require("./testPortal"); -var _testPortalDefault = parcelHelpers.interopDefault(_testPortal); -var _testReflector = require("./testReflector"); -var _testReflectorDefault = parcelHelpers.interopDefault(_testReflector); -var _testInfiniteLoop = require("./testInfiniteLoop"); -var _testInfiniteLoopDefault = parcelHelpers.interopDefault(_testInfiniteLoop); -// Ensure puzzle configuration is valid JSON -const configuration = Object.fromEntries(Object.entries({ - "001": (0, _001Default.default), - "002": (0, _002Default.default), - "003": (0, _003Default.default), - "004": (0, _004Default.default), - "005": (0, _005Default.default), - "006": (0, _006Default.default), - "007": (0, _007Default.default), - "008": (0, _008Default.default), - "009": (0, _009Default.default), - "010": (0, _010Default.default), - "011": (0, _011Default.default), - test_infinite_loop: (0, _testInfiniteLoopDefault.default), - test_layout: (0, _testLayoutDefault.default), - test_portal: (0, _testPortalDefault.default), - test_reflector: (0, _testReflectorDefault.default) -}).map(([k, v])=>[ - k, - JSON.parse(JSON.stringify(v)) - ])); -function traverse(ids, id, amount) { - const index = ids.indexOf(id); - return ids[index < 0 ? index : index + amount]; -} -class PuzzleGroup { - ids; - constructor(ids){ - this.firstId = ids[0]; - this.ids = ids; - this.lastId = ids[ids.length - 1]; - } - get(id) { - if (this.has(id)) // Note: deep cloning configuration to prevent mutation - return structuredClone(configuration[id]); - } - has(id) { - return this.ids.includes(id); - } - nextId(id) { - return traverse(this.ids, id, 1); - } - previousId(id) { - return traverse(this.ids, id, -1); - } -} -const Puzzles = new PuzzleGroup(Object.keys(configuration).sort()); -Puzzles.hidden = new PuzzleGroup(Puzzles.ids.filter((id)=>id.startsWith("test_"))); -Puzzles.titles = Object.fromEntries(Puzzles.ids.map((id)=>[ - id, - configuration[id].title || id - ])); -Puzzles.visible = new PuzzleGroup(Puzzles.ids.filter((id)=>!Puzzles.hidden.has(id))); - -},{"./001":"fFJlx","./002":"iwEDq","./003":"8NuwS","./004":"8Jptv","./005":"1WhBP","./006":"lXm4P","./007":"pMRyK","./008":"9O2JN","./009":"2195c","./010":"1xAcZ","./011":"cYQp6","./testLayout":"eIpMB","./testPortal":"hADKv","./testReflector":"7SJ0Z","./testInfiniteLoop":"9KcvT","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"fFJlx":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - { - on: true, - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - items: [ - { - color: "red", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Toggle" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - { - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"iwEDq":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - { - on: true, - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - items: [ - { - color: "red", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - clockwise: false, - type: "Rotate" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - { - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"8NuwS":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - { - on: true, - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - items: [ - { - color: "red", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - { - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - clockwise: false, - type: "Rotate" - } - ], - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"8Jptv":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - null, - { - type: "Beam" - }, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Rotate" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - null, - { - on: true, - type: "Beam" - }, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - items: [ - { - color: "red", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Swap" - } - ], - type: "Tile" - }, - { - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"1WhBP":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - null, - null, - { - on: true, - type: "Beam" - } - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Move" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - color: "blue", - openings: [ - null, - { - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - { - items: [ - { - color: "red", - openings: [ - null, - null, - null, - null, - { - type: "Beam" - }, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - color: "red", - openings: [ - null, - null, - { - on: true, - type: "Beam" - }, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Swap" - }, - { - clockwise: false, - type: "Rotate" - } - ], - type: "Tile" - }, - { - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 2, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"lXm4P":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - rotation: 2, - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Swap" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - openings: [ - null, - null, - null, - { - color: "red", - type: "Beam" - }, - null, - { - color: "blue", - on: true, - type: "Beam" - } - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - { - items: [ - { - openings: [ - { - color: "blue", - type: "Beam" - }, - null, - { - color: "red", - on: true, - type: "Beam" - }, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - rotation: 2, - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Swap" - } - ], - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 2, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"pMRyK":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "blue", - openings: [ - null, - null, - { - type: "Beam" - }, - { - on: true, - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - null, - { - type: "Beam" - }, - { - on: true, - type: "Beam" - } - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "red", - openings: [ - null, - null, - { - on: true, - type: "Beam" - }, - { - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - { - items: [ - { - color: "red", - openings: [ - null, - null, - null, - null, - { - on: true, - type: "Beam" - }, - { - type: "Beam" - } - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - { - items: [ - { - rotation: 3, - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Rotate" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - null, - { - items: [ - { - color: "blue", - openings: [ - { - type: "Beam" - }, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - items: [ - { - rotation: 3, - type: "Reflector" - } - ], - modifiers: [ - { - type: "Move" - } - ], - type: "Tile" - }, - { - items: [ - { - rotation: 3, - type: "Reflector" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "red", - openings: [ - { - on: true, - type: "Beam" - }, - { - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - } - ] - ] - }, - solution: [ - { - amount: 0, - type: "Connections" - }, - { - amount: 6, - type: "Moves" - } - ], - version: 1 -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"9O2JN":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "blue", - openings: [ - null, - null, - null, - { - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Swap" - } - ], - type: "Tile" - }, - { - modifiers: [ - { - type: "Lock" - }, - { - type: "Rotate" - } - ], - type: "Tile" - }, - { - modifiers: [ - { - type: "Lock" - }, - { - type: "Toggle" - } - ], - type: "Tile" - }, - { - items: [ - { - color: [ - "red", - "blue" - ], - openings: [ - null, - null, - null, - null, - { - type: "Beam" - }, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Move" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - type: "Filter" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Move" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "red", - type: "Filter" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Move" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Move" - } - ], - type: "Tile" - } - ], - [ - null, - { - items: [ - { - color: [ - "red", - "blue" - ], - openings: [ - null, - { - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - modifiers: [ - { - type: "Lock" - }, - { - type: "Toggle" - } - ], - type: "Tile" - }, - { - modifiers: [ - { - type: "Lock" - }, - { - type: "Rotate" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "red", - openings: [ - { - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Swap" - } - ], - type: "Tile" - } - ] - ] - }, - solution: [ - { - amount: 2, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"2195c":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - null, - null, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - items: [ - { - color: "green", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Portal" - } - ], - modifiers: [ - { - type: "Move" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - null, - { - items: [ - { - color: "green", - openings: [ - null, - null, - null, - { - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Portal" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - null, - null, - { - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"1xAcZ":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - null, - null, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - { - items: [ - { - color: "green", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Portal" - } - ], - modifiers: [ - { - type: "Move" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - null, - { - items: [ - { - color: "green", - openings: [ - null, - null, - null, - { - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Portal" - } - ], - type: "Tile" - }, - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - null, - null, - { - type: "Tile" - }, - { - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] +const puzzles = { + "001": require("388f1e0e9ef404f1"), + "002": require("c78ae468f341d769"), + "003": require("970871732d2a157b"), + "004": require("bc9e0c5f7c5d01e4"), + "005": require("f3e72dc0ddab4b01"), + "006": require("5dcf17593d7a4bf0"), + "007": require("a02b60cdc8a431e2"), + "008": require("ade4d10630f08956"), + "009": require("6305a2004246bb2"), + "010": require("da10656096d2af94"), + "011": require("ac22c67945d4fda9"), + test_infinite_loop: require("85499c36fcf7a4eb"), + test_layout: require("de475d1b852df9bb"), + test_portal: require("41bc05d099929c0d"), + test_reflector: require("255f7590a7448490") }; +function traverse(ids, id, amount) { + const index = ids.indexOf(id); + return ids[index < 0 ? index : index + amount]; +} +class PuzzleGroup { + ids; + constructor(ids){ + this.firstId = ids[0]; + this.ids = ids; + this.lastId = ids[ids.length - 1]; + } + get(id) { + if (this.has(id)) // Note: deep cloning puzzles to prevent mutation + return structuredClone(puzzles[id]); + } + has(id) { + return this.ids.includes(id); + } + nextId(id) { + return traverse(this.ids, id, 1); + } + previousId(id) { + return traverse(this.ids, id, -1); + } +} +const Puzzles = new PuzzleGroup(Object.keys(puzzles).sort()); +Puzzles.hidden = new PuzzleGroup(Puzzles.ids.filter((id)=>id.startsWith("test_"))); +Puzzles.titles = Object.fromEntries(Puzzles.ids.map((id)=>[ + id, + puzzles[id].title || id + ])); +Puzzles.visible = new PuzzleGroup(Puzzles.ids.filter((id)=>!Puzzles.hidden.has(id))); -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"cYQp6":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - type: "Portal" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - direction: 5, - type: "Portal" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - openings: [ - null, - null, - { - color: "blue", - on: true, - type: "Beam" - }, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - items: [ - { - direction: 0, - type: "Portal" - } - ], - modifiers: [ - { - type: "Rotate" - } - ], - type: "Tile" - }, - { - items: [ - { - openings: [ - null, - null, - null, - null, - null, - { - color: "blue", - type: "Beam" - } - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - direction: 5, - type: "Portal" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - }, - { - items: [ - { - direction: 5, - type: "Portal" - } - ], - modifiers: [ - { - type: "Lock" - } - ], - type: "Tile" - } - ] - ], - type: "even-r" - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ], - version: 1 -}; +},{"388f1e0e9ef404f1":"aW13h","c78ae468f341d769":"7g0cm","970871732d2a157b":"iaK6p","bc9e0c5f7c5d01e4":"ljdPP","f3e72dc0ddab4b01":"1cnyP","5dcf17593d7a4bf0":"aIJrc","a02b60cdc8a431e2":"2F0gb","ade4d10630f08956":"1bhn7","6305a2004246bb2":"2icw5","da10656096d2af94":"b93JV","ac22c67945d4fda9":"6ZkNx","85499c36fcf7a4eb":"fUqeV","de475d1b852df9bb":"9Zi8W","41bc05d099929c0d":"4XdFs","255f7590a7448490":"eKsSY","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"aW13h":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"blue","openings":[null,null,null,{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},{"type":"Tile"}],[{"items":[{"color":"red","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"},{"items":[{"color":"blue","openings":[{"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}]}'); + +},{}],"7g0cm":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"blue","openings":[null,null,null,{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},{"type":"Tile"}],[{"items":[{"color":"red","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"clockwise":false,"type":"Rotate"}],"type":"Tile"},{"items":[{"color":"blue","openings":[{"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}]}'); + +},{}],"iaK6p":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"blue","openings":[null,null,null,{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},{"type":"Tile"}],[{"items":[{"color":"red","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"color":"blue","openings":[{"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"clockwise":false,"type":"Rotate"}],"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}]}'); + +},{}],"ljdPP":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"blue","openings":[null,null,null,null,{"type":"Beam"},null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Rotate"}],"type":"Tile"},{"items":[{"color":"blue","openings":[null,null,null,null,{"on":true,"type":"Beam"},null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},{"type":"Tile"}],[{"items":[{"color":"red","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Swap"}],"type":"Tile"},{"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}]}'); + +},{}],"1cnyP":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"type":"Tile"},{"items":[{"color":"blue","openings":[null,null,null,null,null,{"on":true,"type":"Beam"}],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Move"}],"type":"Tile"}],[{"items":[{"color":"blue","openings":[null,{"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"type":"Tile"},{"items":[{"color":"red","openings":[null,null,null,null,{"type":"Beam"},null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}],[{"items":[{"color":"red","openings":[null,null,{"on":true,"type":"Beam"},null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Swap"},{"clockwise":false,"type":"Rotate"}],"type":"Tile"},{"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":2,"type":"Connections"}]}'); + +},{}],"aIJrc":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"rotation":2,"type":"Reflector"}],"modifiers":[{"type":"Lock"},{"type":"Swap"}],"type":"Tile"},{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}],[{"items":[{"openings":[null,null,null,{"color":"red","type":"Beam"},null,{"color":"blue","on":true,"type":"Beam"}],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"type":"Tile"},{"items":[{"openings":[{"color":"blue","type":"Beam"},null,{"color":"red","on":true,"type":"Beam"},null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}],[{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"rotation":2,"type":"Reflector"}],"modifiers":[{"type":"Lock"},{"type":"Swap"}],"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":2,"type":"Connections"}]}'); + +},{}],"2F0gb":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"blue","openings":[null,null,{"type":"Beam"},{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"type":"Tile"},{"items":[{"color":"blue","openings":[null,null,null,null,{"type":"Beam"},{"on":true,"type":"Beam"}],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"color":"red","openings":[null,null,{"on":true,"type":"Beam"},{"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"type":"Tile"},{"items":[{"color":"red","openings":[null,null,null,null,{"on":true,"type":"Beam"},{"type":"Beam"}],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},{"items":[{"rotation":3,"type":"Reflector"}],"modifiers":[{"type":"Lock"},{"type":"Rotate"}],"type":"Tile"},{"type":"Tile"},{"type":"Tile"}],[null,{"items":[{"color":"blue","openings":[{"type":"Beam"},{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"rotation":3,"type":"Reflector"}],"modifiers":[{"type":"Move"}],"type":"Tile"},{"items":[{"rotation":3,"type":"Reflector"}],"type":"Tile"},{"items":[{"color":"red","openings":[{"on":true,"type":"Beam"},{"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}]]},"solution":[{"amount":0,"type":"Connections"},{"amount":6,"type":"Moves"}],"version":1}'); -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"eIpMB":[function(require,module,exports) { +},{}],"1bhn7":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"blue","openings":[null,null,null,{"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Swap"}],"type":"Tile"},{"modifiers":[{"type":"Lock"},{"type":"Rotate"}],"type":"Tile"},{"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"},{"items":[{"color":["red","blue"],"openings":[null,null,null,null,{"type":"Beam"},null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}],[{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Lock"},{"type":"Move"}],"type":"Tile"},{"items":[{"color":"blue","type":"Filter"}],"modifiers":[{"type":"Lock"},{"type":"Move"}],"type":"Tile"},{"items":[{"color":"red","type":"Filter"}],"modifiers":[{"type":"Lock"},{"type":"Move"}],"type":"Tile"},{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Lock"},{"type":"Move"}],"type":"Tile"}],[null,{"items":[{"color":["red","blue"],"openings":[null,{"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"},{"modifiers":[{"type":"Lock"},{"type":"Rotate"}],"type":"Tile"},{"items":[{"color":"red","openings":[{"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Swap"}],"type":"Tile"}]]},"solution":[{"amount":2,"type":"Connections"}]}'); + +},{}],"2icw5":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"type":"Tile"},{"type":"Tile"},null,null,{"type":"Tile"},{"type":"Tile"}],[{"items":[{"color":"green","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"type":"Portal"}],"modifiers":[{"type":"Move"}],"type":"Tile"},{"type":"Tile"},null,{"items":[{"color":"green","openings":[null,null,null,{"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"type":"Portal"}],"type":"Tile"},{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},null,null,{"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}]}'); + +},{}],"b93JV":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"type":"Tile"},null,null,{"type":"Tile"},{"type":"Tile"}],[{"items":[{"color":"green","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"type":"Portal"}],"modifiers":[{"type":"Move"}],"type":"Tile"},{"type":"Tile"},null,{"items":[{"color":"green","openings":[null,null,null,{"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"type":"Portal"}],"type":"Tile"},{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},null,null,{"type":"Tile"},{"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}]}'); + +},{}],"6ZkNx":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"type":"Portal"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"direction":5,"type":"Portal"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}],[{"items":[{"openings":[null,null,{"color":"blue","on":true,"type":"Beam"},null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Rotate"}],"type":"Tile"},{"items":[{"openings":[null,null,null,null,null,{"color":"blue","type":"Beam"}],"type":"Terminus"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}],[{"items":[{"direction":5,"type":"Portal"}],"modifiers":[{"type":"Lock"}],"type":"Tile"},{"items":[{"direction":5,"type":"Portal"}],"modifiers":[{"type":"Lock"}],"type":"Tile"}]],"type":"even-r"},"solution":[{"amount":1,"type":"Connections"}],"version":1}'); + +},{}],"fUqeV":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"red","openings":[null,null,null,{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"type":"Tile"},{"items":[{"rotation":2,"type":"Reflector"}],"type":"Tile"},{"type":"Tile"},{"items":[{"color":"red","openings":[null,null,null,null,null,{"on":true,"type":"Beam"}],"type":"Terminus"}],"type":"Tile"}],[{"type":"Tile"},{"type":"Tile"},{"type":"Tile"}],[null,{"items":[{"rotation":4,"type":"Reflector"}],"type":"Tile"},{"items":[{"rotation":2,"type":"Reflector"}],"type":"Tile"},{"items":[{"color":"blue","openings":[{"on":true,"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"type":"Tile"}]]},"solution":[{"amount":100,"type":"Connections"}]}'); + +},{}],"9Zi8W":[function(require,module,exports) { +// TODO: this file can be removed when the puzzle editor is created var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); const layout = [ @@ -34794,397 +33146,13 @@ exports.default = { ] }; -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"hADKv":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - direction: 0, - type: "Portal" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - items: [ - { - direction: 0, - type: "Portal" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - }, - { - items: [ - { - openings: [ - null, - null, - null, - { - color: [ - "red", - "blue" - ], - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Rotate" - } - ], - type: "Tile" - }, - { - items: [ - { - openings: [ - null, - null, - null, - null, - { - color: "green", - type: "Beam" - }, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Toggle" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - openings: [ - { - color: "red", - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Rotate" - }, - { - type: "Toggle" - } - ], - type: "Tile" - }, - { - items: [ - { - openings: [ - { - color: "blue", - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - modifiers: [ - { - type: "Lock" - }, - { - type: "Toggle" - } - ], - type: "Tile" - }, - { - items: [ - { - direction: 0, - type: "Portal" - } - ], - modifiers: [ - { - type: "Immutable" - } - ], - type: "Tile" - } - ] - ] - }, - solution: [ - { - amount: 1, - type: "Connections" - } - ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"7SJ0Z":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "red", - openings: [ - null, - null, - null, - { - on: true, - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - type: "Reflector" - } - ], - modifiers: [ - { - type: "Rotate" - } - ], - type: "Tile" - } - ], - [ - { - items: [ - { - color: "green", - openings: [ - null, - { - on: true, - type: "Beam" - }, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - { - on: true, - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - type: "Tile" - } - ] - ] - }, - solution: [ - { - amount: 999, - type: "Connections" - } - ] -}; +},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"4XdFs":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"openings":[null,null,null,{"color":["red","blue"],"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Rotate"}],"type":"Tile"},{"items":[{"openings":[null,null,null,null,{"color":"green","type":"Beam"},null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"}],[{"items":[{"openings":[{"color":"red","type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Rotate"},{"type":"Toggle"}],"type":"Tile"},{"items":[{"openings":[{"color":"blue","type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"},{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}]]},"solution":[{"amount":1,"type":"Connections"}]}'); -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"9KcvT":[function(require,module,exports) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { - layout: { - tiles: [ - [ - { - items: [ - { - color: "red", - openings: [ - null, - null, - null, - { - on: true, - type: "Beam" - }, - null, - null - ], - type: "Terminus" - } - ], - type: "Tile" - }, - { - items: [ - { - rotation: 2, - type: "Reflector" - } - ], - type: "Tile" - }, - { - type: "Tile" - }, - { - items: [ - { - color: "red", - openings: [ - null, - null, - null, - null, - null, - { - on: true, - type: "Beam" - } - ], - type: "Terminus" - } - ], - type: "Tile" - } - ], - [ - { - type: "Tile" - }, - { - type: "Tile" - }, - { - type: "Tile" - } - ], - [ - null, - { - items: [ - { - rotation: 4, - type: "Reflector" - } - ], - type: "Tile" - }, - { - items: [ - { - rotation: 2, - type: "Reflector" - } - ], - type: "Tile" - }, - { - items: [ - { - color: "blue", - openings: [ - { - on: true, - type: "Beam" - }, - null, - null, - null, - null, - null - ], - type: "Terminus" - } - ], - type: "Tile" - } - ] - ] - }, - solution: [ - { - amount: 100, - type: "Connections" - } - ] -}; +},{}],"eKsSY":[function(require,module,exports) { +module.exports = JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"red","openings":[null,null,null,{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"type":"Tile"}],[{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Rotate"}],"type":"Tile"}],[{"items":[{"color":"green","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"type":"Tile"},{"items":[{"color":"blue","openings":[{"on":true,"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"type":"Tile"}]]},"solution":[{"amount":999,"type":"Connections"}]}'); -},{"@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"foTr2":[function(require,module,exports) { +},{}],"foTr2":[function(require,module,exports) { var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); parcelHelpers.defineInteropFlag(exports); parcelHelpers.export(exports, "Solution", ()=>Solution); diff --git a/index.975ef6c8.js.map b/index.975ef6c8.js.map index 5468dcd..4423f31 100644 --- a/index.975ef6c8.js.map +++ b/index.975ef6c8.js.map @@ -1 +1 @@ -{"mappings":"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AG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAI;IAAK;IAAI;IAAI;IAAI;IAAG;IAAI;IAAG;IAAG;IAAI;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAG;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAG;IAAG;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAI;IAAI;IAAI;IAAG;IAAI;IAAI;IAAG;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAK;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAK;IAAI;IAAG;IAAG;IAAI;IAAI;IAAI;IAAG;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAG;IAAG;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAI;IAAI;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAI;IAAI;IAAG;IAAI;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAI;IAAI;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAI;IAAG;IAAK;IAAI;IAAI;IAAG;IAAI;IAAG;IAAI;IAAI;IAAI;IAAG;IAAG;IAAG;IAAK;IAAI;IAAI;IAAG;IAAI;IAAI;IAAI;IAAG;IAAI;IAAI;IAAI;IAAG;IAAI;IAAI;IAAI;IAAG;IAAK;IAAI;IAAK;IAAI;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAI;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAI;IAAI;IAAG;IAAG;IAAG;IAAI;IAAG;IAAI;IAAI;IAAG;IAAG;IAAI;IAAG;IAAI;IAAI;IAAI;IAAG;IAAI;IAAI;IAAK;IAAG;IAAG;IAAI;IAAI;IAAG;IAAI;IAAI;IAAK;IAAG;IAAG;IAAG;IAAG;IAAI;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAI;IAAI;IAAG;IAAK;IAAI;IAAI;IAAG;IAAG;IAAI;IAAG;IAAI;IAAK;IAAG;IAAI;IAAK;IAAK;IAAK;IAAI;IAAK;IAAM;IAAI;IAAI;IAAM;IAAI;IAAG;IAAM;IAAK;IAAM;IAAK;IAAG;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAI;IAAG;IAAI;IAAI;IAAG;IAAI;IAAK;IAAI;IAAK;IAAI;IAAG;IAAG;IAAI;IAAI;IAAI;IAAG;IAAG;IAAG;IAAI;IAAM;IAAG;IAAM;IAAI;IAAG;IAAM;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAK;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAK;IAAM;IAAK;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAM;IAAI;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAK;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAI;IAAG;IAAG;IAAM;IAAI;IAAG;IAAG;IAAK;IAAI;IAAK;IAAI;IAAI;IAAG;IAAI;IAAG;IAAK;IAAI;IAAI;IAAI;IAAK;IAAI;IAAK;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAI;IAAG;IAAK;IAAI;IAAI;IAAG;IAAG;IAAM;IAAG;IAAG;IAAI;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IAAG;IA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","sources":["node_modules/@parcel/runtime-browser-hmr/lib/runtime-7864113fb6dc088e.js","src/index.js","src/info.js","src/components/debug.js","src/components/util.js","node_modules/jsondiffpatch/lib/index.js","node_modules/jsondiffpatch/lib/diffpatcher.js","node_modules/jsondiffpatch/lib/processor.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","node_modules/jsondiffpatch/lib/pipe.js","node_modules/jsondiffpatch/lib/contexts/diff.js","node_modules/jsondiffpatch/lib/contexts/context.js","node_modules/jsondiffpatch/lib/clone.js","node_modules/jsondiffpatch/lib/contexts/patch.js","node_modules/jsondiffpatch/lib/contexts/reverse.js","node_modules/jsondiffpatch/lib/filters/trivial.js","node_modules/jsondiffpatch/lib/filters/nested.js","node_modules/jsondiffpatch/lib/filters/arrays.js","node_modules/jsondiffpatch/lib/filters/lcs.js","node_modules/jsondiffpatch/lib/filters/dates.js","node_modules/jsondiffpatch/lib/filters/texts.js","node_modules/jsondiffpatch/lib/date-reviver.js","node_modules/pako/dist/pako.esm.mjs","node_modules/chroma-js/chroma.js","node_modules/paper/dist/paper-full.js","node_modules/@parcel/node-resolver-core/lib/_empty.js","node_modules/acorn/dist/acorn.mjs","src/components/puzzle.js","src/components/layout.js","src/components/coordinates/cube.js","src/components/coordinates/offset.js","src/components/items/tile.js","src/components/item.js","src/components/stateful.js","src/components/itemFactory.js","src/components/items/filter.js","src/components/modifiers/move.js","src/components/modifier.js","src/components/eventListeners.js","src/components/interact.js","src/components/cache.js","src/components/step.js","src/components/items/portal.js","src/components/modifiers/rotate.js","src/components/items/terminus.js","src/components/modifiers/toggle.js","src/components/items/beam.js","src/components/collision.js","src/components/items/reflector.js","src/components/items/wall.js","src/components/modifierFactory.js","src/components/modifiers/immutable.js","src/components/modifiers/lock.js","src/components/modifiers/swap.js","src/components/items/mask.js","src/components/items/collision.js","src/components/state.js","src/puzzles/index.js","src/puzzles/001.js","src/puzzles/002.js","src/puzzles/003.js","src/puzzles/004.js","src/puzzles/005.js","src/puzzles/006.js","src/puzzles/007.js","src/puzzles/008.js","src/puzzles/009.js","src/puzzles/010.js","src/puzzles/011.js","src/puzzles/testLayout.js","src/puzzles/testPortal.js","src/puzzles/testReflector.js","src/puzzles/testInfiniteLoop.js","src/components/solution.js"],"sourcesContent":["var HMR_HOST = null;var HMR_PORT = null;var HMR_SECURE = false;var HMR_ENV_HASH = \"d6ea1d42532a7575\";module.bundle.HMR_BUNDLE_ID = \"890e741a975ef6c8\";\"use strict\";\n\n/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */\n/*::\nimport type {\n HMRAsset,\n HMRMessage,\n} from '@parcel/reporter-dev-server/src/HMRServer.js';\ninterface ParcelRequire {\n (string): mixed;\n cache: {|[string]: ParcelModule|};\n hotData: {|[string]: mixed|};\n Module: any;\n parent: ?ParcelRequire;\n isParcelRequire: true;\n modules: {|[string]: [Function, {|[string]: string|}]|};\n HMR_BUNDLE_ID: string;\n root: ParcelRequire;\n}\ninterface ParcelModule {\n hot: {|\n data: mixed,\n accept(cb: (Function) => void): void,\n dispose(cb: (mixed) => void): void,\n // accept(deps: Array | string, cb: (Function) => void): void,\n // decline(): void,\n _acceptCallbacks: Array<(Function) => void>,\n _disposeCallbacks: Array<(mixed) => void>,\n |};\n}\ninterface ExtensionContext {\n runtime: {|\n reload(): void,\n getURL(url: string): string;\n getManifest(): {manifest_version: number, ...};\n |};\n}\ndeclare var module: {bundle: ParcelRequire, ...};\ndeclare var HMR_HOST: string;\ndeclare var HMR_PORT: string;\ndeclare var HMR_ENV_HASH: string;\ndeclare var HMR_SECURE: boolean;\ndeclare var chrome: ExtensionContext;\ndeclare var browser: ExtensionContext;\ndeclare var __parcel__import__: (string) => Promise;\ndeclare var __parcel__importScripts__: (string) => Promise;\ndeclare var globalThis: typeof self;\ndeclare var ServiceWorkerGlobalScope: Object;\n*/\nvar OVERLAY_ID = '__parcel__error__overlay__';\nvar OldModule = module.bundle.Module;\nfunction Module(moduleName) {\n OldModule.call(this, moduleName);\n this.hot = {\n data: module.bundle.hotData[moduleName],\n _acceptCallbacks: [],\n _disposeCallbacks: [],\n accept: function (fn) {\n this._acceptCallbacks.push(fn || function () {});\n },\n dispose: function (fn) {\n this._disposeCallbacks.push(fn);\n }\n };\n module.bundle.hotData[moduleName] = undefined;\n}\nmodule.bundle.Module = Module;\nmodule.bundle.hotData = {};\nvar checkedAssets /*: {|[string]: boolean|} */, assetsToDispose /*: Array<[ParcelRequire, string]> */, assetsToAccept /*: Array<[ParcelRequire, string]> */;\n\nfunction getHostname() {\n return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');\n}\nfunction getPort() {\n return HMR_PORT || location.port;\n}\n\n// eslint-disable-next-line no-redeclare\nvar parent = module.bundle.parent;\nif ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {\n var hostname = getHostname();\n var port = getPort();\n var protocol = HMR_SECURE || location.protocol == 'https:' && !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname) ? 'wss' : 'ws';\n var ws;\n try {\n ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');\n } catch (err) {\n if (err.message) {\n console.error(err.message);\n }\n ws = {};\n }\n\n // Web extension context\n var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser;\n\n // Safari doesn't support sourceURL in error stacks.\n // eval may also be disabled via CSP, so do a quick check.\n var supportsSourceURL = false;\n try {\n (0, eval)('throw new Error(\"test\"); //# sourceURL=test.js');\n } catch (err) {\n supportsSourceURL = err.stack.includes('test.js');\n }\n\n // $FlowFixMe\n ws.onmessage = async function (event /*: {data: string, ...} */) {\n checkedAssets = {} /*: {|[string]: boolean|} */;\n assetsToAccept = [];\n assetsToDispose = [];\n var data /*: HMRMessage */ = JSON.parse(event.data);\n if (data.type === 'update') {\n // Remove error overlay if there is one\n if (typeof document !== 'undefined') {\n removeErrorOverlay();\n }\n let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH);\n\n // Handle HMR Update\n let handled = assets.every(asset => {\n return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);\n });\n if (handled) {\n console.clear();\n\n // Dispatch custom event so other runtimes (e.g React Refresh) are aware.\n if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {\n window.dispatchEvent(new CustomEvent('parcelhmraccept'));\n }\n await hmrApplyUpdates(assets);\n\n // Dispose all old assets.\n let processedAssets = {} /*: {|[string]: boolean|} */;\n for (let i = 0; i < assetsToDispose.length; i++) {\n let id = assetsToDispose[i][1];\n if (!processedAssets[id]) {\n hmrDispose(assetsToDispose[i][0], id);\n processedAssets[id] = true;\n }\n }\n\n // Run accept callbacks. This will also re-execute other disposed assets in topological order.\n processedAssets = {};\n for (let i = 0; i < assetsToAccept.length; i++) {\n let id = assetsToAccept[i][1];\n if (!processedAssets[id]) {\n hmrAccept(assetsToAccept[i][0], id);\n processedAssets[id] = true;\n }\n }\n } else fullReload();\n }\n if (data.type === 'error') {\n // Log parcel errors to console\n for (let ansiDiagnostic of data.diagnostics.ansi) {\n let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;\n console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\\n' + stack + '\\n\\n' + ansiDiagnostic.hints.join('\\n'));\n }\n if (typeof document !== 'undefined') {\n // Render the fancy html overlay\n removeErrorOverlay();\n var overlay = createErrorOverlay(data.diagnostics.html);\n // $FlowFixMe\n document.body.appendChild(overlay);\n }\n }\n };\n ws.onerror = function (e) {\n if (e.message) {\n console.error(e.message);\n }\n };\n ws.onclose = function () {\n console.warn('[parcel] 🚨 Connection to the HMR server was lost');\n };\n}\nfunction removeErrorOverlay() {\n var overlay = document.getElementById(OVERLAY_ID);\n if (overlay) {\n overlay.remove();\n console.log('[parcel] ✨ Error resolved');\n }\n}\nfunction createErrorOverlay(diagnostics) {\n var overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n let errorHTML = '
';\n for (let diagnostic of diagnostics) {\n let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => {\n return `${p}\n${frame.location}\n${frame.code}`;\n }, '') : diagnostic.stack;\n errorHTML += `\n
\n
\n 🚨 ${diagnostic.message}\n
\n
${stack}
\n
\n ${diagnostic.hints.map(hint => '
💡 ' + hint + '
').join('')}\n
\n ${diagnostic.documentation ? `` : ''}\n
\n `;\n }\n errorHTML += '
';\n overlay.innerHTML = errorHTML;\n return overlay;\n}\nfunction fullReload() {\n if ('reload' in location) {\n location.reload();\n } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) {\n extCtx.runtime.reload();\n }\n}\nfunction getParents(bundle, id) /*: Array<[ParcelRequire, string]> */{\n var modules = bundle.modules;\n if (!modules) {\n return [];\n }\n var parents = [];\n var k, d, dep;\n for (k in modules) {\n for (d in modules[k][1]) {\n dep = modules[k][1][d];\n if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {\n parents.push([bundle, k]);\n }\n }\n }\n if (bundle.parent) {\n parents = parents.concat(getParents(bundle.parent, id));\n }\n return parents;\n}\nfunction updateLink(link) {\n var href = link.getAttribute('href');\n if (!href) {\n return;\n }\n var newLink = link.cloneNode();\n newLink.onload = function () {\n if (link.parentNode !== null) {\n // $FlowFixMe\n link.parentNode.removeChild(link);\n }\n };\n newLink.setAttribute('href',\n // $FlowFixMe\n href.split('?')[0] + '?' + Date.now());\n // $FlowFixMe\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n // $FlowFixMe[incompatible-type]\n var href /*: string */ = links[i].getAttribute('href');\n var hostname = getHostname();\n var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\\\/\\\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());\n var absolute = /^https?:\\/\\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer;\n if (!absolute) {\n updateLink(links[i]);\n }\n }\n cssTimeout = null;\n }, 50);\n}\nfunction hmrDownload(asset) {\n if (asset.type === 'js') {\n if (typeof document !== 'undefined') {\n let script = document.createElement('script');\n script.src = asset.url + '?t=' + Date.now();\n if (asset.outputFormat === 'esmodule') {\n script.type = 'module';\n }\n return new Promise((resolve, reject) => {\n var _document$head;\n script.onload = () => resolve(script);\n script.onerror = reject;\n (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script);\n });\n } else if (typeof importScripts === 'function') {\n // Worker scripts\n if (asset.outputFormat === 'esmodule') {\n return __parcel__import__(asset.url + '?t=' + Date.now());\n } else {\n return new Promise((resolve, reject) => {\n try {\n __parcel__importScripts__(asset.url + '?t=' + Date.now());\n resolve();\n } catch (err) {\n reject(err);\n }\n });\n }\n }\n }\n}\nasync function hmrApplyUpdates(assets) {\n global.parcelHotUpdate = Object.create(null);\n let scriptsToRemove;\n try {\n // If sourceURL comments aren't supported in eval, we need to load\n // the update from the dev server over HTTP so that stack traces\n // are correct in errors/logs. This is much slower than eval, so\n // we only do it if needed (currently just Safari).\n // https://bugs.webkit.org/show_bug.cgi?id=137297\n // This path is also taken if a CSP disallows eval.\n if (!supportsSourceURL) {\n let promises = assets.map(asset => {\n var _hmrDownload;\n return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => {\n // Web extension fix\n if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) {\n extCtx.runtime.reload();\n return;\n }\n throw err;\n });\n });\n scriptsToRemove = await Promise.all(promises);\n }\n assets.forEach(function (asset) {\n hmrApply(module.bundle.root, asset);\n });\n } finally {\n delete global.parcelHotUpdate;\n if (scriptsToRemove) {\n scriptsToRemove.forEach(script => {\n if (script) {\n var _document$head2;\n (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script);\n }\n });\n }\n }\n}\nfunction hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (asset.type === 'css') {\n reloadCSS();\n } else if (asset.type === 'js') {\n let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];\n if (deps) {\n if (modules[asset.id]) {\n // Remove dependencies that are removed and will become orphaned.\n // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload.\n let oldDeps = modules[asset.id][1];\n for (let dep in oldDeps) {\n if (!deps[dep] || deps[dep] !== oldDeps[dep]) {\n let id = oldDeps[dep];\n let parents = getParents(module.bundle.root, id);\n if (parents.length === 1) {\n hmrDelete(module.bundle.root, id);\n }\n }\n }\n }\n if (supportsSourceURL) {\n // Global eval. We would use `new Function` here but browser\n // support for source maps is better with eval.\n (0, eval)(asset.output);\n }\n\n // $FlowFixMe\n let fn = global.parcelHotUpdate[asset.id];\n modules[asset.id] = [fn, deps];\n } else if (bundle.parent) {\n hmrApply(bundle.parent, asset);\n }\n }\n}\nfunction hmrDelete(bundle, id) {\n let modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (modules[id]) {\n // Collect dependencies that will become orphaned when this module is deleted.\n let deps = modules[id][1];\n let orphans = [];\n for (let dep in deps) {\n let parents = getParents(module.bundle.root, deps[dep]);\n if (parents.length === 1) {\n orphans.push(deps[dep]);\n }\n }\n\n // Delete the module. This must be done before deleting dependencies in case of circular dependencies.\n delete modules[id];\n delete bundle.cache[id];\n\n // Now delete the orphans.\n orphans.forEach(id => {\n hmrDelete(module.bundle.root, id);\n });\n } else if (bundle.parent) {\n hmrDelete(bundle.parent, id);\n }\n}\nfunction hmrAcceptCheck(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n if (hmrAcceptCheckOne(bundle, id, depsByBundle)) {\n return true;\n }\n\n // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload.\n let parents = getParents(module.bundle.root, id);\n let accepted = false;\n while (parents.length > 0) {\n let v = parents.shift();\n let a = hmrAcceptCheckOne(v[0], v[1], null);\n if (a) {\n // If this parent accepts, stop traversing upward, but still consider siblings.\n accepted = true;\n } else {\n // Otherwise, queue the parents in the next level upward.\n let p = getParents(module.bundle.root, v[1]);\n if (p.length === 0) {\n // If there are no parents, then we've reached an entry without accepting. Reload.\n accepted = false;\n break;\n }\n parents.push(...p);\n }\n }\n return accepted;\n}\nfunction hmrAcceptCheckOne(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {\n // If we reached the root bundle without finding where the asset should go,\n // there's nothing to do. Mark as \"accepted\" so we don't reload the page.\n if (!bundle.parent) {\n return true;\n }\n return hmrAcceptCheck(bundle.parent, id, depsByBundle);\n }\n if (checkedAssets[id]) {\n return true;\n }\n checkedAssets[id] = true;\n var cached = bundle.cache[id];\n assetsToDispose.push([bundle, id]);\n if (!cached || cached.hot && cached.hot._acceptCallbacks.length) {\n assetsToAccept.push([bundle, id]);\n return true;\n }\n}\nfunction hmrDispose(bundle /*: ParcelRequire */, id /*: string */) {\n var cached = bundle.cache[id];\n bundle.hotData[id] = {};\n if (cached && cached.hot) {\n cached.hot.data = bundle.hotData[id];\n }\n if (cached && cached.hot && cached.hot._disposeCallbacks.length) {\n cached.hot._disposeCallbacks.forEach(function (cb) {\n cb(bundle.hotData[id]);\n });\n }\n delete bundle.cache[id];\n}\nfunction hmrAccept(bundle /*: ParcelRequire */, id /*: string */) {\n // Execute the module.\n bundle(id);\n\n // Run the accept callbacks in the new version of the module.\n var cached = bundle.cache[id];\n if (cached && cached.hot && cached.hot._acceptCallbacks.length) {\n cached.hot._acceptCallbacks.forEach(function (cb) {\n var assetsToAlsoAccept = cb(function () {\n return getParents(module.bundle.root, id);\n });\n if (assetsToAlsoAccept && assetsToAccept.length) {\n assetsToAlsoAccept.forEach(function (a) {\n hmrDispose(a[0], a[1]);\n });\n\n // $FlowFixMe[method-unbinding]\n assetsToAccept.push.apply(assetsToAccept, assetsToAlsoAccept);\n }\n });\n }\n}","import './info'\nimport { debug } from './components/debug'\nimport { Point } from 'paper'\nimport { Puzzle } from './components/puzzle'\nimport { OffsetCoordinates } from './components/coordinates/offset'\n\nif (process.env.NODE_ENV === 'production') {\n require('./analytics')\n require('./feedback')\n}\n\nconst puzzle = new Puzzle()\nconst beaming = { debug, puzzle }\n\n// Used by functional tests\nbeaming.centerOnTile = function (r, c) {\n return puzzle.centerOnTile(new OffsetCoordinates(r, c))\n}\n\nbeaming.clearDebugPoints = puzzle.clearDebugPoints.bind(puzzle)\nbeaming.drawDebugPoint = function (x, y, style) {\n return puzzle.drawDebugPoint(new Point(x, y), style)\n}\n\n// Export\nwindow.beaming = beaming\n","const container = document.getElementById('feedback-container')\nconst dialog = document.getElementById('dialog')\nconst help = document.getElementById('help')\n\ndocument.getElementById('info').addEventListener('click', () => {\n if (!dialog.open) {\n dialog.showModal()\n }\n})\n\ndocument.getElementById('feedback').addEventListener('click', () => {\n help.setAttribute('open', 'true')\n container.scrollIntoView(true)\n})\n","import { params } from './util'\n\nconst console = window.console = window.console || { debug: function () {} }\nconst consoleDebug = console.debug\n\nexport function debug (debug) {\n console.debug = debug ? consoleDebug : function () {}\n}\n\n// Silence debug logging by default\ndebug(params.has('debug') ?? false)\n","import * as jsonDiffPatchFactory from 'jsondiffpatch'\nimport pako from 'pako'\nimport chroma from 'chroma-js'\nimport { Point } from 'paper'\n\nconst location = window.location\n\nexport const params = new URLSearchParams(location.search)\nexport const url = new URL(location)\n\n// noinspection JSCheckFunctionSignatures\nexport const jsonDiffPatch = jsonDiffPatchFactory.create({ objectHash: deepEqual })\n\nexport function addClass (className, ...elements) {\n elements.forEach((element) => element.classList.add(className))\n}\n\nexport function addDegrees (original, degrees) {\n const result = original + degrees\n if (result < 0) return 360 + result\n else if (result > 360) return result - 360\n return result\n}\n\nexport function addDirection (direction, amount) {\n return ((direction + amount) + 6) % 6\n}\n\nexport function base64decode (string) {\n const binString = window.atob(base64unescape(string))\n // noinspection JSCheckFunctionSignatures\n return new TextDecoder().decode(pako.inflate(Uint8Array.from(binString, (c) => c.codePointAt(0))))\n}\n\nwindow.base64decode = base64decode\n\nexport function base64encode (string) {\n return base64escape(window.btoa(String.fromCodePoint(...pako.deflate(new TextEncoder().encode(string)))))\n}\n\nwindow.base64encode = base64encode\n\nfunction base64escape (string) {\n // https://en.wikipedia.org/wiki/Base64#URL_applications\n return string.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n}\n\nfunction base64unescape (string) {\n return (string + '==='.slice((string.length + 3) % 4))\n .replace(/-/g, '+').replace(/_/g, '/')\n}\n\nexport function capitalize (string) {\n return string.charAt(0).toUpperCase() + string.slice(1)\n}\n\nexport function coalesce (...args) {\n return args.findLast((arg) => arg !== undefined)\n}\n\n/**\n * Calls the given function one time after a task has finished for the given amount of time.\n * @param func the function to call\n * @param delay the time to wait after the task has completed\n * @returns {(function(...[*]): void)|*}\n */\nexport function debounce (func, delay = 500) {\n let timeout\n return (...args) => {\n clearTimeout(timeout)\n timeout = setTimeout(() => {\n func(...args)\n }, delay)\n }\n}\n\nexport function deepEqual (x, y) {\n return typeof x === 'object' && typeof y === 'object'\n ? (\n Object.keys(x).length === Object.keys(y).length &&\n Object.keys(x).every(key => {\n const xv = x[key]\n const yv = y[key]\n return Object.hasOwn(y, key) &&\n (typeof xv?.equals === 'function' ? xv.equals(yv) : deepEqual(xv, yv))\n })\n )\n : (x === y)\n}\n\nexport function emitEvent (event, detail = null) {\n document.dispatchEvent(new CustomEvent(event, { detail }))\n}\n\nexport function fuzzyEquals (pointA, pointB, maxDiff = 0) {\n return pointA && pointB && pointA.round().subtract(pointB.round()).length <= maxDiff\n}\n\nexport function getCentroid (triangle) {\n const segments = triangle.segments\n const vertex = segments[0].point\n const opposite = segments[1].point.subtract(segments[1].point.subtract(segments[2].point).divide(2))\n return vertex.add(opposite.subtract(vertex).multiply(2 / 3))\n}\n\nexport function getColorElement (color) {\n const span = document.createElement('span')\n span.classList.add('beam')\n span.style.backgroundColor = color\n span.title = color\n return span\n}\n\nexport function getColorElements (colors) {\n if (!colors.length) {\n return []\n }\n\n const color = chroma.average(colors).hex()\n const elements = []\n\n if (colors.some((other) => other !== color)) {\n const maxColorIndex = colors.length - 1\n\n colors.forEach((color, index) => {\n elements.push(getColorElement(color))\n if (index < maxColorIndex) {\n const plus = document.createElement('span')\n plus.classList.add('text')\n plus.textContent = '+'\n elements.push(plus)\n }\n })\n\n const equals = document.createElement('span')\n equals.classList.add('text')\n equals.textContent = '='\n elements.push(equals)\n }\n\n elements.push(getColorElement(color))\n\n return elements\n}\n\nexport function getDistance (point) {\n return (a, b) => a.subtract(point).length - b.subtract(point).length\n}\n\nexport function getIconElement (name, title) {\n const span = document.createElement('span')\n span.classList.add('icon', 'material-symbols-outlined')\n span.textContent = name\n span.title = title ?? capitalize(name)\n return span\n}\n\nexport function getPointBetween (pointA, pointB, length = (length) => length / 2) {\n const vector = pointA.subtract(pointB)\n vector.length = typeof length === 'function' ? length(vector.length) : length\n return pointA.subtract(vector)\n}\n\nexport function getPointFrom (point, length, direction) {\n const vector = new Point(0, 0)\n vector.length = length\n vector.angle = getConvertedDirection(direction) * 60\n return point.add(vector)\n}\n\nexport function getOppositeDirection (direction) {\n return direction + (direction >= 3 ? -3 : 3)\n}\n\n// Normalize the direction. Currently, directions correspond to points in the hexagon as PaperJS draws it, with the\n// first point (direction zero) corresponding to direction 4 in the cube system. May want to revisit this at some\n// point when standardizing directions across everything.\n// See: http://paperjs.org/tutorials/geometry/vector-geometry/\n// TODO: may want to consider updating directions across this project to something more uniform\nexport function getConvertedDirection (direction, toPaperJs = true) {\n direction = direction + (toPaperJs ? -1 : 1) * 2\n if (direction < 0) return direction + 6\n else if (direction > 5) return direction - 6\n return direction\n}\n\n// Gets the position of the point relative to the line.\n// Returns 0 if point is on the line, +1 on one side of the line and -1 on the other.\nexport function getPosition (line, point) {\n const [a, b] = line; const c = point\n return Math.sign((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x))\n}\n\nexport function getReflectedDirection (beamDirection, reflectorDirection) {\n // Have to convert to PaperJS directions on the way in\n const beamAngle = getConvertedDirection(beamDirection, true) * 60\n const reflectorAngle = reflectorDirection * 30\n const reflectedBeamAngle = (reflectorAngle - beamAngle) * 2\n // And convert back to our normal directions on the way out\n return getConvertedDirection((addDegrees(beamAngle, reflectedBeamAngle) / 60) % 6, false)\n}\n\nexport function getTextElement (text) {\n const span = document.createElement('span')\n span.classList.add('text')\n span.textContent = text.toString()\n return span\n}\n\nexport function noop (value) {\n if (value) {\n return value\n }\n}\n\nexport function removeClass (className, ...elements) {\n elements.forEach((element) => element.classList.remove(className))\n}\n\nexport function subtractDirection (direction, amount) {\n return addDirection(direction, amount * -1)\n}\n\nexport function uniqueBy (array, key) {\n const values = array.map((value) => value[key])\n return array.filter((value, index) => !values.includes(value[key], index + 1))\n}\n","import DiffPatcher from './diffpatcher.js';\nimport dateReviver from './date-reviver.js';\nexport { DiffPatcher, dateReviver };\nexport function create(options) {\n return new DiffPatcher(options);\n}\nlet defaultInstance;\nexport function diff(left, right) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.diff(left, right);\n}\nexport function patch(left, delta) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.patch(left, delta);\n}\nexport function unpatch(right, delta) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.unpatch(right, delta);\n}\nexport function reverse(delta) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.reverse(delta);\n}\nexport function clone(value) {\n if (!defaultInstance) {\n defaultInstance = new DiffPatcher();\n }\n return defaultInstance.clone(value);\n}\n","import Processor from './processor.js';\nimport Pipe from './pipe.js';\nimport DiffContext from './contexts/diff.js';\nimport PatchContext from './contexts/patch.js';\nimport ReverseContext from './contexts/reverse.js';\nimport clone from './clone.js';\nimport * as trivial from './filters/trivial.js';\nimport * as nested from './filters/nested.js';\nimport * as arrays from './filters/arrays.js';\nimport * as dates from './filters/dates.js';\nimport * as texts from './filters/texts.js';\nclass DiffPatcher {\n constructor(options) {\n this.processor = new Processor(options);\n this.processor.pipe(new Pipe('diff')\n .append(nested.collectChildrenDiffFilter, trivial.diffFilter, dates.diffFilter, texts.diffFilter, nested.objectsDiffFilter, arrays.diffFilter)\n .shouldHaveResult());\n this.processor.pipe(new Pipe('patch')\n .append(nested.collectChildrenPatchFilter, arrays.collectChildrenPatchFilter, trivial.patchFilter, texts.patchFilter, nested.patchFilter, arrays.patchFilter)\n .shouldHaveResult());\n this.processor.pipe(new Pipe('reverse')\n .append(nested.collectChildrenReverseFilter, arrays.collectChildrenReverseFilter, trivial.reverseFilter, texts.reverseFilter, nested.reverseFilter, arrays.reverseFilter)\n .shouldHaveResult());\n }\n options(options) {\n return this.processor.options(options);\n }\n diff(left, right) {\n return this.processor.process(new DiffContext(left, right));\n }\n patch(left, delta) {\n return this.processor.process(new PatchContext(left, delta));\n }\n reverse(delta) {\n return this.processor.process(new ReverseContext(delta));\n }\n unpatch(right, delta) {\n return this.patch(right, this.reverse(delta));\n }\n clone(value) {\n return clone(value);\n }\n}\nexport default DiffPatcher;\n","class Processor {\n constructor(options) {\n this.selfOptions = options || {};\n this.pipes = {};\n }\n options(options) {\n if (options) {\n this.selfOptions = options;\n }\n return this.selfOptions;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe(name, pipeArg) {\n let pipe = pipeArg;\n if (typeof name === 'string') {\n if (typeof pipe === 'undefined') {\n return this.pipes[name];\n }\n else {\n this.pipes[name] = pipe;\n }\n }\n if (name && name.name) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipe = name;\n if (pipe.processor === this) {\n return pipe;\n }\n this.pipes[pipe.name] = pipe;\n }\n pipe.processor = this;\n return pipe;\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process(input, pipe) {\n let context = input;\n context.options = this.options();\n let nextPipe = pipe || input.pipe || 'default';\n let lastPipe;\n while (nextPipe) {\n if (typeof context.nextAfterChildren !== 'undefined') {\n // children processed and coming back to parent\n context.next = context.nextAfterChildren;\n context.nextAfterChildren = null;\n }\n if (typeof nextPipe === 'string') {\n nextPipe = this.pipe(nextPipe);\n }\n nextPipe.process(context);\n lastPipe = nextPipe;\n nextPipe = null;\n if (context) {\n if (context.next) {\n context = context.next;\n nextPipe = context.pipe || lastPipe;\n }\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return context.hasResult ? context.result : undefined;\n }\n}\nexport default Processor;\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nclass Pipe {\n constructor(name) {\n this.name = name;\n this.filters = [];\n }\n process(input) {\n if (!this.processor) {\n throw new Error('add this pipe to a processor before using it');\n }\n const debug = this.debug;\n const length = this.filters.length;\n const context = input;\n for (let index = 0; index < length; index++) {\n const filter = this.filters[index];\n if (debug) {\n this.log(`filter: ${filter.filterName}`);\n }\n filter(context);\n if (typeof context === 'object' && context.exiting) {\n context.exiting = false;\n break;\n }\n }\n if (!context.next && this.resultCheck) {\n this.resultCheck(context);\n }\n }\n log(msg) {\n console.log(`[jsondiffpatch] ${this.name} pipe, ${msg}`);\n }\n append(...args) {\n this.filters.push(...args);\n return this;\n }\n prepend(...args) {\n this.filters.unshift(...args);\n return this;\n }\n indexOf(filterName) {\n if (!filterName) {\n throw new Error('a filter name is required');\n }\n for (let index = 0; index < this.filters.length; index++) {\n const filter = this.filters[index];\n if (filter.filterName === filterName) {\n return index;\n }\n }\n throw new Error(`filter not found: ${filterName}`);\n }\n list() {\n return this.filters.map((f) => f.filterName);\n }\n after(filterName, ...params) {\n const index = this.indexOf(filterName);\n this.filters.splice(index + 1, 0, ...params);\n return this;\n }\n before(filterName, ...params) {\n const index = this.indexOf(filterName);\n this.filters.splice(index, 0, ...params);\n return this;\n }\n replace(filterName, ...params) {\n const index = this.indexOf(filterName);\n this.filters.splice(index, 1, ...params);\n return this;\n }\n remove(filterName) {\n const index = this.indexOf(filterName);\n this.filters.splice(index, 1);\n return this;\n }\n clear() {\n this.filters.length = 0;\n return this;\n }\n shouldHaveResult(should) {\n if (should === false) {\n this.resultCheck = null;\n return;\n }\n if (this.resultCheck) {\n return;\n }\n this.resultCheck = (context) => {\n if (!context.hasResult) {\n console.log(context);\n const error = new Error(`${this.name} failed`);\n error.noResult = true;\n throw error;\n }\n };\n return this;\n }\n}\nexport default Pipe;\n","import Context from './context.js';\nimport defaultClone from '../clone.js';\nclass DiffContext extends Context {\n constructor(left, right) {\n super();\n this.left = left;\n this.right = right;\n this.pipe = 'diff';\n }\n setResult(result) {\n if (this.options.cloneDiffValues && typeof result === 'object') {\n const clone = typeof this.options.cloneDiffValues === 'function'\n ? this.options.cloneDiffValues\n : defaultClone;\n if (typeof result[0] === 'object') {\n result[0] = clone(result[0]);\n }\n if (typeof result[1] === 'object') {\n result[1] = clone(result[1]);\n }\n }\n return super.setResult(result);\n }\n}\nexport default DiffContext;\n","export default class Context {\n setResult(result) {\n this.result = result;\n this.hasResult = true;\n return this;\n }\n exit() {\n this.exiting = true;\n return this;\n }\n push(child, name) {\n child.parent = this;\n if (typeof name !== 'undefined') {\n child.childName = name;\n }\n child.root = this.root || this;\n child.options = child.options || this.options;\n if (!this.children) {\n this.children = [child];\n this.nextAfterChildren = this.next || null;\n this.next = child;\n }\n else {\n this.children[this.children.length - 1].next = child;\n this.children.push(child);\n }\n child.next = this;\n return this;\n }\n}\n","function cloneRegExp(re) {\n const regexMatch = /^\\/(.*)\\/([gimyu]*)$/.exec(re.toString());\n return new RegExp(regexMatch[1], regexMatch[2]);\n}\nexport default function clone(arg) {\n if (typeof arg !== 'object') {\n return arg;\n }\n if (arg === null) {\n return null;\n }\n if (Array.isArray(arg)) {\n return arg.map(clone);\n }\n if (arg instanceof Date) {\n return new Date(arg.getTime());\n }\n if (arg instanceof RegExp) {\n return cloneRegExp(arg);\n }\n const cloned = {};\n for (const name in arg) {\n if (Object.prototype.hasOwnProperty.call(arg, name)) {\n cloned[name] = clone(arg[name]);\n }\n }\n return cloned;\n}\n","import Context from './context.js';\nclass PatchContext extends Context {\n constructor(left, delta) {\n super();\n this.left = left;\n this.delta = delta;\n this.pipe = 'patch';\n }\n}\nexport default PatchContext;\n","import Context from './context.js';\nclass ReverseContext extends Context {\n constructor(delta) {\n super();\n this.delta = delta;\n this.pipe = 'reverse';\n }\n}\nexport default ReverseContext;\n","export const diffFilter = function trivialMatchesDiffFilter(context) {\n if (context.left === context.right) {\n context.setResult(undefined).exit();\n return;\n }\n if (typeof context.left === 'undefined') {\n if (typeof context.right === 'function') {\n throw new Error('functions are not supported');\n }\n context.setResult([context.right]).exit();\n return;\n }\n if (typeof context.right === 'undefined') {\n context.setResult([context.left, 0, 0]).exit();\n return;\n }\n if (typeof context.left === 'function' ||\n typeof context.right === 'function') {\n throw new Error('functions are not supported');\n }\n context.leftType = context.left === null ? 'null' : typeof context.left;\n context.rightType = context.right === null ? 'null' : typeof context.right;\n if (context.leftType !== context.rightType) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.leftType === 'boolean' || context.leftType === 'number') {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.leftType === 'object') {\n context.leftIsArray = Array.isArray(context.left);\n }\n if (context.rightType === 'object') {\n context.rightIsArray = Array.isArray(context.right);\n }\n if (context.leftIsArray !== context.rightIsArray) {\n context.setResult([context.left, context.right]).exit();\n return;\n }\n if (context.left instanceof RegExp) {\n if (context.right instanceof RegExp) {\n context\n .setResult([context.left.toString(), context.right.toString()])\n .exit();\n }\n else {\n context.setResult([context.left, context.right]).exit();\n }\n }\n};\ndiffFilter.filterName = 'trivial';\nexport const patchFilter = function trivialMatchesPatchFilter(context) {\n if (typeof context.delta === 'undefined') {\n context.setResult(context.left).exit();\n return;\n }\n context.nested = !Array.isArray(context.delta);\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta.length === 1) {\n context.setResult(nonNestedDelta[0]).exit();\n return;\n }\n if (nonNestedDelta.length === 2) {\n if (context.left instanceof RegExp) {\n const regexArgs = /^\\/(.*)\\/([gimyu]+)$/.exec(nonNestedDelta[1]);\n if (regexArgs) {\n context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit();\n return;\n }\n }\n context.setResult(nonNestedDelta[1]).exit();\n return;\n }\n if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {\n context.setResult(undefined).exit();\n }\n};\npatchFilter.filterName = 'trivial';\nexport const reverseFilter = function trivialReferseFilter(context) {\n if (typeof context.delta === 'undefined') {\n context.setResult(context.delta).exit();\n return;\n }\n context.nested = !Array.isArray(context.delta);\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta.length === 1) {\n context.setResult([nonNestedDelta[0], 0, 0]).exit();\n return;\n }\n if (nonNestedDelta.length === 2) {\n context.setResult([nonNestedDelta[1], nonNestedDelta[0]]).exit();\n return;\n }\n if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {\n context.setResult([nonNestedDelta[0]]).exit();\n }\n};\nreverseFilter.filterName = 'trivial';\n","import DiffContext from '../contexts/diff.js';\nimport PatchContext from '../contexts/patch.js';\nimport ReverseContext from '../contexts/reverse.js';\nexport const collectChildrenDiffFilter = (context) => {\n if (!context || !context.children) {\n return;\n }\n const length = context.children.length;\n let child;\n let result = context.result;\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n if (typeof child.result === 'undefined') {\n continue;\n }\n result = result || {};\n result[child.childName] = child.result;\n }\n if (result && context.leftIsArray) {\n result._t = 'a';\n }\n context.setResult(result).exit();\n};\ncollectChildrenDiffFilter.filterName = 'collectChildren';\nexport const objectsDiffFilter = (context) => {\n if (context.leftIsArray || context.leftType !== 'object') {\n return;\n }\n const left = context.left;\n const right = context.right;\n let name;\n let child;\n const propertyFilter = context.options.propertyFilter;\n for (name in left) {\n if (!Object.prototype.hasOwnProperty.call(left, name)) {\n continue;\n }\n if (propertyFilter && !propertyFilter(name, context)) {\n continue;\n }\n child = new DiffContext(left[name], right[name]);\n context.push(child, name);\n }\n for (name in right) {\n if (!Object.prototype.hasOwnProperty.call(right, name)) {\n continue;\n }\n if (propertyFilter && !propertyFilter(name, context)) {\n continue;\n }\n if (typeof left[name] === 'undefined') {\n child = new DiffContext(undefined, right[name]);\n context.push(child, name);\n }\n }\n if (!context.children || context.children.length === 0) {\n context.setResult(undefined).exit();\n return;\n }\n context.exit();\n};\nobjectsDiffFilter.filterName = 'objects';\nexport const patchFilter = function nestedPatchFilter(context) {\n if (!context.nested) {\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t) {\n return;\n }\n const objectDelta = nestedDelta;\n let name;\n let child;\n for (name in objectDelta) {\n child = new PatchContext(context.left[name], objectDelta[name]);\n context.push(child, name);\n }\n context.exit();\n};\npatchFilter.filterName = 'objects';\nexport const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t) {\n return;\n }\n const object = context.left;\n const length = context.children.length;\n let child;\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n const property = child.childName;\n if (Object.prototype.hasOwnProperty.call(context.left, property) &&\n child.result === undefined) {\n delete object[property];\n }\n else if (object[property] !== child.result) {\n object[property] = child.result;\n }\n }\n context.setResult(object).exit();\n};\ncollectChildrenPatchFilter.filterName = 'collectChildren';\nexport const reverseFilter = function nestedReverseFilter(context) {\n if (!context.nested) {\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t) {\n return;\n }\n const objectDelta = context.delta;\n let name;\n let child;\n for (name in objectDelta) {\n child = new ReverseContext(objectDelta[name]);\n context.push(child, name);\n }\n context.exit();\n};\nreverseFilter.filterName = 'objects';\nexport const collectChildrenReverseFilter = (context) => {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t) {\n return;\n }\n const length = context.children.length;\n let child;\n const delta = {};\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n const property = child.childName;\n if (delta[property] !== child.result) {\n delta[property] = child.result;\n }\n }\n context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'collectChildren';\n","import DiffContext from '../contexts/diff.js';\nimport PatchContext from '../contexts/patch.js';\nimport ReverseContext from '../contexts/reverse.js';\nimport lcs from './lcs.js';\nconst ARRAY_MOVE = 3;\nfunction arraysHaveMatchByRef(array1, array2, len1, len2) {\n for (let index1 = 0; index1 < len1; index1++) {\n const val1 = array1[index1];\n for (let index2 = 0; index2 < len2; index2++) {\n const val2 = array2[index2];\n if (index1 !== index2 && val1 === val2) {\n return true;\n }\n }\n }\n}\nfunction matchItems(array1, array2, index1, index2, context) {\n const value1 = array1[index1];\n const value2 = array2[index2];\n if (value1 === value2) {\n return true;\n }\n if (typeof value1 !== 'object' || typeof value2 !== 'object') {\n return false;\n }\n const objectHash = context.objectHash;\n if (!objectHash) {\n // no way to match objects was provided, try match by position\n return context.matchByPosition && index1 === index2;\n }\n context.hashCache1 = context.hashCache1 || [];\n let hash1 = context.hashCache1[index1];\n if (typeof hash1 === 'undefined') {\n context.hashCache1[index1] = hash1 = objectHash(value1, index1);\n }\n if (typeof hash1 === 'undefined') {\n return false;\n }\n context.hashCache2 = context.hashCache2 || [];\n let hash2 = context.hashCache2[index2];\n if (typeof hash2 === 'undefined') {\n context.hashCache2[index2] = hash2 = objectHash(value2, index2);\n }\n if (typeof hash2 === 'undefined') {\n return false;\n }\n return hash1 === hash2;\n}\nexport const diffFilter = function arraysDiffFilter(context) {\n if (!context.leftIsArray) {\n return;\n }\n const matchContext = {\n objectHash: context.options && context.options.objectHash,\n matchByPosition: context.options && context.options.matchByPosition,\n };\n let commonHead = 0;\n let commonTail = 0;\n let index;\n let index1;\n let index2;\n const array1 = context.left;\n const array2 = context.right;\n const len1 = array1.length;\n const len2 = array2.length;\n let child;\n if (len1 > 0 &&\n len2 > 0 &&\n !matchContext.objectHash &&\n typeof matchContext.matchByPosition !== 'boolean') {\n matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2);\n }\n // separate common head\n while (commonHead < len1 &&\n commonHead < len2 &&\n matchItems(array1, array2, commonHead, commonHead, matchContext)) {\n index = commonHead;\n child = new DiffContext(array1[index], array2[index]);\n context.push(child, index);\n commonHead++;\n }\n // separate common tail\n while (commonTail + commonHead < len1 &&\n commonTail + commonHead < len2 &&\n matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) {\n index1 = len1 - 1 - commonTail;\n index2 = len2 - 1 - commonTail;\n child = new DiffContext(array1[index1], array2[index2]);\n context.push(child, index2);\n commonTail++;\n }\n let result;\n if (commonHead + commonTail === len1) {\n if (len1 === len2) {\n // arrays are identical\n context.setResult(undefined).exit();\n return;\n }\n // trivial case, a block (1 or more consecutive items) was added\n result = result || {\n _t: 'a',\n };\n for (index = commonHead; index < len2 - commonTail; index++) {\n result[index] = [array2[index]];\n }\n context.setResult(result).exit();\n return;\n }\n if (commonHead + commonTail === len2) {\n // trivial case, a block (1 or more consecutive items) was removed\n result = result || {\n _t: 'a',\n };\n for (index = commonHead; index < len1 - commonTail; index++) {\n result[`_${index}`] = [array1[index], 0, 0];\n }\n context.setResult(result).exit();\n return;\n }\n // reset hash cache\n delete matchContext.hashCache1;\n delete matchContext.hashCache2;\n // diff is not trivial, find the LCS (Longest Common Subsequence)\n const trimmed1 = array1.slice(commonHead, len1 - commonTail);\n const trimmed2 = array2.slice(commonHead, len2 - commonTail);\n const seq = lcs.get(trimmed1, trimmed2, matchItems, matchContext);\n const removedItems = [];\n result = result || {\n _t: 'a',\n };\n for (index = commonHead; index < len1 - commonTail; index++) {\n if (seq.indices1.indexOf(index - commonHead) < 0) {\n // removed\n result[`_${index}`] = [array1[index], 0, 0];\n removedItems.push(index);\n }\n }\n let detectMove = true;\n if (context.options &&\n context.options.arrays &&\n context.options.arrays.detectMove === false) {\n detectMove = false;\n }\n let includeValueOnMove = false;\n if (context.options &&\n context.options.arrays &&\n context.options.arrays.includeValueOnMove) {\n includeValueOnMove = true;\n }\n const removedItemsLength = removedItems.length;\n for (index = commonHead; index < len2 - commonTail; index++) {\n const indexOnArray2 = seq.indices2.indexOf(index - commonHead);\n if (indexOnArray2 < 0) {\n // added, try to match with a removed item and register as position move\n let isMove = false;\n if (detectMove && removedItemsLength > 0) {\n for (let removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) {\n index1 = removedItems[removeItemIndex1];\n if (matchItems(trimmed1, trimmed2, index1 - commonHead, index - commonHead, matchContext)) {\n // store position move as: [originalValue, newPosition, ARRAY_MOVE]\n result[`_${index1}`].splice(1, 2, index, ARRAY_MOVE);\n if (!includeValueOnMove) {\n // don't include moved value on diff, to save bytes\n result[`_${index1}`][0] = '';\n }\n index2 = index;\n child = new DiffContext(array1[index1], array2[index2]);\n context.push(child, index2);\n removedItems.splice(removeItemIndex1, 1);\n isMove = true;\n break;\n }\n }\n }\n if (!isMove) {\n // added\n result[index] = [array2[index]];\n }\n }\n else {\n // match, do inner diff\n index1 = seq.indices1[indexOnArray2] + commonHead;\n index2 = seq.indices2[indexOnArray2] + commonHead;\n child = new DiffContext(array1[index1], array2[index2]);\n context.push(child, index2);\n }\n }\n context.setResult(result).exit();\n};\ndiffFilter.filterName = 'arrays';\nconst compare = {\n numerically(a, b) {\n return a - b;\n },\n numericallyBy(name) {\n return (a, b) => a[name] - b[name];\n },\n};\nexport const patchFilter = function nestedPatchFilter(context) {\n if (!context.nested) {\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t !== 'a') {\n return;\n }\n let index;\n let index1;\n const delta = nestedDelta;\n const array = context.left;\n // first, separate removals, insertions and modifications\n let toRemove = [];\n let toInsert = [];\n const toModify = [];\n for (index in delta) {\n if (index !== '_t') {\n if (index[0] === '_') {\n const removedOrMovedIndex = index;\n // removed item from original array\n if (delta[removedOrMovedIndex][2] === 0 ||\n delta[removedOrMovedIndex][2] === ARRAY_MOVE) {\n toRemove.push(parseInt(index.slice(1), 10));\n }\n else {\n throw new Error('only removal or move can be applied at original array indices,' +\n ` invalid diff type: ${delta[removedOrMovedIndex][2]}`);\n }\n }\n else {\n const numberIndex = index;\n if (delta[numberIndex].length === 1) {\n // added item at new array\n toInsert.push({\n index: parseInt(numberIndex, 10),\n value: delta[numberIndex][0],\n });\n }\n else {\n // modified item at new array\n toModify.push({\n index: parseInt(numberIndex, 10),\n delta: delta[numberIndex],\n });\n }\n }\n }\n }\n // remove items, in reverse order to avoid sawing our own floor\n toRemove = toRemove.sort(compare.numerically);\n for (index = toRemove.length - 1; index >= 0; index--) {\n index1 = toRemove[index];\n const indexDiff = delta[`_${index1}`];\n const removedValue = array.splice(index1, 1)[0];\n if (indexDiff[2] === ARRAY_MOVE) {\n // reinsert later\n toInsert.push({\n index: indexDiff[1],\n value: removedValue,\n });\n }\n }\n // insert items, in reverse order to avoid moving our own floor\n toInsert = toInsert.sort(compare.numericallyBy('index'));\n const toInsertLength = toInsert.length;\n for (index = 0; index < toInsertLength; index++) {\n const insertion = toInsert[index];\n array.splice(insertion.index, 0, insertion.value);\n }\n // apply modifications\n const toModifyLength = toModify.length;\n let child;\n if (toModifyLength > 0) {\n for (index = 0; index < toModifyLength; index++) {\n const modification = toModify[index];\n child = new PatchContext(array[modification.index], modification.delta);\n context.push(child, modification.index);\n }\n }\n if (!context.children) {\n context.setResult(array).exit();\n return;\n }\n context.exit();\n};\npatchFilter.filterName = 'arrays';\nexport const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t !== 'a') {\n return;\n }\n const array = context.left;\n const length = context.children.length;\n let child;\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n const arrayIndex = child.childName;\n array[arrayIndex] = child.result;\n }\n context.setResult(array).exit();\n};\ncollectChildrenPatchFilter.filterName = 'arraysCollectChildren';\nexport const reverseFilter = function arraysReverseFilter(context) {\n if (!context.nested) {\n const nonNestedDelta = context.delta;\n if (nonNestedDelta[2] === ARRAY_MOVE) {\n const arrayMoveDelta = nonNestedDelta;\n context.newName = `_${arrayMoveDelta[1]}`;\n context\n .setResult([\n arrayMoveDelta[0],\n parseInt(context.childName.substring(1), 10),\n ARRAY_MOVE,\n ])\n .exit();\n }\n return;\n }\n const nestedDelta = context.delta;\n if (nestedDelta._t !== 'a') {\n return;\n }\n const arrayDelta = nestedDelta;\n let name;\n let child;\n for (name in arrayDelta) {\n if (name === '_t') {\n continue;\n }\n child = new ReverseContext(arrayDelta[name]);\n context.push(child, name);\n }\n context.exit();\n};\nreverseFilter.filterName = 'arrays';\nconst reverseArrayDeltaIndex = (delta, index, itemDelta) => {\n if (typeof index === 'string' && index[0] === '_') {\n return parseInt(index.substring(1), 10);\n }\n else if (Array.isArray(itemDelta) && itemDelta[2] === 0) {\n return `_${index}`;\n }\n let reverseIndex = +index;\n for (const deltaIndex in delta) {\n const deltaItem = delta[deltaIndex];\n if (Array.isArray(deltaItem)) {\n if (deltaItem[2] === ARRAY_MOVE) {\n const moveFromIndex = parseInt(deltaIndex.substring(1), 10);\n const moveToIndex = deltaItem[1];\n if (moveToIndex === +index) {\n return moveFromIndex;\n }\n if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) {\n reverseIndex++;\n }\n else if (moveFromIndex >= reverseIndex &&\n moveToIndex < reverseIndex) {\n reverseIndex--;\n }\n }\n else if (deltaItem[2] === 0) {\n const deleteIndex = parseInt(deltaIndex.substring(1), 10);\n if (deleteIndex <= reverseIndex) {\n reverseIndex++;\n }\n }\n else if (deltaItem.length === 1 &&\n parseInt(deltaIndex, 10) <= reverseIndex) {\n reverseIndex--;\n }\n }\n }\n return reverseIndex;\n};\nexport const collectChildrenReverseFilter = (context) => {\n if (!context || !context.children) {\n return;\n }\n const deltaWithChildren = context.delta;\n if (deltaWithChildren._t !== 'a') {\n return;\n }\n const arrayDelta = deltaWithChildren;\n const length = context.children.length;\n let child;\n const delta = {\n _t: 'a',\n };\n for (let index = 0; index < length; index++) {\n child = context.children[index];\n let name = child.newName;\n if (typeof name === 'undefined') {\n name = reverseArrayDeltaIndex(arrayDelta, child.childName, child.result);\n }\n if (delta[name] !== child.result) {\n // There's no way to type this well.\n delta[name] = child.result;\n }\n }\n context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'arraysCollectChildren';\n","/*\n\nLCS implementation that supports arrays or strings\n\nreference: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n\n*/\nconst defaultMatch = function (array1, array2, index1, index2) {\n return array1[index1] === array2[index2];\n};\nconst lengthMatrix = function (array1, array2, match, context) {\n const len1 = array1.length;\n const len2 = array2.length;\n let x, y;\n // initialize empty matrix of len1+1 x len2+1\n const matrix = new Array(len1 + 1);\n for (x = 0; x < len1 + 1; x++) {\n matrix[x] = new Array(len2 + 1);\n for (y = 0; y < len2 + 1; y++) {\n matrix[x][y] = 0;\n }\n }\n matrix.match = match;\n // save sequence lengths for each coordinate\n for (x = 1; x < len1 + 1; x++) {\n for (y = 1; y < len2 + 1; y++) {\n if (match(array1, array2, x - 1, y - 1, context)) {\n matrix[x][y] = matrix[x - 1][y - 1] + 1;\n }\n else {\n matrix[x][y] = Math.max(matrix[x - 1][y], matrix[x][y - 1]);\n }\n }\n }\n return matrix;\n};\nconst backtrack = function (matrix, array1, array2, context) {\n let index1 = array1.length;\n let index2 = array2.length;\n const subsequence = {\n sequence: [],\n indices1: [],\n indices2: [],\n };\n while (index1 !== 0 && index2 !== 0) {\n const sameLetter = matrix.match(array1, array2, index1 - 1, index2 - 1, context);\n if (sameLetter) {\n subsequence.sequence.unshift(array1[index1 - 1]);\n subsequence.indices1.unshift(index1 - 1);\n subsequence.indices2.unshift(index2 - 1);\n --index1;\n --index2;\n }\n else {\n const valueAtMatrixAbove = matrix[index1][index2 - 1];\n const valueAtMatrixLeft = matrix[index1 - 1][index2];\n if (valueAtMatrixAbove > valueAtMatrixLeft) {\n --index2;\n }\n else {\n --index1;\n }\n }\n }\n return subsequence;\n};\nconst get = function (array1, array2, match, context) {\n const innerContext = context || {};\n const matrix = lengthMatrix(array1, array2, match || defaultMatch, innerContext);\n return backtrack(matrix, array1, array2, innerContext);\n};\nexport default {\n get,\n};\n","export const diffFilter = function datesDiffFilter(context) {\n if (context.left instanceof Date) {\n if (context.right instanceof Date) {\n if (context.left.getTime() !== context.right.getTime()) {\n context.setResult([context.left, context.right]);\n }\n else {\n context.setResult(undefined);\n }\n }\n else {\n context.setResult([context.left, context.right]);\n }\n context.exit();\n }\n else if (context.right instanceof Date) {\n context.setResult([context.left, context.right]).exit();\n }\n};\ndiffFilter.filterName = 'dates';\n","const TEXT_DIFF = 2;\nconst DEFAULT_MIN_LENGTH = 60;\nlet cachedDiffPatch = null;\nfunction getDiffMatchPatch(options, required) {\n var _a;\n if (!cachedDiffPatch) {\n let instance;\n if ((_a = options === null || options === void 0 ? void 0 : options.textDiff) === null || _a === void 0 ? void 0 : _a.diffMatchPatch) {\n instance = new options.textDiff.diffMatchPatch();\n }\n else {\n if (!required) {\n return null;\n }\n const error = new Error('The diff-match-patch library was not provided. Pass the library in through the options or use the `jsondiffpatch/with-text-diffs` entry-point.');\n // eslint-disable-next-line camelcase\n error.diff_match_patch_not_found = true;\n throw error;\n }\n cachedDiffPatch = {\n diff: function (txt1, txt2) {\n return instance.patch_toText(instance.patch_make(txt1, txt2));\n },\n patch: function (txt1, patch) {\n const results = instance.patch_apply(instance.patch_fromText(patch), txt1);\n for (let i = 0; i < results[1].length; i++) {\n if (!results[1][i]) {\n const error = new Error('text patch failed');\n error.textPatchFailed = true;\n }\n }\n return results[0];\n },\n };\n }\n return cachedDiffPatch;\n}\nexport const diffFilter = function textsDiffFilter(context) {\n if (context.leftType !== 'string') {\n return;\n }\n const left = context.left;\n const right = context.right;\n const minLength = (context.options &&\n context.options.textDiff &&\n context.options.textDiff.minLength) ||\n DEFAULT_MIN_LENGTH;\n if (left.length < minLength || right.length < minLength) {\n context.setResult([left, right]).exit();\n return;\n }\n // large text, try to use a text-diff algorithm\n const diffMatchPatch = getDiffMatchPatch(context.options);\n if (!diffMatchPatch) {\n // diff-match-patch library not available,\n // fallback to regular string replace\n context.setResult([left, right]).exit();\n return;\n }\n const diff = diffMatchPatch.diff;\n context.setResult([diff(left, right), 0, TEXT_DIFF]).exit();\n};\ndiffFilter.filterName = 'texts';\nexport const patchFilter = function textsPatchFilter(context) {\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta[2] !== TEXT_DIFF) {\n return;\n }\n const textDiffDelta = nonNestedDelta;\n // text-diff, use a text-patch algorithm\n const patch = getDiffMatchPatch(context.options, true).patch;\n context.setResult(patch(context.left, textDiffDelta[0])).exit();\n};\npatchFilter.filterName = 'texts';\nconst textDeltaReverse = function (delta) {\n let i;\n let l;\n let line;\n let lineTmp;\n let header = null;\n const headerRegex = /^@@ +-(\\d+),(\\d+) +\\+(\\d+),(\\d+) +@@$/;\n let lineHeader;\n const lines = delta.split('\\n');\n for (i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n const lineStart = line.slice(0, 1);\n if (lineStart === '@') {\n header = headerRegex.exec(line);\n lineHeader = i;\n // fix header\n lines[lineHeader] =\n '@@ -' +\n header[3] +\n ',' +\n header[4] +\n ' +' +\n header[1] +\n ',' +\n header[2] +\n ' @@';\n }\n else if (lineStart === '+') {\n lines[i] = '-' + lines[i].slice(1);\n if (lines[i - 1].slice(0, 1) === '+') {\n // swap lines to keep default order (-+)\n lineTmp = lines[i];\n lines[i] = lines[i - 1];\n lines[i - 1] = lineTmp;\n }\n }\n else if (lineStart === '-') {\n lines[i] = '+' + lines[i].slice(1);\n }\n }\n return lines.join('\\n');\n};\nexport const reverseFilter = function textsReverseFilter(context) {\n if (context.nested) {\n return;\n }\n const nonNestedDelta = context.delta;\n if (nonNestedDelta[2] !== TEXT_DIFF) {\n return;\n }\n const textDiffDelta = nonNestedDelta;\n // text-diff, use a text-diff algorithm\n context\n .setResult([textDeltaReverse(textDiffDelta[0]), 0, TEXT_DIFF])\n .exit();\n};\nreverseFilter.filterName = 'texts';\n","// use as 2nd parameter for JSON.parse to revive Date instances\nexport default function dateReviver(key, value) {\n let parts;\n if (typeof value === 'string') {\n parts =\n /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+-])(\\d{2}):(\\d{2}))$/.exec(value);\n if (parts) {\n return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0)));\n }\n }\n return value;\n}\n","\n/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//const Z_FILTERED = 1;\n//const Z_HUFFMAN_ONLY = 2;\n//const Z_RLE = 3;\nconst Z_FIXED$1 = 4;\n//const Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nconst Z_BINARY = 0;\nconst Z_TEXT = 1;\n//const Z_ASCII = 1; // = Z_TEXT\nconst Z_UNKNOWN$1 = 2;\n\n/*============================================================================*/\n\n\nfunction zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nconst STORED_BLOCK = 0;\nconst STATIC_TREES = 1;\nconst DYN_TREES = 2;\n/* The three kinds of block type */\n\nconst MIN_MATCH$1 = 3;\nconst MAX_MATCH$1 = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nconst LENGTH_CODES$1 = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nconst LITERALS$1 = 256;\n/* number of literal bytes 0..255 */\n\nconst L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nconst D_CODES$1 = 30;\n/* number of distance codes */\n\nconst BL_CODES$1 = 19;\n/* number of codes used to transfer the bit lengths */\n\nconst HEAP_SIZE$1 = 2 * L_CODES$1 + 1;\n/* maximum heap size */\n\nconst MAX_BITS$1 = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nconst MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nconst END_BLOCK = 256;\n/* end of block literal code */\n\nconst REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nconst REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nconst REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nconst extra_lbits = /* extra bits for each length code */\n new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);\n\nconst extra_dbits = /* extra bits for each distance code */\n new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);\n\nconst extra_blbits = /* extra bits for each bit length code */\n new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);\n\nconst bl_order =\n new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nconst DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nconst static_ltree = new Array((L_CODES$1 + 2) * 2);\nzero$1(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nconst static_dtree = new Array(D_CODES$1 * 2);\nzero$1(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nconst _dist_code = new Array(DIST_CODE_LEN);\nzero$1(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nconst _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);\nzero$1(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nconst base_length = new Array(LENGTH_CODES$1);\nzero$1(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nconst base_dist = new Array(D_CODES$1);\nzero$1(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nlet static_l_desc;\nlet static_d_desc;\nlet static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nconst d_code = (dist) => {\n\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n};\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nconst put_short = (s, w) => {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n};\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nconst send_bits = (s, value, length) => {\n\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n};\n\n\nconst send_code = (s, c, tree) => {\n\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n};\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nconst bi_reverse = (code, len) => {\n\n let res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nconst bi_flush = (s) => {\n\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n};\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nconst gen_bitlen = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const max_code = desc.max_code;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const extra = desc.stat_desc.extra_bits;\n const base = desc.stat_desc.extra_base;\n const max_length = desc.stat_desc.max_length;\n let h; /* heap index */\n let n, m; /* iterate over the tree elements */\n let bits; /* bit length */\n let xbits; /* extra bits */\n let f; /* frequency */\n let overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Tracev((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Tracev((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n};\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nconst gen_codes = (tree, max_code, bl_count) => {\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n\n const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */\n let code = 0; /* running code value */\n let bits; /* bit index */\n let n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS$1; bits++) {\n code = (code + bl_count[bits - 1]) << 1;\n next_code[bits] = code;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< {\n\n let n; /* iterates over tree elements */\n let bits; /* bit counter */\n let length; /* length value */\n let code; /* code value */\n let dist; /* distance index */\n const bl_count = new Array(MAX_BITS$1 + 1);\n /* number of codes at each bit length for an optimal tree */\n\n // do check in _tr_init()\n //if (static_init_done) return;\n\n /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n static_l_desc.static_tree = static_ltree;\n static_l_desc.extra_bits = extra_lbits;\n static_d_desc.static_tree = static_dtree;\n static_d_desc.extra_bits = extra_dbits;\n static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n /* Initialize the mapping length (0..255) -> length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES$1 - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES$1; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS$1; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES$1 + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES$1; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);\n\n //static_init_done = true;\n};\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nconst init_block = (s) => {\n\n let n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.sym_next = s.matches = 0;\n};\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nconst bi_windup = (s) =>\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n};\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nconst smaller = (tree, n, m, depth) => {\n\n const _n2 = n * 2;\n const _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n};\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nconst pqdownheap = (s, tree, k) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n\n const v = s.heap[k];\n let j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n};\n\n\n// inlined manually\n// const SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nconst compress_block = (s, ltree, dtree) => {\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n\n let dist; /* distance of matched string */\n let lc; /* match length or unmatched char (if dist == 0) */\n let sx = 0; /* running index in sym_buf */\n let code; /* the code to send */\n let extra; /* number of extra bits to send */\n\n if (s.sym_next !== 0) {\n do {\n dist = s.pending_buf[s.sym_buf + sx++] & 0xff;\n dist += (s.pending_buf[s.sym_buf + sx++] & 0xff) << 8;\n lc = s.pending_buf[s.sym_buf + sx++];\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and sym_buf is ok: */\n //Assert(s->pending < s->lit_bufsize + sx, \"pendingBuf overflow\");\n\n } while (sx < s.sym_next);\n }\n\n send_code(s, END_BLOCK, ltree);\n};\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nconst build_tree = (s, desc) => {\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n\n const tree = desc.dyn_tree;\n const stree = desc.stat_desc.static_tree;\n const has_stree = desc.stat_desc.has_stree;\n const elems = desc.stat_desc.elems;\n let n, m; /* iterate over heap elements */\n let max_code = -1; /* largest code with non zero frequency */\n let node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE$1;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n};\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nconst scan_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nconst send_tree = (s, tree, max_code) => {\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n\n let n; /* iterates over all tree elements */\n let prevlen = -1; /* last emitted length */\n let curlen; /* length of current code */\n\n let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n let count = 0; /* repeat count of the current code */\n let max_count = 7; /* max repeat count */\n let min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n};\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nconst build_bl_tree = (s) => {\n\n let max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n};\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nconst send_all_trees = (s, lcodes, dcodes, blcodes) => {\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n\n let rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n};\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"block list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"allow list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nconst detect_data_type = (s) => {\n /* block_mask is the bit mask of block-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n let block_mask = 0xf3ffc07f;\n let n;\n\n /* Check for non-textual (\"block-listed\") bytes. */\n for (n = 0; n <= 31; n++, block_mask >>>= 1) {\n if ((block_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"allow-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS$1; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"block-listed\" or \"allow-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n};\n\n\nlet static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nconst _tr_init$1 = (s) =>\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n};\n\n\n/* ===========================================================================\n * Send a stored block\n */\nconst _tr_stored_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n bi_windup(s); /* align on byte boundary */\n put_short(s, stored_len);\n put_short(s, ~stored_len);\n if (stored_len) {\n s.pending_buf.set(s.window.subarray(buf, buf + stored_len), s.pending);\n }\n s.pending += stored_len;\n};\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nconst _tr_align$1 = (s) => {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n};\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and write out the encoded block.\n */\nconst _tr_flush_block$1 = (s, buf, stored_len, last) => {\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n\n let opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n let max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN$1) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->sym_next / 3));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block$1(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n};\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nconst _tr_tally$1 = (s, dist, lc) => {\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n\n s.pending_buf[s.sym_buf + s.sym_next++] = dist;\n s.pending_buf[s.sym_buf + s.sym_next++] = dist >> 8;\n s.pending_buf[s.sym_buf + s.sym_next++] = lc;\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n return (s.sym_next === s.sym_end);\n};\n\nvar _tr_init_1 = _tr_init$1;\nvar _tr_stored_block_1 = _tr_stored_block$1;\nvar _tr_flush_block_1 = _tr_flush_block$1;\nvar _tr_tally_1 = _tr_tally$1;\nvar _tr_align_1 = _tr_align$1;\n\nvar trees = {\n\t_tr_init: _tr_init_1,\n\t_tr_stored_block: _tr_stored_block_1,\n\t_tr_flush_block: _tr_flush_block_1,\n\t_tr_tally: _tr_tally_1,\n\t_tr_align: _tr_align_1\n};\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nvar adler32_1 = adler32;\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nvar crc32_1 = crc32;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar messages = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar constants$2 = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;\n\n\n\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,\n Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,\n Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,\n Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,\n Z_UNKNOWN,\n Z_DEFLATED: Z_DEFLATED$2\n} = constants$2;\n\n/*============================================================================*/\n\n\nconst MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nconst MAX_WBITS$1 = 15;\n/* 32K LZ77 window */\nconst DEF_MEM_LEVEL = 8;\n\n\nconst LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nconst LITERALS = 256;\n/* number of literal bytes 0..255 */\nconst L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nconst D_CODES = 30;\n/* number of distance codes */\nconst BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nconst HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nconst MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nconst MIN_MATCH = 3;\nconst MAX_MATCH = 258;\nconst MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nconst PRESET_DICT = 0x20;\n\nconst INIT_STATE = 42; /* zlib header -> BUSY_STATE */\n//#ifdef GZIP\nconst GZIP_STATE = 57; /* gzip header -> BUSY_STATE | EXTRA_STATE */\n//#endif\nconst EXTRA_STATE = 69; /* gzip extra block -> NAME_STATE */\nconst NAME_STATE = 73; /* gzip file name -> COMMENT_STATE */\nconst COMMENT_STATE = 91; /* gzip comment -> HCRC_STATE */\nconst HCRC_STATE = 103; /* gzip header CRC -> BUSY_STATE */\nconst BUSY_STATE = 113; /* deflate -> FINISH_STATE */\nconst FINISH_STATE = 666; /* stream complete */\n\nconst BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nconst BS_BLOCK_DONE = 2; /* block flush performed */\nconst BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nconst BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nconst OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nconst err = (strm, errorCode) => {\n strm.msg = messages[errorCode];\n return errorCode;\n};\n\nconst rank = (f) => {\n return ((f) * 2) - ((f) > 4 ? 9 : 0);\n};\n\nconst zero = (buf) => {\n let len = buf.length; while (--len >= 0) { buf[len] = 0; }\n};\n\n/* ===========================================================================\n * Slide the hash table when sliding the window down (could be avoided with 32\n * bit values at the expense of memory usage). We slide even when level == 0 to\n * keep the hash table consistent if we switch back to level > 0 later.\n */\nconst slide_hash = (s) => {\n let n, m;\n let p;\n let wsize = s.w_size;\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= wsize ? m - wsize : 0);\n } while (--n);\n n = wsize;\n//#ifndef FASTEST\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= wsize ? m - wsize : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n//#endif\n};\n\n/* eslint-disable new-cap */\nlet HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;\n// This hash causes less collisions, https://github.com/nodeca/pako/issues/135\n// But breaks binary compatibility\n//let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;\nlet HASH = HASH_ZLIB;\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output, except for\n * some deflate_stored() output, goes through this function so some\n * applications may wish to modify it to avoid allocating a large\n * strm->next_out buffer and copying into it. (See also read_buf()).\n */\nconst flush_pending = (strm) => {\n const s = strm.state;\n\n //_tr_flush_bits(s);\n let len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n};\n\n\nconst flush_block_only = (s, last) => {\n _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n};\n\n\nconst put_byte = (s, b) => {\n s.pending_buf[s.pending++] = b;\n};\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nconst putShortMSB = (s, b) => {\n\n // put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n};\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nconst read_buf = (strm, buf, start, size) => {\n\n let len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32_1(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32_1(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n};\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nconst longest_match = (s, cur_match) => {\n\n let chain_length = s.max_chain_length; /* max hash chain length */\n let scan = s.strstart; /* current string */\n let match; /* matched string */\n let len; /* length of current match */\n let best_len = s.prev_length; /* best match length so far */\n let nice_match = s.nice_match; /* stop if match long enough */\n const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n const _win = s.window; // shortcut\n\n const wmask = s.w_mask;\n const prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n const strend = s.strstart + MAX_MATCH;\n let scan_end1 = _win[scan + best_len - 1];\n let scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n};\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nconst fill_window = (s) => {\n\n const _w_size = s.w_size;\n let n, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n s.window.set(s.window.subarray(_w_size, _w_size + _w_size - more), 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n slide_hash(s);\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// const curr = s.strstart + s.lookahead;\n// let init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n};\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n *\n * In case deflateParams() is used to later switch to a non-zero compression\n * level, s->matches (otherwise unused when storing) keeps track of the number\n * of hash table slides to perform. If s->matches is 1, then one hash table\n * slide will be done when switching. If s->matches is 2, the maximum value\n * allowed here, then the hash table will be cleared, since two or more slides\n * is the same as a clear.\n *\n * deflate_stored() is written to minimize the number of times an input byte is\n * copied. It is most efficient with large input and output buffers, which\n * maximizes the opportunites to have a single copy from next_in to next_out.\n */\nconst deflate_stored = (s, flush) => {\n\n /* Smallest worthy block size when not flushing or finishing. By default\n * this is 32K. This can be as small as 507 bytes for memLevel == 1. For\n * large input and output buffers, the stored block size will be larger.\n */\n let min_block = s.pending_buf_size - 5 > s.w_size ? s.w_size : s.pending_buf_size - 5;\n\n /* Copy as many min_block or larger stored blocks directly to next_out as\n * possible. If flushing, copy the remaining available input to next_out as\n * stored blocks, if there is enough space.\n */\n let len, left, have, last = 0;\n let used = s.strm.avail_in;\n do {\n /* Set len to the maximum size block that we can copy directly with the\n * available input data and output space. Set left to how much of that\n * would be copied from what's left in the window.\n */\n len = 65535/* MAX_STORED */; /* maximum deflate stored block length */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n if (s.strm.avail_out < have) { /* need room for header */\n break;\n }\n /* maximum stored block length that will fit in avail_out: */\n have = s.strm.avail_out - have;\n left = s.strstart - s.block_start; /* bytes left in window */\n if (len > left + s.strm.avail_in) {\n len = left + s.strm.avail_in; /* limit len to the input */\n }\n if (len > have) {\n len = have; /* limit len to the output */\n }\n\n /* If the stored block would be less than min_block in length, or if\n * unable to copy all of the available input when flushing, then try\n * copying to the window and the pending buffer instead. Also don't\n * write an empty block when flushing -- deflate() does that.\n */\n if (len < min_block && ((len === 0 && flush !== Z_FINISH$3) ||\n flush === Z_NO_FLUSH$2 ||\n len !== left + s.strm.avail_in)) {\n break;\n }\n\n /* Make a dummy stored block in pending to get the header bytes,\n * including any pending bits. This also updates the debugging counts.\n */\n last = flush === Z_FINISH$3 && len === left + s.strm.avail_in ? 1 : 0;\n _tr_stored_block(s, 0, 0, last);\n\n /* Replace the lengths in the dummy stored block with len. */\n s.pending_buf[s.pending - 4] = len;\n s.pending_buf[s.pending - 3] = len >> 8;\n s.pending_buf[s.pending - 2] = ~len;\n s.pending_buf[s.pending - 1] = ~len >> 8;\n\n /* Write the stored block header bytes. */\n flush_pending(s.strm);\n\n//#ifdef ZLIB_DEBUG\n// /* Update debugging counts for the data about to be copied. */\n// s->compressed_len += len << 3;\n// s->bits_sent += len << 3;\n//#endif\n\n /* Copy uncompressed bytes from the window to next_out. */\n if (left) {\n if (left > len) {\n left = len;\n }\n //zmemcpy(s->strm->next_out, s->window + s->block_start, left);\n s.strm.output.set(s.window.subarray(s.block_start, s.block_start + left), s.strm.next_out);\n s.strm.next_out += left;\n s.strm.avail_out -= left;\n s.strm.total_out += left;\n s.block_start += left;\n len -= left;\n }\n\n /* Copy uncompressed bytes directly from next_in to next_out, updating\n * the check value.\n */\n if (len) {\n read_buf(s.strm, s.strm.output, s.strm.next_out, len);\n s.strm.next_out += len;\n s.strm.avail_out -= len;\n s.strm.total_out += len;\n }\n } while (last === 0);\n\n /* Update the sliding window with the last s->w_size bytes of the copied\n * data, or append all of the copied data to the existing window if less\n * than s->w_size bytes were copied. Also update the number of bytes to\n * insert in the hash tables, in the event that deflateParams() switches to\n * a non-zero compression level.\n */\n used -= s.strm.avail_in; /* number of input bytes directly copied */\n if (used) {\n /* If any input was used, then no unused input remains in the window,\n * therefore s->block_start == s->strstart.\n */\n if (used >= s.w_size) { /* supplant the previous history */\n s.matches = 2; /* clear hash */\n //zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size);\n s.window.set(s.strm.input.subarray(s.strm.next_in - s.w_size, s.strm.next_in), 0);\n s.strstart = s.w_size;\n s.insert = s.strstart;\n }\n else {\n if (s.window_size - s.strstart <= used) {\n /* Slide the window down. */\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n //zmemcpy(s->window + s->strstart, s->strm->next_in - used, used);\n s.window.set(s.strm.input.subarray(s.strm.next_in - used, s.strm.next_in), s.strstart);\n s.strstart += used;\n s.insert += used > s.w_size - s.insert ? s.w_size - s.insert : used;\n }\n s.block_start = s.strstart;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* If the last block was written to next_out, then done. */\n if (last) {\n return BS_FINISH_DONE;\n }\n\n /* If flushing and all input has been consumed, then done. */\n if (flush !== Z_NO_FLUSH$2 && flush !== Z_FINISH$3 &&\n s.strm.avail_in === 0 && s.strstart === s.block_start) {\n return BS_BLOCK_DONE;\n }\n\n /* Fill the window with any remaining input. */\n have = s.window_size - s.strstart;\n if (s.strm.avail_in > have && s.block_start >= s.w_size) {\n /* Slide the window down. */\n s.block_start -= s.w_size;\n s.strstart -= s.w_size;\n //zmemcpy(s->window, s->window + s->w_size, s->strstart);\n s.window.set(s.window.subarray(s.w_size, s.w_size + s.strstart), 0);\n if (s.matches < 2) {\n s.matches++; /* add a pending slide_hash() */\n }\n have += s.w_size; /* more space now */\n if (s.insert > s.strstart) {\n s.insert = s.strstart;\n }\n }\n if (have > s.strm.avail_in) {\n have = s.strm.avail_in;\n }\n if (have) {\n read_buf(s.strm, s.window, s.strstart, have);\n s.strstart += have;\n s.insert += have > s.w_size - s.insert ? s.w_size - s.insert : have;\n }\n if (s.high_water < s.strstart) {\n s.high_water = s.strstart;\n }\n\n /* There was not enough avail_out to write a complete worthy or flushed\n * stored block to next_out. Write a stored block to pending instead, if we\n * have enough input for a worthy block, or if flushing and there is enough\n * room for the remaining input as a stored block in the pending buffer.\n */\n have = (s.bi_valid + 42) >> 3; /* number of header bytes */\n /* maximum stored block length that will fit in pending: */\n have = s.pending_buf_size - have > 65535/* MAX_STORED */ ? 65535/* MAX_STORED */ : s.pending_buf_size - have;\n min_block = have > s.w_size ? s.w_size : have;\n left = s.strstart - s.block_start;\n if (left >= min_block ||\n ((left || flush === Z_FINISH$3) && flush !== Z_NO_FLUSH$2 &&\n s.strm.avail_in === 0 && left <= have)) {\n len = left > have ? have : left;\n last = flush === Z_FINISH$3 && s.strm.avail_in === 0 &&\n len === left ? 1 : 0;\n _tr_stored_block(s, s.block_start, len, last);\n s.block_start += len;\n flush_pending(s.strm);\n }\n\n /* We've done all we can with the available input and output. */\n return last ? BS_FINISH_STARTED : BS_NEED_MORE;\n};\n\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nconst deflate_fast = (s, flush) => {\n\n let hash_head; /* head of the hash chain */\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nconst deflate_slow = (s, flush) => {\n\n let hash_head; /* head of hash chain */\n let bflush; /* set if current block must be flushed */\n\n let max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n};\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nconst deflate_rle = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n let prev; /* byte at distance one to match */\n let scan, strend; /* scan goes up to strend for length of run */\n\n const _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nconst deflate_huff = (s, flush) => {\n\n let bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH$2) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = _tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH$3) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.sym_next) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n};\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nconst configuration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nconst lm_init = (s) => {\n\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n};\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED$2; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);\n this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);\n this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new Uint16Array(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.sym_buf = 0; /* buffer for distances and literals/lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.sym_next = 0; /* running index in sym_buf */\n this.sym_end = 0; /* symbol table full when sym_next reaches this */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\n/* =========================================================================\n * Check for a valid deflate stream state. Return 0 if ok, 1 if not.\n */\nconst deflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const s = strm.state;\n if (!s || s.strm !== strm || (s.status !== INIT_STATE &&\n//#ifdef GZIP\n s.status !== GZIP_STATE &&\n//#endif\n s.status !== EXTRA_STATE &&\n s.status !== NAME_STATE &&\n s.status !== COMMENT_STATE &&\n s.status !== HCRC_STATE &&\n s.status !== BUSY_STATE &&\n s.status !== FINISH_STATE)) {\n return 1;\n }\n return 0;\n};\n\n\nconst deflateResetKeep = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n const s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status =\n//#ifdef GZIP\n s.wrap === 2 ? GZIP_STATE :\n//#endif\n s.wrap ? INIT_STATE : BUSY_STATE;\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = -2;\n _tr_init(s);\n return Z_OK$3;\n};\n\n\nconst deflateReset = (strm) => {\n\n const ret = deflateResetKeep(strm);\n if (ret === Z_OK$3) {\n lm_init(strm.state);\n }\n return ret;\n};\n\n\nconst deflateSetHeader = (strm, head) => {\n\n if (deflateStateCheck(strm) || strm.state.wrap !== 2) {\n return Z_STREAM_ERROR$2;\n }\n strm.state.gzhead = head;\n return Z_OK$3;\n};\n\n\nconst deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {\n\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR$2;\n }\n let wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION$1) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED || (windowBits === 8 && wrap !== 1)) {\n return err(strm, Z_STREAM_ERROR$2);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n const s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n s.status = INIT_STATE; /* to pass state test in deflateReset() */\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new Uint8Array(s.w_size * 2);\n s.head = new Uint16Array(s.hash_size);\n s.prev = new Uint16Array(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n /* We overlay pending_buf and sym_buf. This works since the average size\n * for length/distance pairs over any compressed block is assured to be 31\n * bits or less.\n *\n * Analysis: The longest fixed codes are a length code of 8 bits plus 5\n * extra bits, for lengths 131 to 257. The longest fixed distance codes are\n * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest\n * possible fixed-codes length/distance pair is then 31 bits total.\n *\n * sym_buf starts one-fourth of the way into pending_buf. So there are\n * three bytes in sym_buf for every four bytes in pending_buf. Each symbol\n * in sym_buf is three bytes -- two for the distance and one for the\n * literal/length. As each symbol is consumed, the pointer to the next\n * sym_buf value to read moves forward three bytes. From that symbol, up to\n * 31 bits are written to pending_buf. The closest the written pending_buf\n * bits gets to the next sym_buf symbol to read is just before the last\n * code is written. At that time, 31*(n-2) bits have been written, just\n * after 24*(n-2) bits have been consumed from sym_buf. sym_buf starts at\n * 8*n bits into pending_buf. (Note that the symbol buffer fills when n-1\n * symbols are written.) The closest the writing gets to what is unread is\n * then n+14 bits. Here n is lit_bufsize, which is 16384 by default, and\n * can range from 128 to 32768.\n *\n * Therefore, at a minimum, there are 142 bits of space between what is\n * written and what is read in the overlain buffers, so the symbols cannot\n * be overwritten by the compressed data. That space is actually 139 bits,\n * due to the three-bit fixed-code block header.\n *\n * That covers the case where either Z_FIXED is specified, forcing fixed\n * codes, or when the use of fixed codes is chosen, because that choice\n * results in a smaller compressed block than dynamic codes. That latter\n * condition then assures that the above analysis also covers all dynamic\n * blocks. A dynamic-code block will only be chosen to be emitted if it has\n * fewer bits than a fixed-code block would for the same set of symbols.\n * Therefore its average symbol length is assured to be less than 31. So\n * the compressed data for a dynamic block also cannot overwrite the\n * symbols from which it is being constructed.\n */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n s.pending_buf = new Uint8Array(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->sym_buf = s->pending_buf + s->lit_bufsize;\n s.sym_buf = s.lit_bufsize;\n\n //s->sym_end = (s->lit_bufsize - 1) * 3;\n s.sym_end = (s.lit_bufsize - 1) * 3;\n /* We avoid equality with lit_bufsize*3 because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n};\n\nconst deflateInit = (strm, level) => {\n\n return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);\n};\n\n\n/* ========================================================================= */\nconst deflate$2 = (strm, flush) => {\n\n if (deflateStateCheck(strm) || flush > Z_BLOCK$1 || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n\n if (!strm.output ||\n (strm.avail_in !== 0 && !strm.input) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);\n }\n\n const old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK$3;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH$3) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR$1);\n }\n\n /* Write the header */\n if (s.status === INIT_STATE && s.wrap === 0) {\n s.status = BUSY_STATE;\n }\n if (s.status === INIT_STATE) {\n /* zlib header */\n let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;\n let level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#ifdef GZIP\n if (s.status === GZIP_STATE) {\n /* gzip header */\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let left = (s.gzhead.extra.length & 0xffff) - s.gzindex;\n while (s.pending + left > s.pending_buf_size) {\n let copy = s.pending_buf_size - s.pending;\n // zmemcpy(s.pending_buf + s.pending,\n // s.gzhead.extra + s.gzindex, copy);\n s.pending_buf.set(s.gzhead.extra.subarray(s.gzindex, s.gzindex + copy), s.pending);\n s.pending = s.pending_buf_size;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex += copy;\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n left -= copy;\n }\n // JS specific: s.gzhead.extra may be TypedArray or Array for backward compatibility\n // TypedArray.slice and TypedArray.from don't exist in IE10-IE11\n let gzhead_extra = new Uint8Array(s.gzhead.extra);\n // zmemcpy(s->pending_buf + s->pending,\n // s->gzhead->extra + s->gzindex, left);\n s.pending_buf.set(gzhead_extra.subarray(s.gzindex, s.gzindex + left), s.pending);\n s.pending += left;\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = NAME_STATE;\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n s.gzindex = 0;\n }\n s.status = COMMENT_STATE;\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n let beg = s.pending; /* start of bytes to update crc */\n let val;\n do {\n if (s.pending === s.pending_buf_size) {\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n beg = 0;\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n //--- HCRC_UPDATE(beg) ---//\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n //---//\n }\n s.status = HCRC_STATE;\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n }\n s.status = BUSY_STATE;\n\n /* Compression must start with an empty pending buffer */\n flush_pending(strm);\n if (s.pending !== 0) {\n s.last_flush = -1;\n return Z_OK$3;\n }\n }\n//#endif\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {\n let bstate = s.level === 0 ? deflate_stored(s, flush) :\n s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :\n s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush);\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK$3;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n _tr_align(s);\n }\n else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */\n\n _tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH$1) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK$3;\n }\n }\n }\n\n if (flush !== Z_FINISH$3) { return Z_OK$3; }\n if (s.wrap <= 0) { return Z_STREAM_END$3; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;\n};\n\n\nconst deflateEnd = (strm) => {\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const status = strm.state.status;\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;\n};\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nconst deflateSetDictionary = (strm, dictionary) => {\n\n let dictLength = dictionary.length;\n\n if (deflateStateCheck(strm)) {\n return Z_STREAM_ERROR$2;\n }\n\n const s = strm.state;\n const wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR$2;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n let tmpDict = new Uint8Array(s.w_size);\n tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n const avail = strm.avail_in;\n const next = strm.next_in;\n const input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n let str = s.strstart;\n let n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK$3;\n};\n\n\nvar deflateInit_1 = deflateInit;\nvar deflateInit2_1 = deflateInit2;\nvar deflateReset_1 = deflateReset;\nvar deflateResetKeep_1 = deflateResetKeep;\nvar deflateSetHeader_1 = deflateSetHeader;\nvar deflate_2$1 = deflate$2;\nvar deflateEnd_1 = deflateEnd;\nvar deflateSetDictionary_1 = deflateSetDictionary;\nvar deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.deflateBound = deflateBound;\nmodule.exports.deflateCopy = deflateCopy;\nmodule.exports.deflateGetDictionary = deflateGetDictionary;\nmodule.exports.deflateParams = deflateParams;\nmodule.exports.deflatePending = deflatePending;\nmodule.exports.deflatePrime = deflatePrime;\nmodule.exports.deflateTune = deflateTune;\n*/\n\nvar deflate_1$2 = {\n\tdeflateInit: deflateInit_1,\n\tdeflateInit2: deflateInit2_1,\n\tdeflateReset: deflateReset_1,\n\tdeflateResetKeep: deflateResetKeep_1,\n\tdeflateSetHeader: deflateSetHeader_1,\n\tdeflate: deflate_2$1,\n\tdeflateEnd: deflateEnd_1,\n\tdeflateSetDictionary: deflateSetDictionary_1,\n\tdeflateInfo: deflateInfo\n};\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nvar assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nvar flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n\nvar common = {\n\tassign: assign,\n\tflattenChunks: flattenChunks\n};\n\n// String encode/decode helpers\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nvar string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nvar buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\nvar strings = {\n\tstring2buf: string2buf,\n\tbuf2string: buf2string,\n\tutf8border: utf8border\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nvar zstream = ZStream;\n\nconst toString$1 = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,\n Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,\n Z_DEFAULT_COMPRESSION,\n Z_DEFAULT_STRATEGY,\n Z_DEFLATED: Z_DEFLATED$1\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `header` (Object) - custom header for gzip\n * - `text` (Boolean) - true if compressed data believed to be text\n * - `time` (Number) - modification time, unix timestamp\n * - `os` (Number) - operation system code\n * - `extra` (Array) - array of bytes with extra data (max 65536)\n * - `name` (String) - file name (binary string)\n * - `comment` (String) - comment (binary string)\n * - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true); // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate$1(options) {\n this.options = common.assign({\n level: Z_DEFAULT_COMPRESSION,\n method: Z_DEFLATED$1,\n chunkSize: 16384,\n windowBits: 15,\n memLevel: 8,\n strategy: Z_DEFAULT_STRATEGY\n }, options || {});\n\n let opt = this.options;\n\n if (opt.raw && (opt.windowBits > 0)) {\n opt.windowBits = -opt.windowBits;\n }\n\n else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n opt.windowBits += 16;\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = deflate_1$2.deflateInit2(\n this.strm,\n opt.level,\n opt.method,\n opt.windowBits,\n opt.memLevel,\n opt.strategy\n );\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n if (opt.header) {\n deflate_1$2.deflateSetHeader(this.strm, opt.header);\n }\n\n if (opt.dictionary) {\n let dict;\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n // If we need to compress text, change encoding to utf8.\n dict = strings.string2buf(opt.dictionary);\n } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {\n dict = new Uint8Array(opt.dictionary);\n } else {\n dict = opt.dictionary;\n }\n\n status = deflate_1$2.deflateSetDictionary(this.strm, dict);\n\n if (status !== Z_OK$2) {\n throw new Error(messages[status]);\n }\n\n this._dict_set = true;\n }\n}\n\n/**\n * Deflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be\n * converted to utf8 byte sequence.\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must\n * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending\n * buffers and call [[Deflate#onEnd]].\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nDeflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n let status, _flush_mode;\n\n if (this.ended) { return false; }\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;\n\n // Convert data if needed\n if (typeof data === 'string') {\n // If we need to compress text, change encoding to utf8.\n strm.input = strings.string2buf(data);\n } else if (toString$1.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n // Make sure avail_out > 6 to avoid repeating markers\n if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n status = deflate_1$2.deflate(strm, _flush_mode);\n\n // Ended => flush and finish\n if (status === Z_STREAM_END$2) {\n if (strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n }\n status = deflate_1$2.deflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return status === Z_OK$2;\n }\n\n // Flush if out buffer full\n if (strm.avail_out === 0) {\n this.onData(strm.output);\n continue;\n }\n\n // Flush if requested and has data\n if (_flush_mode > 0 && strm.next_out > 0) {\n this.onData(strm.output.subarray(0, strm.next_out));\n strm.avail_out = 0;\n continue;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array): output data.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK$2) {\n this.result = common.flattenChunks(this.chunks);\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate$1(input, options) {\n const deflator = new Deflate$1(options);\n\n deflator.push(input, true);\n\n // That will never happens, if you don't cheat with options :)\n if (deflator.err) { throw deflator.msg || messages[deflator.err]; }\n\n return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return deflate$1(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array\n * - data (Uint8Array|ArrayBuffer|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip$1(input, options) {\n options = options || {};\n options.gzip = true;\n return deflate$1(input, options);\n}\n\n\nvar Deflate_1$1 = Deflate$1;\nvar deflate_2 = deflate$1;\nvar deflateRaw_1$1 = deflateRaw$1;\nvar gzip_1$1 = gzip$1;\nvar constants$1 = constants$2;\n\nvar deflate_1$1 = {\n\tDeflate: Deflate_1$1,\n\tdeflate: deflate_2,\n\tdeflateRaw: deflateRaw_1$1,\n\tgzip: gzip_1$1,\n\tconstants: constants$1\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD$1 = 16209; /* got a data error -- remain here until reset */\nconst TYPE$1 = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nvar inffast = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD$1;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE$1;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD$1;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS$1 = 852;\nconst ENOUGH_DISTS$1 = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES$1 = 0;\nconst LENS$1 = 1;\nconst DISTS$1 = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES$1 || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES$1) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS$1) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS$1 && used > ENOUGH_LENS$1) ||\n (type === DISTS$1 && used > ENOUGH_DISTS$1)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nvar inftrees = inflate_table;\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n\n\n\n\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,\n Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,\n Z_DEFLATED\n} = constants$2;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK$1;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR$1;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR$1; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK$1) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate$2 = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR$1;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK$1;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32_1(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32_1(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32_1(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT$1;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inffast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END$1;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR$1;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR$1;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR$1;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH$1))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR$1;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK$1;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK$1;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR$1;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32_1(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR$1;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR$1;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK$1;\n};\n\n\nvar inflateReset_1 = inflateReset;\nvar inflateReset2_1 = inflateReset2;\nvar inflateResetKeep_1 = inflateResetKeep;\nvar inflateInit_1 = inflateInit;\nvar inflateInit2_1 = inflateInit2;\nvar inflate_2$1 = inflate$2;\nvar inflateEnd_1 = inflateEnd;\nvar inflateGetHeader_1 = inflateGetHeader;\nvar inflateSetDictionary_1 = inflateSetDictionary;\nvar inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n\nvar inflate_1$2 = {\n\tinflateReset: inflateReset_1,\n\tinflateReset2: inflateReset2_1,\n\tinflateResetKeep: inflateResetKeep_1,\n\tinflateInit: inflateInit_1,\n\tinflateInit2: inflateInit2_1,\n\tinflate: inflate_2$1,\n\tinflateEnd: inflateEnd_1,\n\tinflateGetHeader: inflateGetHeader_1,\n\tinflateSetDictionary: inflateSetDictionary_1,\n\tinflateInfo: inflateInfo\n};\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nvar gzheader = GZheader;\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = constants$2;\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate$1(options) {\n this.options = common.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new zstream();\n this.strm.avail_out = 0;\n\n let status = inflate_1$2.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n\n this.header = new gzheader();\n\n inflate_1$2.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(messages[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate$1.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = inflate_1$2.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = inflate_1$2.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = inflate_1$2.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n inflate_1$2.inflateReset(strm);\n status = inflate_1$2.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = inflate_1$2.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate$1.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate$1.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = common.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate$1(input, options) {\n const inflator = new Inflate$1(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || messages[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw$1(input, options) {\n options = options || {};\n options.raw = true;\n return inflate$1(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nvar Inflate_1$1 = Inflate$1;\nvar inflate_2 = inflate$1;\nvar inflateRaw_1$1 = inflateRaw$1;\nvar ungzip$1 = inflate$1;\nvar constants = constants$2;\n\nvar inflate_1$1 = {\n\tInflate: Inflate_1$1,\n\tinflate: inflate_2,\n\tinflateRaw: inflateRaw_1$1,\n\tungzip: ungzip$1,\n\tconstants: constants\n};\n\nconst { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;\n\nconst { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;\n\n\n\nvar Deflate_1 = Deflate;\nvar deflate_1 = deflate;\nvar deflateRaw_1 = deflateRaw;\nvar gzip_1 = gzip;\nvar Inflate_1 = Inflate;\nvar inflate_1 = inflate;\nvar inflateRaw_1 = inflateRaw;\nvar ungzip_1 = ungzip;\nvar constants_1 = constants$2;\n\nvar pako = {\n\tDeflate: Deflate_1,\n\tdeflate: deflate_1,\n\tdeflateRaw: deflateRaw_1,\n\tgzip: gzip_1,\n\tInflate: Inflate_1,\n\tinflate: inflate_1,\n\tinflateRaw: inflateRaw_1,\n\tungzip: ungzip_1,\n\tconstants: constants_1\n};\n\nexport { Deflate_1 as Deflate, Inflate_1 as Inflate, constants_1 as constants, pako as default, deflate_1 as deflate, deflateRaw_1 as deflateRaw, gzip_1 as gzip, inflate_1 as inflate, inflateRaw_1 as inflateRaw, ungzip_1 as ungzip };\n","/**\n * chroma.js - JavaScript library for color conversions\n *\n * Copyright (c) 2011-2019, Gregor Aisch\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. The name Gregor Aisch may not be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * -------------------------------------------------------\n *\n * chroma.js includes colors from colorbrewer2.org, which are released under\n * the following license:\n *\n * Copyright (c) 2002 Cynthia Brewer, Mark Harrower,\n * and The Pennsylvania State University.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing,\n * software distributed under the License is distributed on an\n * \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\n * either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n *\n * ------------------------------------------------------\n *\n * Named colors are taken from X11 Color Names.\n * http://www.w3.org/TR/css3-color/#svg-color\n *\n * @preserve\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.chroma = factory());\n})(this, (function () { 'use strict';\n\n var limit$2 = function (x, min, max) {\n if ( min === void 0 ) min=0;\n if ( max === void 0 ) max=1;\n\n return x < min ? min : x > max ? max : x;\n };\n\n var limit$1 = limit$2;\n\n var clip_rgb$3 = function (rgb) {\n rgb._clipped = false;\n rgb._unclipped = rgb.slice(0);\n for (var i=0; i<=3; i++) {\n if (i < 3) {\n if (rgb[i] < 0 || rgb[i] > 255) { rgb._clipped = true; }\n rgb[i] = limit$1(rgb[i], 0, 255);\n } else if (i === 3) {\n rgb[i] = limit$1(rgb[i], 0, 1);\n }\n }\n return rgb;\n };\n\n // ported from jQuery's $.type\n var classToType = {};\n for (var i$1 = 0, list$1 = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Undefined', 'Null']; i$1 < list$1.length; i$1 += 1) {\n var name = list$1[i$1];\n\n classToType[(\"[object \" + name + \"]\")] = name.toLowerCase();\n }\n var type$p = function(obj) {\n return classToType[Object.prototype.toString.call(obj)] || \"object\";\n };\n\n var type$o = type$p;\n\n var unpack$B = function (args, keyOrder) {\n if ( keyOrder === void 0 ) keyOrder=null;\n\n \t// if called with more than 3 arguments, we return the arguments\n if (args.length >= 3) { return Array.prototype.slice.call(args); }\n // with less than 3 args we check if first arg is object\n // and use the keyOrder string to extract and sort properties\n \tif (type$o(args[0]) == 'object' && keyOrder) {\n \t\treturn keyOrder.split('')\n \t\t\t.filter(function (k) { return args[0][k] !== undefined; })\n \t\t\t.map(function (k) { return args[0][k]; });\n \t}\n \t// otherwise we just return the first argument\n \t// (which we suppose is an array of args)\n return args[0];\n };\n\n var type$n = type$p;\n\n var last$4 = function (args) {\n if (args.length < 2) { return null; }\n var l = args.length-1;\n if (type$n(args[l]) == 'string') { return args[l].toLowerCase(); }\n return null;\n };\n\n var PI$2 = Math.PI;\n\n var utils = {\n \tclip_rgb: clip_rgb$3,\n \tlimit: limit$2,\n \ttype: type$p,\n \tunpack: unpack$B,\n \tlast: last$4,\n \tPI: PI$2,\n \tTWOPI: PI$2*2,\n \tPITHIRD: PI$2/3,\n \tDEG2RAD: PI$2 / 180,\n \tRAD2DEG: 180 / PI$2\n };\n\n var input$h = {\n \tformat: {},\n \tautodetect: []\n };\n\n var last$3 = utils.last;\n var clip_rgb$2 = utils.clip_rgb;\n var type$m = utils.type;\n var _input = input$h;\n\n var Color$D = function Color() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var me = this;\n if (type$m(args[0]) === 'object' &&\n args[0].constructor &&\n args[0].constructor === this.constructor) {\n // the argument is already a Color instance\n return args[0];\n }\n\n // last argument could be the mode\n var mode = last$3(args);\n var autodetect = false;\n\n if (!mode) {\n autodetect = true;\n if (!_input.sorted) {\n _input.autodetect = _input.autodetect.sort(function (a,b) { return b.p - a.p; });\n _input.sorted = true;\n }\n // auto-detect format\n for (var i = 0, list = _input.autodetect; i < list.length; i += 1) {\n var chk = list[i];\n\n mode = chk.test.apply(chk, args);\n if (mode) { break; }\n }\n }\n\n if (_input.format[mode]) {\n var rgb = _input.format[mode].apply(null, autodetect ? args : args.slice(0,-1));\n me._rgb = clip_rgb$2(rgb);\n } else {\n throw new Error('unknown format: '+args);\n }\n\n // add alpha channel\n if (me._rgb.length === 3) { me._rgb.push(1); }\n };\n\n Color$D.prototype.toString = function toString () {\n if (type$m(this.hex) == 'function') { return this.hex(); }\n return (\"[\" + (this._rgb.join(',')) + \"]\");\n };\n\n var Color_1 = Color$D;\n\n var chroma$k = function () {\n \tvar args = [], len = arguments.length;\n \twhile ( len-- ) args[ len ] = arguments[ len ];\n\n \treturn new (Function.prototype.bind.apply( chroma$k.Color, [ null ].concat( args) ));\n };\n\n chroma$k.Color = Color_1;\n chroma$k.version = '2.4.2';\n\n var chroma_1 = chroma$k;\n\n var unpack$A = utils.unpack;\n var max$2 = Math.max;\n\n var rgb2cmyk$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$A(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n r = r / 255;\n g = g / 255;\n b = b / 255;\n var k = 1 - max$2(r,max$2(g,b));\n var f = k < 1 ? 1 / (1-k) : 0;\n var c = (1-r-k) * f;\n var m = (1-g-k) * f;\n var y = (1-b-k) * f;\n return [c,m,y,k];\n };\n\n var rgb2cmyk_1 = rgb2cmyk$1;\n\n var unpack$z = utils.unpack;\n\n var cmyk2rgb = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$z(args, 'cmyk');\n var c = args[0];\n var m = args[1];\n var y = args[2];\n var k = args[3];\n var alpha = args.length > 4 ? args[4] : 1;\n if (k === 1) { return [0,0,0,alpha]; }\n return [\n c >= 1 ? 0 : 255 * (1-c) * (1-k), // r\n m >= 1 ? 0 : 255 * (1-m) * (1-k), // g\n y >= 1 ? 0 : 255 * (1-y) * (1-k), // b\n alpha\n ];\n };\n\n var cmyk2rgb_1 = cmyk2rgb;\n\n var chroma$j = chroma_1;\n var Color$C = Color_1;\n var input$g = input$h;\n var unpack$y = utils.unpack;\n var type$l = utils.type;\n\n var rgb2cmyk = rgb2cmyk_1;\n\n Color$C.prototype.cmyk = function() {\n return rgb2cmyk(this._rgb);\n };\n\n chroma$j.cmyk = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$C, [ null ].concat( args, ['cmyk']) ));\n };\n\n input$g.format.cmyk = cmyk2rgb_1;\n\n input$g.autodetect.push({\n p: 2,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$y(args, 'cmyk');\n if (type$l(args) === 'array' && args.length === 4) {\n return 'cmyk';\n }\n }\n });\n\n var unpack$x = utils.unpack;\n var last$2 = utils.last;\n var rnd = function (a) { return Math.round(a*100)/100; };\n\n /*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\n var hsl2css$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var hsla = unpack$x(args, 'hsla');\n var mode = last$2(args) || 'lsa';\n hsla[0] = rnd(hsla[0] || 0);\n hsla[1] = rnd(hsla[1]*100) + '%';\n hsla[2] = rnd(hsla[2]*100) + '%';\n if (mode === 'hsla' || (hsla.length > 3 && hsla[3]<1)) {\n hsla[3] = hsla.length > 3 ? hsla[3] : 1;\n mode = 'hsla';\n } else {\n hsla.length = 3;\n }\n return (mode + \"(\" + (hsla.join(',')) + \")\");\n };\n\n var hsl2css_1 = hsl2css$1;\n\n var unpack$w = utils.unpack;\n\n /*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\n var rgb2hsl$3 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$w(args, 'rgba');\n var r = args[0];\n var g = args[1];\n var b = args[2];\n\n r /= 255;\n g /= 255;\n b /= 255;\n\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n\n var l = (max + min) / 2;\n var s, h;\n\n if (max === min){\n s = 0;\n h = Number.NaN;\n } else {\n s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min);\n }\n\n if (r == max) { h = (g - b) / (max - min); }\n else if (g == max) { h = 2 + (b - r) / (max - min); }\n else if (b == max) { h = 4 + (r - g) / (max - min); }\n\n h *= 60;\n if (h < 0) { h += 360; }\n if (args.length>3 && args[3]!==undefined) { return [h,s,l,args[3]]; }\n return [h,s,l];\n };\n\n var rgb2hsl_1 = rgb2hsl$3;\n\n var unpack$v = utils.unpack;\n var last$1 = utils.last;\n var hsl2css = hsl2css_1;\n var rgb2hsl$2 = rgb2hsl_1;\n var round$6 = Math.round;\n\n /*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\n var rgb2css$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var rgba = unpack$v(args, 'rgba');\n var mode = last$1(args) || 'rgb';\n if (mode.substr(0,3) == 'hsl') {\n return hsl2css(rgb2hsl$2(rgba), mode);\n }\n rgba[0] = round$6(rgba[0]);\n rgba[1] = round$6(rgba[1]);\n rgba[2] = round$6(rgba[2]);\n if (mode === 'rgba' || (rgba.length > 3 && rgba[3]<1)) {\n rgba[3] = rgba.length > 3 ? rgba[3] : 1;\n mode = 'rgba';\n }\n return (mode + \"(\" + (rgba.slice(0,mode==='rgb'?3:4).join(',')) + \")\");\n };\n\n var rgb2css_1 = rgb2css$1;\n\n var unpack$u = utils.unpack;\n var round$5 = Math.round;\n\n var hsl2rgb$1 = function () {\n var assign;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n args = unpack$u(args, 'hsl');\n var h = args[0];\n var s = args[1];\n var l = args[2];\n var r,g,b;\n if (s === 0) {\n r = g = b = l*255;\n } else {\n var t3 = [0,0,0];\n var c = [0,0,0];\n var t2 = l < 0.5 ? l * (1+s) : l+s-l*s;\n var t1 = 2 * l - t2;\n var h_ = h / 360;\n t3[0] = h_ + 1/3;\n t3[1] = h_;\n t3[2] = h_ - 1/3;\n for (var i=0; i<3; i++) {\n if (t3[i] < 0) { t3[i] += 1; }\n if (t3[i] > 1) { t3[i] -= 1; }\n if (6 * t3[i] < 1)\n { c[i] = t1 + (t2 - t1) * 6 * t3[i]; }\n else if (2 * t3[i] < 1)\n { c[i] = t2; }\n else if (3 * t3[i] < 2)\n { c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6; }\n else\n { c[i] = t1; }\n }\n (assign = [round$5(c[0]*255),round$5(c[1]*255),round$5(c[2]*255)], r = assign[0], g = assign[1], b = assign[2]);\n }\n if (args.length > 3) {\n // keep alpha channel\n return [r,g,b,args[3]];\n }\n return [r,g,b,1];\n };\n\n var hsl2rgb_1 = hsl2rgb$1;\n\n var hsl2rgb = hsl2rgb_1;\n var input$f = input$h;\n\n var RE_RGB = /^rgb\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*\\)$/;\n var RE_RGBA = /^rgba\\(\\s*(-?\\d+),\\s*(-?\\d+)\\s*,\\s*(-?\\d+)\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var RE_RGB_PCT = /^rgb\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var RE_RGBA_PCT = /^rgba\\(\\s*(-?\\d+(?:\\.\\d+)?)%,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n var RE_HSL = /^hsl\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*\\)$/;\n var RE_HSLA = /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\n var round$4 = Math.round;\n\n var css2rgb$1 = function (css) {\n css = css.toLowerCase().trim();\n var m;\n\n if (input$f.format.named) {\n try {\n return input$f.format.named(css);\n } catch (e) {\n // eslint-disable-next-line\n }\n }\n\n // rgb(250,20,0)\n if ((m = css.match(RE_RGB))) {\n var rgb = m.slice(1,4);\n for (var i=0; i<3; i++) {\n rgb[i] = +rgb[i];\n }\n rgb[3] = 1; // default alpha\n return rgb;\n }\n\n // rgba(250,20,0,0.4)\n if ((m = css.match(RE_RGBA))) {\n var rgb$1 = m.slice(1,5);\n for (var i$1=0; i$1<4; i$1++) {\n rgb$1[i$1] = +rgb$1[i$1];\n }\n return rgb$1;\n }\n\n // rgb(100%,0%,0%)\n if ((m = css.match(RE_RGB_PCT))) {\n var rgb$2 = m.slice(1,4);\n for (var i$2=0; i$2<3; i$2++) {\n rgb$2[i$2] = round$4(rgb$2[i$2] * 2.55);\n }\n rgb$2[3] = 1; // default alpha\n return rgb$2;\n }\n\n // rgba(100%,0%,0%,0.4)\n if ((m = css.match(RE_RGBA_PCT))) {\n var rgb$3 = m.slice(1,5);\n for (var i$3=0; i$3<3; i$3++) {\n rgb$3[i$3] = round$4(rgb$3[i$3] * 2.55);\n }\n rgb$3[3] = +rgb$3[3];\n return rgb$3;\n }\n\n // hsl(0,100%,50%)\n if ((m = css.match(RE_HSL))) {\n var hsl = m.slice(1,4);\n hsl[1] *= 0.01;\n hsl[2] *= 0.01;\n var rgb$4 = hsl2rgb(hsl);\n rgb$4[3] = 1;\n return rgb$4;\n }\n\n // hsla(0,100%,50%,0.5)\n if ((m = css.match(RE_HSLA))) {\n var hsl$1 = m.slice(1,4);\n hsl$1[1] *= 0.01;\n hsl$1[2] *= 0.01;\n var rgb$5 = hsl2rgb(hsl$1);\n rgb$5[3] = +m[4]; // default alpha = 1\n return rgb$5;\n }\n };\n\n css2rgb$1.test = function (s) {\n return RE_RGB.test(s) ||\n RE_RGBA.test(s) ||\n RE_RGB_PCT.test(s) ||\n RE_RGBA_PCT.test(s) ||\n RE_HSL.test(s) ||\n RE_HSLA.test(s);\n };\n\n var css2rgb_1 = css2rgb$1;\n\n var chroma$i = chroma_1;\n var Color$B = Color_1;\n var input$e = input$h;\n var type$k = utils.type;\n\n var rgb2css = rgb2css_1;\n var css2rgb = css2rgb_1;\n\n Color$B.prototype.css = function(mode) {\n return rgb2css(this._rgb, mode);\n };\n\n chroma$i.css = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$B, [ null ].concat( args, ['css']) ));\n };\n\n input$e.format.css = css2rgb;\n\n input$e.autodetect.push({\n p: 5,\n test: function (h) {\n var rest = [], len = arguments.length - 1;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];\n\n if (!rest.length && type$k(h) === 'string' && css2rgb.test(h)) {\n return 'css';\n }\n }\n });\n\n var Color$A = Color_1;\n var chroma$h = chroma_1;\n var input$d = input$h;\n var unpack$t = utils.unpack;\n\n input$d.format.gl = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var rgb = unpack$t(args, 'rgba');\n rgb[0] *= 255;\n rgb[1] *= 255;\n rgb[2] *= 255;\n return rgb;\n };\n\n chroma$h.gl = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$A, [ null ].concat( args, ['gl']) ));\n };\n\n Color$A.prototype.gl = function() {\n var rgb = this._rgb;\n return [rgb[0]/255, rgb[1]/255, rgb[2]/255, rgb[3]];\n };\n\n var unpack$s = utils.unpack;\n\n var rgb2hcg$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$s(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var min = Math.min(r, g, b);\n var max = Math.max(r, g, b);\n var delta = max - min;\n var c = delta * 100 / 255;\n var _g = min / (255 - delta) * 100;\n var h;\n if (delta === 0) {\n h = Number.NaN;\n } else {\n if (r === max) { h = (g - b) / delta; }\n if (g === max) { h = 2+(b - r) / delta; }\n if (b === max) { h = 4+(r - g) / delta; }\n h *= 60;\n if (h < 0) { h += 360; }\n }\n return [h, c, _g];\n };\n\n var rgb2hcg_1 = rgb2hcg$1;\n\n var unpack$r = utils.unpack;\n var floor$3 = Math.floor;\n\n /*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\n var hcg2rgb = function () {\n var assign, assign$1, assign$2, assign$3, assign$4, assign$5;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n args = unpack$r(args, 'hcg');\n var h = args[0];\n var c = args[1];\n var _g = args[2];\n var r,g,b;\n _g = _g * 255;\n var _c = c * 255;\n if (c === 0) {\n r = g = b = _g;\n } else {\n if (h === 360) { h = 0; }\n if (h > 360) { h -= 360; }\n if (h < 0) { h += 360; }\n h /= 60;\n var i = floor$3(h);\n var f = h - i;\n var p = _g * (1 - c);\n var q = p + _c * (1 - f);\n var t = p + _c * f;\n var v = p + _c;\n switch (i) {\n case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break\n case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break\n case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break\n case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break\n case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break\n case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break\n }\n }\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var hcg2rgb_1 = hcg2rgb;\n\n var unpack$q = utils.unpack;\n var type$j = utils.type;\n var chroma$g = chroma_1;\n var Color$z = Color_1;\n var input$c = input$h;\n\n var rgb2hcg = rgb2hcg_1;\n\n Color$z.prototype.hcg = function() {\n return rgb2hcg(this._rgb);\n };\n\n chroma$g.hcg = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$z, [ null ].concat( args, ['hcg']) ));\n };\n\n input$c.format.hcg = hcg2rgb_1;\n\n input$c.autodetect.push({\n p: 1,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$q(args, 'hcg');\n if (type$j(args) === 'array' && args.length === 3) {\n return 'hcg';\n }\n }\n });\n\n var unpack$p = utils.unpack;\n var last = utils.last;\n var round$3 = Math.round;\n\n var rgb2hex$2 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$p(args, 'rgba');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var a = ref[3];\n var mode = last(args) || 'auto';\n if (a === undefined) { a = 1; }\n if (mode === 'auto') {\n mode = a < 1 ? 'rgba' : 'rgb';\n }\n r = round$3(r);\n g = round$3(g);\n b = round$3(b);\n var u = r << 16 | g << 8 | b;\n var str = \"000000\" + u.toString(16); //#.toUpperCase();\n str = str.substr(str.length - 6);\n var hxa = '0' + round$3(a * 255).toString(16);\n hxa = hxa.substr(hxa.length - 2);\n switch (mode.toLowerCase()) {\n case 'rgba': return (\"#\" + str + hxa);\n case 'argb': return (\"#\" + hxa + str);\n default: return (\"#\" + str);\n }\n };\n\n var rgb2hex_1 = rgb2hex$2;\n\n var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\n var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\n var hex2rgb$1 = function (hex) {\n if (hex.match(RE_HEX)) {\n // remove optional leading #\n if (hex.length === 4 || hex.length === 7) {\n hex = hex.substr(1);\n }\n // expand short-notation to full six-digit\n if (hex.length === 3) {\n hex = hex.split('');\n hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2];\n }\n var u = parseInt(hex, 16);\n var r = u >> 16;\n var g = u >> 8 & 0xFF;\n var b = u & 0xFF;\n return [r,g,b,1];\n }\n\n // match rgba hex format, eg #FF000077\n if (hex.match(RE_HEXA)) {\n if (hex.length === 5 || hex.length === 9) {\n // remove optional leading #\n hex = hex.substr(1);\n }\n // expand short-notation to full eight-digit\n if (hex.length === 4) {\n hex = hex.split('');\n hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3];\n }\n var u$1 = parseInt(hex, 16);\n var r$1 = u$1 >> 24 & 0xFF;\n var g$1 = u$1 >> 16 & 0xFF;\n var b$1 = u$1 >> 8 & 0xFF;\n var a = Math.round((u$1 & 0xFF) / 0xFF * 100) / 100;\n return [r$1,g$1,b$1,a];\n }\n\n // we used to check for css colors here\n // if _input.css? and rgb = _input.css hex\n // return rgb\n\n throw new Error((\"unknown hex color: \" + hex));\n };\n\n var hex2rgb_1 = hex2rgb$1;\n\n var chroma$f = chroma_1;\n var Color$y = Color_1;\n var type$i = utils.type;\n var input$b = input$h;\n\n var rgb2hex$1 = rgb2hex_1;\n\n Color$y.prototype.hex = function(mode) {\n return rgb2hex$1(this._rgb, mode);\n };\n\n chroma$f.hex = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$y, [ null ].concat( args, ['hex']) ));\n };\n\n input$b.format.hex = hex2rgb_1;\n input$b.autodetect.push({\n p: 4,\n test: function (h) {\n var rest = [], len = arguments.length - 1;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];\n\n if (!rest.length && type$i(h) === 'string' && [3,4,5,6,7,8,9].indexOf(h.length) >= 0) {\n return 'hex';\n }\n }\n });\n\n var unpack$o = utils.unpack;\n var TWOPI$2 = utils.TWOPI;\n var min$2 = Math.min;\n var sqrt$4 = Math.sqrt;\n var acos = Math.acos;\n\n var rgb2hsi$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n */\n var ref = unpack$o(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n r /= 255;\n g /= 255;\n b /= 255;\n var h;\n var min_ = min$2(r,g,b);\n var i = (r+g+b) / 3;\n var s = i > 0 ? 1 - min_/i : 0;\n if (s === 0) {\n h = NaN;\n } else {\n h = ((r-g)+(r-b)) / 2;\n h /= sqrt$4((r-g)*(r-g) + (r-b)*(g-b));\n h = acos(h);\n if (b > g) {\n h = TWOPI$2 - h;\n }\n h /= TWOPI$2;\n }\n return [h*360,s,i];\n };\n\n var rgb2hsi_1 = rgb2hsi$1;\n\n var unpack$n = utils.unpack;\n var limit = utils.limit;\n var TWOPI$1 = utils.TWOPI;\n var PITHIRD = utils.PITHIRD;\n var cos$4 = Math.cos;\n\n /*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\n var hsi2rgb = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n /*\n borrowed from here:\n http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n */\n args = unpack$n(args, 'hsi');\n var h = args[0];\n var s = args[1];\n var i = args[2];\n var r,g,b;\n\n if (isNaN(h)) { h = 0; }\n if (isNaN(s)) { s = 0; }\n // normalize hue\n if (h > 360) { h -= 360; }\n if (h < 0) { h += 360; }\n h /= 360;\n if (h < 1/3) {\n b = (1-s)/3;\n r = (1+s*cos$4(TWOPI$1*h)/cos$4(PITHIRD-TWOPI$1*h))/3;\n g = 1 - (b+r);\n } else if (h < 2/3) {\n h -= 1/3;\n r = (1-s)/3;\n g = (1+s*cos$4(TWOPI$1*h)/cos$4(PITHIRD-TWOPI$1*h))/3;\n b = 1 - (r+g);\n } else {\n h -= 2/3;\n g = (1-s)/3;\n b = (1+s*cos$4(TWOPI$1*h)/cos$4(PITHIRD-TWOPI$1*h))/3;\n r = 1 - (g+b);\n }\n r = limit(i*r*3);\n g = limit(i*g*3);\n b = limit(i*b*3);\n return [r*255, g*255, b*255, args.length > 3 ? args[3] : 1];\n };\n\n var hsi2rgb_1 = hsi2rgb;\n\n var unpack$m = utils.unpack;\n var type$h = utils.type;\n var chroma$e = chroma_1;\n var Color$x = Color_1;\n var input$a = input$h;\n\n var rgb2hsi = rgb2hsi_1;\n\n Color$x.prototype.hsi = function() {\n return rgb2hsi(this._rgb);\n };\n\n chroma$e.hsi = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$x, [ null ].concat( args, ['hsi']) ));\n };\n\n input$a.format.hsi = hsi2rgb_1;\n\n input$a.autodetect.push({\n p: 2,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$m(args, 'hsi');\n if (type$h(args) === 'array' && args.length === 3) {\n return 'hsi';\n }\n }\n });\n\n var unpack$l = utils.unpack;\n var type$g = utils.type;\n var chroma$d = chroma_1;\n var Color$w = Color_1;\n var input$9 = input$h;\n\n var rgb2hsl$1 = rgb2hsl_1;\n\n Color$w.prototype.hsl = function() {\n return rgb2hsl$1(this._rgb);\n };\n\n chroma$d.hsl = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$w, [ null ].concat( args, ['hsl']) ));\n };\n\n input$9.format.hsl = hsl2rgb_1;\n\n input$9.autodetect.push({\n p: 2,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$l(args, 'hsl');\n if (type$g(args) === 'array' && args.length === 3) {\n return 'hsl';\n }\n }\n });\n\n var unpack$k = utils.unpack;\n var min$1 = Math.min;\n var max$1 = Math.max;\n\n /*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\n var rgb2hsl = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$k(args, 'rgb');\n var r = args[0];\n var g = args[1];\n var b = args[2];\n var min_ = min$1(r, g, b);\n var max_ = max$1(r, g, b);\n var delta = max_ - min_;\n var h,s,v;\n v = max_ / 255.0;\n if (max_ === 0) {\n h = Number.NaN;\n s = 0;\n } else {\n s = delta / max_;\n if (r === max_) { h = (g - b) / delta; }\n if (g === max_) { h = 2+(b - r) / delta; }\n if (b === max_) { h = 4+(r - g) / delta; }\n h *= 60;\n if (h < 0) { h += 360; }\n }\n return [h, s, v]\n };\n\n var rgb2hsv$1 = rgb2hsl;\n\n var unpack$j = utils.unpack;\n var floor$2 = Math.floor;\n\n var hsv2rgb = function () {\n var assign, assign$1, assign$2, assign$3, assign$4, assign$5;\n\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n args = unpack$j(args, 'hsv');\n var h = args[0];\n var s = args[1];\n var v = args[2];\n var r,g,b;\n v *= 255;\n if (s === 0) {\n r = g = b = v;\n } else {\n if (h === 360) { h = 0; }\n if (h > 360) { h -= 360; }\n if (h < 0) { h += 360; }\n h /= 60;\n\n var i = floor$2(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n\n switch (i) {\n case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break\n case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break\n case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break\n case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break\n case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break\n case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break\n }\n }\n return [r,g,b,args.length > 3?args[3]:1];\n };\n\n var hsv2rgb_1 = hsv2rgb;\n\n var unpack$i = utils.unpack;\n var type$f = utils.type;\n var chroma$c = chroma_1;\n var Color$v = Color_1;\n var input$8 = input$h;\n\n var rgb2hsv = rgb2hsv$1;\n\n Color$v.prototype.hsv = function() {\n return rgb2hsv(this._rgb);\n };\n\n chroma$c.hsv = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$v, [ null ].concat( args, ['hsv']) ));\n };\n\n input$8.format.hsv = hsv2rgb_1;\n\n input$8.autodetect.push({\n p: 2,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$i(args, 'hsv');\n if (type$f(args) === 'array' && args.length === 3) {\n return 'hsv';\n }\n }\n });\n\n var labConstants = {\n // Corresponds roughly to RGB brighter/darker\n Kn: 18,\n\n // D65 standard referent\n Xn: 0.950470,\n Yn: 1,\n Zn: 1.088830,\n\n t0: 0.137931034, // 4 / 29\n t1: 0.206896552, // 6 / 29\n t2: 0.12841855, // 3 * t1 * t1\n t3: 0.008856452, // t1 * t1 * t1\n };\n\n var LAB_CONSTANTS$3 = labConstants;\n var unpack$h = utils.unpack;\n var pow$a = Math.pow;\n\n var rgb2lab$2 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$h(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2xyz(r,g,b);\n var x = ref$1[0];\n var y = ref$1[1];\n var z = ref$1[2];\n var l = 116 * y - 16;\n return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)];\n };\n\n var rgb_xyz = function (r) {\n if ((r /= 255) <= 0.04045) { return r / 12.92; }\n return pow$a((r + 0.055) / 1.055, 2.4);\n };\n\n var xyz_lab = function (t) {\n if (t > LAB_CONSTANTS$3.t3) { return pow$a(t, 1 / 3); }\n return t / LAB_CONSTANTS$3.t2 + LAB_CONSTANTS$3.t0;\n };\n\n var rgb2xyz = function (r,g,b) {\n r = rgb_xyz(r);\n g = rgb_xyz(g);\n b = rgb_xyz(b);\n var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / LAB_CONSTANTS$3.Xn);\n var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / LAB_CONSTANTS$3.Yn);\n var z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / LAB_CONSTANTS$3.Zn);\n return [x,y,z];\n };\n\n var rgb2lab_1 = rgb2lab$2;\n\n var LAB_CONSTANTS$2 = labConstants;\n var unpack$g = utils.unpack;\n var pow$9 = Math.pow;\n\n /*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\n var lab2rgb$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$g(args, 'lab');\n var l = args[0];\n var a = args[1];\n var b = args[2];\n var x,y,z, r,g,b_;\n\n y = (l + 16) / 116;\n x = isNaN(a) ? y : y + a / 500;\n z = isNaN(b) ? y : y - b / 200;\n\n y = LAB_CONSTANTS$2.Yn * lab_xyz(y);\n x = LAB_CONSTANTS$2.Xn * lab_xyz(x);\n z = LAB_CONSTANTS$2.Zn * lab_xyz(z);\n\n r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB\n g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z);\n b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z);\n\n return [r,g,b_,args.length > 3 ? args[3] : 1];\n };\n\n var xyz_rgb = function (r) {\n return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow$9(r, 1 / 2.4) - 0.055)\n };\n\n var lab_xyz = function (t) {\n return t > LAB_CONSTANTS$2.t1 ? t * t * t : LAB_CONSTANTS$2.t2 * (t - LAB_CONSTANTS$2.t0)\n };\n\n var lab2rgb_1 = lab2rgb$1;\n\n var unpack$f = utils.unpack;\n var type$e = utils.type;\n var chroma$b = chroma_1;\n var Color$u = Color_1;\n var input$7 = input$h;\n\n var rgb2lab$1 = rgb2lab_1;\n\n Color$u.prototype.lab = function() {\n return rgb2lab$1(this._rgb);\n };\n\n chroma$b.lab = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$u, [ null ].concat( args, ['lab']) ));\n };\n\n input$7.format.lab = lab2rgb_1;\n\n input$7.autodetect.push({\n p: 2,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$f(args, 'lab');\n if (type$e(args) === 'array' && args.length === 3) {\n return 'lab';\n }\n }\n });\n\n var unpack$e = utils.unpack;\n var RAD2DEG = utils.RAD2DEG;\n var sqrt$3 = Math.sqrt;\n var atan2$2 = Math.atan2;\n var round$2 = Math.round;\n\n var lab2lch$2 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$e(args, 'lab');\n var l = ref[0];\n var a = ref[1];\n var b = ref[2];\n var c = sqrt$3(a * a + b * b);\n var h = (atan2$2(b, a) * RAD2DEG + 360) % 360;\n if (round$2(c*10000) === 0) { h = Number.NaN; }\n return [l, c, h];\n };\n\n var lab2lch_1 = lab2lch$2;\n\n var unpack$d = utils.unpack;\n var rgb2lab = rgb2lab_1;\n var lab2lch$1 = lab2lch_1;\n\n var rgb2lch$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$d(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2lab(r,g,b);\n var l = ref$1[0];\n var a = ref$1[1];\n var b_ = ref$1[2];\n return lab2lch$1(l,a,b_);\n };\n\n var rgb2lch_1 = rgb2lch$1;\n\n var unpack$c = utils.unpack;\n var DEG2RAD = utils.DEG2RAD;\n var sin$3 = Math.sin;\n var cos$3 = Math.cos;\n\n var lch2lab$2 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n /*\n Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n These formulas were invented by David Dalrymple to obtain maximum contrast without going\n out of gamut if the parameters are in the range 0-1.\n\n A saturation multiplier was added by Gregor Aisch\n */\n var ref = unpack$c(args, 'lch');\n var l = ref[0];\n var c = ref[1];\n var h = ref[2];\n if (isNaN(h)) { h = 0; }\n h = h * DEG2RAD;\n return [l, cos$3(h) * c, sin$3(h) * c]\n };\n\n var lch2lab_1 = lch2lab$2;\n\n var unpack$b = utils.unpack;\n var lch2lab$1 = lch2lab_1;\n var lab2rgb = lab2rgb_1;\n\n var lch2rgb$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$b(args, 'lch');\n var l = args[0];\n var c = args[1];\n var h = args[2];\n var ref = lch2lab$1 (l,c,h);\n var L = ref[0];\n var a = ref[1];\n var b_ = ref[2];\n var ref$1 = lab2rgb (L,a,b_);\n var r = ref$1[0];\n var g = ref$1[1];\n var b = ref$1[2];\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var lch2rgb_1 = lch2rgb$1;\n\n var unpack$a = utils.unpack;\n var lch2rgb = lch2rgb_1;\n\n var hcl2rgb = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var hcl = unpack$a(args, 'hcl').reverse();\n return lch2rgb.apply(void 0, hcl);\n };\n\n var hcl2rgb_1 = hcl2rgb;\n\n var unpack$9 = utils.unpack;\n var type$d = utils.type;\n var chroma$a = chroma_1;\n var Color$t = Color_1;\n var input$6 = input$h;\n\n var rgb2lch = rgb2lch_1;\n\n Color$t.prototype.lch = function() { return rgb2lch(this._rgb); };\n Color$t.prototype.hcl = function() { return rgb2lch(this._rgb).reverse(); };\n\n chroma$a.lch = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$t, [ null ].concat( args, ['lch']) ));\n };\n chroma$a.hcl = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$t, [ null ].concat( args, ['hcl']) ));\n };\n\n input$6.format.lch = lch2rgb_1;\n input$6.format.hcl = hcl2rgb_1;\n\n ['lch','hcl'].forEach(function (m) { return input$6.autodetect.push({\n p: 2,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$9(args, m);\n if (type$d(args) === 'array' && args.length === 3) {\n return m;\n }\n }\n }); });\n\n /**\n \tX11 color names\n\n \thttp://www.w3.org/TR/css3-color/#svg-color\n */\n\n var w3cx11$1 = {\n aliceblue: '#f0f8ff',\n antiquewhite: '#faebd7',\n aqua: '#00ffff',\n aquamarine: '#7fffd4',\n azure: '#f0ffff',\n beige: '#f5f5dc',\n bisque: '#ffe4c4',\n black: '#000000',\n blanchedalmond: '#ffebcd',\n blue: '#0000ff',\n blueviolet: '#8a2be2',\n brown: '#a52a2a',\n burlywood: '#deb887',\n cadetblue: '#5f9ea0',\n chartreuse: '#7fff00',\n chocolate: '#d2691e',\n coral: '#ff7f50',\n cornflower: '#6495ed',\n cornflowerblue: '#6495ed',\n cornsilk: '#fff8dc',\n crimson: '#dc143c',\n cyan: '#00ffff',\n darkblue: '#00008b',\n darkcyan: '#008b8b',\n darkgoldenrod: '#b8860b',\n darkgray: '#a9a9a9',\n darkgreen: '#006400',\n darkgrey: '#a9a9a9',\n darkkhaki: '#bdb76b',\n darkmagenta: '#8b008b',\n darkolivegreen: '#556b2f',\n darkorange: '#ff8c00',\n darkorchid: '#9932cc',\n darkred: '#8b0000',\n darksalmon: '#e9967a',\n darkseagreen: '#8fbc8f',\n darkslateblue: '#483d8b',\n darkslategray: '#2f4f4f',\n darkslategrey: '#2f4f4f',\n darkturquoise: '#00ced1',\n darkviolet: '#9400d3',\n deeppink: '#ff1493',\n deepskyblue: '#00bfff',\n dimgray: '#696969',\n dimgrey: '#696969',\n dodgerblue: '#1e90ff',\n firebrick: '#b22222',\n floralwhite: '#fffaf0',\n forestgreen: '#228b22',\n fuchsia: '#ff00ff',\n gainsboro: '#dcdcdc',\n ghostwhite: '#f8f8ff',\n gold: '#ffd700',\n goldenrod: '#daa520',\n gray: '#808080',\n green: '#008000',\n greenyellow: '#adff2f',\n grey: '#808080',\n honeydew: '#f0fff0',\n hotpink: '#ff69b4',\n indianred: '#cd5c5c',\n indigo: '#4b0082',\n ivory: '#fffff0',\n khaki: '#f0e68c',\n laserlemon: '#ffff54',\n lavender: '#e6e6fa',\n lavenderblush: '#fff0f5',\n lawngreen: '#7cfc00',\n lemonchiffon: '#fffacd',\n lightblue: '#add8e6',\n lightcoral: '#f08080',\n lightcyan: '#e0ffff',\n lightgoldenrod: '#fafad2',\n lightgoldenrodyellow: '#fafad2',\n lightgray: '#d3d3d3',\n lightgreen: '#90ee90',\n lightgrey: '#d3d3d3',\n lightpink: '#ffb6c1',\n lightsalmon: '#ffa07a',\n lightseagreen: '#20b2aa',\n lightskyblue: '#87cefa',\n lightslategray: '#778899',\n lightslategrey: '#778899',\n lightsteelblue: '#b0c4de',\n lightyellow: '#ffffe0',\n lime: '#00ff00',\n limegreen: '#32cd32',\n linen: '#faf0e6',\n magenta: '#ff00ff',\n maroon: '#800000',\n maroon2: '#7f0000',\n maroon3: '#b03060',\n mediumaquamarine: '#66cdaa',\n mediumblue: '#0000cd',\n mediumorchid: '#ba55d3',\n mediumpurple: '#9370db',\n mediumseagreen: '#3cb371',\n mediumslateblue: '#7b68ee',\n mediumspringgreen: '#00fa9a',\n mediumturquoise: '#48d1cc',\n mediumvioletred: '#c71585',\n midnightblue: '#191970',\n mintcream: '#f5fffa',\n mistyrose: '#ffe4e1',\n moccasin: '#ffe4b5',\n navajowhite: '#ffdead',\n navy: '#000080',\n oldlace: '#fdf5e6',\n olive: '#808000',\n olivedrab: '#6b8e23',\n orange: '#ffa500',\n orangered: '#ff4500',\n orchid: '#da70d6',\n palegoldenrod: '#eee8aa',\n palegreen: '#98fb98',\n paleturquoise: '#afeeee',\n palevioletred: '#db7093',\n papayawhip: '#ffefd5',\n peachpuff: '#ffdab9',\n peru: '#cd853f',\n pink: '#ffc0cb',\n plum: '#dda0dd',\n powderblue: '#b0e0e6',\n purple: '#800080',\n purple2: '#7f007f',\n purple3: '#a020f0',\n rebeccapurple: '#663399',\n red: '#ff0000',\n rosybrown: '#bc8f8f',\n royalblue: '#4169e1',\n saddlebrown: '#8b4513',\n salmon: '#fa8072',\n sandybrown: '#f4a460',\n seagreen: '#2e8b57',\n seashell: '#fff5ee',\n sienna: '#a0522d',\n silver: '#c0c0c0',\n skyblue: '#87ceeb',\n slateblue: '#6a5acd',\n slategray: '#708090',\n slategrey: '#708090',\n snow: '#fffafa',\n springgreen: '#00ff7f',\n steelblue: '#4682b4',\n tan: '#d2b48c',\n teal: '#008080',\n thistle: '#d8bfd8',\n tomato: '#ff6347',\n turquoise: '#40e0d0',\n violet: '#ee82ee',\n wheat: '#f5deb3',\n white: '#ffffff',\n whitesmoke: '#f5f5f5',\n yellow: '#ffff00',\n yellowgreen: '#9acd32'\n };\n\n var w3cx11_1 = w3cx11$1;\n\n var Color$s = Color_1;\n var input$5 = input$h;\n var type$c = utils.type;\n\n var w3cx11 = w3cx11_1;\n var hex2rgb = hex2rgb_1;\n var rgb2hex = rgb2hex_1;\n\n Color$s.prototype.name = function() {\n var hex = rgb2hex(this._rgb, 'rgb');\n for (var i = 0, list = Object.keys(w3cx11); i < list.length; i += 1) {\n var n = list[i];\n\n if (w3cx11[n] === hex) { return n.toLowerCase(); }\n }\n return hex;\n };\n\n input$5.format.named = function (name) {\n name = name.toLowerCase();\n if (w3cx11[name]) { return hex2rgb(w3cx11[name]); }\n throw new Error('unknown color name: '+name);\n };\n\n input$5.autodetect.push({\n p: 5,\n test: function (h) {\n var rest = [], len = arguments.length - 1;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ];\n\n if (!rest.length && type$c(h) === 'string' && w3cx11[h.toLowerCase()]) {\n return 'named';\n }\n }\n });\n\n var unpack$8 = utils.unpack;\n\n var rgb2num$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$8(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n return (r << 16) + (g << 8) + b;\n };\n\n var rgb2num_1 = rgb2num$1;\n\n var type$b = utils.type;\n\n var num2rgb = function (num) {\n if (type$b(num) == \"number\" && num >= 0 && num <= 0xFFFFFF) {\n var r = num >> 16;\n var g = (num >> 8) & 0xFF;\n var b = num & 0xFF;\n return [r,g,b,1];\n }\n throw new Error(\"unknown num color: \"+num);\n };\n\n var num2rgb_1 = num2rgb;\n\n var chroma$9 = chroma_1;\n var Color$r = Color_1;\n var input$4 = input$h;\n var type$a = utils.type;\n\n var rgb2num = rgb2num_1;\n\n Color$r.prototype.num = function() {\n return rgb2num(this._rgb);\n };\n\n chroma$9.num = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$r, [ null ].concat( args, ['num']) ));\n };\n\n input$4.format.num = num2rgb_1;\n\n input$4.autodetect.push({\n p: 5,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (args.length === 1 && type$a(args[0]) === 'number' && args[0] >= 0 && args[0] <= 0xFFFFFF) {\n return 'num';\n }\n }\n });\n\n var chroma$8 = chroma_1;\n var Color$q = Color_1;\n var input$3 = input$h;\n var unpack$7 = utils.unpack;\n var type$9 = utils.type;\n var round$1 = Math.round;\n\n Color$q.prototype.rgb = function(rnd) {\n if ( rnd === void 0 ) rnd=true;\n\n if (rnd === false) { return this._rgb.slice(0,3); }\n return this._rgb.slice(0,3).map(round$1);\n };\n\n Color$q.prototype.rgba = function(rnd) {\n if ( rnd === void 0 ) rnd=true;\n\n return this._rgb.slice(0,4).map(function (v,i) {\n return i<3 ? (rnd === false ? v : round$1(v)) : v;\n });\n };\n\n chroma$8.rgb = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$q, [ null ].concat( args, ['rgb']) ));\n };\n\n input$3.format.rgb = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var rgba = unpack$7(args, 'rgba');\n if (rgba[3] === undefined) { rgba[3] = 1; }\n return rgba;\n };\n\n input$3.autodetect.push({\n p: 3,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$7(args, 'rgba');\n if (type$9(args) === 'array' && (args.length === 3 ||\n args.length === 4 && type$9(args[3]) == 'number' && args[3] >= 0 && args[3] <= 1)) {\n return 'rgb';\n }\n }\n });\n\n /*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\n var log$1 = Math.log;\n\n var temperature2rgb$1 = function (kelvin) {\n var temp = kelvin / 100;\n var r,g,b;\n if (temp < 66) {\n r = 255;\n g = temp < 6 ? 0 : -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log$1(g);\n b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log$1(b);\n } else {\n r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log$1(r);\n g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log$1(g);\n b = 255;\n }\n return [r,g,b,1];\n };\n\n var temperature2rgb_1 = temperature2rgb$1;\n\n /*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\n var temperature2rgb = temperature2rgb_1;\n var unpack$6 = utils.unpack;\n var round = Math.round;\n\n var rgb2temperature$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var rgb = unpack$6(args, 'rgb');\n var r = rgb[0], b = rgb[2];\n var minTemp = 1000;\n var maxTemp = 40000;\n var eps = 0.4;\n var temp;\n while (maxTemp - minTemp > eps) {\n temp = (maxTemp + minTemp) * 0.5;\n var rgb$1 = temperature2rgb(temp);\n if ((rgb$1[2] / rgb$1[0]) >= (b / r)) {\n maxTemp = temp;\n } else {\n minTemp = temp;\n }\n }\n return round(temp);\n };\n\n var rgb2temperature_1 = rgb2temperature$1;\n\n var chroma$7 = chroma_1;\n var Color$p = Color_1;\n var input$2 = input$h;\n\n var rgb2temperature = rgb2temperature_1;\n\n Color$p.prototype.temp =\n Color$p.prototype.kelvin =\n Color$p.prototype.temperature = function() {\n return rgb2temperature(this._rgb);\n };\n\n chroma$7.temp =\n chroma$7.kelvin =\n chroma$7.temperature = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$p, [ null ].concat( args, ['temp']) ));\n };\n\n input$2.format.temp =\n input$2.format.kelvin =\n input$2.format.temperature = temperature2rgb_1;\n\n var unpack$5 = utils.unpack;\n var cbrt = Math.cbrt;\n var pow$8 = Math.pow;\n var sign$1 = Math.sign;\n\n var rgb2oklab$2 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n // OKLab color space implementation taken from\n // https://bottosson.github.io/posts/oklab/\n var ref = unpack$5(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = [rgb2lrgb(r / 255), rgb2lrgb(g / 255), rgb2lrgb(b / 255)];\n var lr = ref$1[0];\n var lg = ref$1[1];\n var lb = ref$1[2];\n var l = cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);\n var m = cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);\n var s = cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);\n\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n };\n\n var rgb2oklab_1 = rgb2oklab$2;\n\n function rgb2lrgb(c) {\n var abs = Math.abs(c);\n if (abs < 0.04045) {\n return c / 12.92;\n }\n return (sign$1(c) || 1) * pow$8((abs + 0.055) / 1.055, 2.4);\n }\n\n var unpack$4 = utils.unpack;\n var pow$7 = Math.pow;\n var sign = Math.sign;\n\n /*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\n var oklab2rgb$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$4(args, 'lab');\n var L = args[0];\n var a = args[1];\n var b = args[2];\n\n var l = pow$7(L + 0.3963377774 * a + 0.2158037573 * b, 3);\n var m = pow$7(L - 0.1055613458 * a - 0.0638541728 * b, 3);\n var s = pow$7(L - 0.0894841775 * a - 1.291485548 * b, 3);\n\n return [\n 255 * lrgb2rgb(+4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),\n 255 * lrgb2rgb(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),\n 255 * lrgb2rgb(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s),\n args.length > 3 ? args[3] : 1\n ];\n };\n\n var oklab2rgb_1 = oklab2rgb$1;\n\n function lrgb2rgb(c) {\n var abs = Math.abs(c);\n if (abs > 0.0031308) {\n return (sign(c) || 1) * (1.055 * pow$7(abs, 1 / 2.4) - 0.055);\n }\n return c * 12.92;\n }\n\n var unpack$3 = utils.unpack;\n var type$8 = utils.type;\n var chroma$6 = chroma_1;\n var Color$o = Color_1;\n var input$1 = input$h;\n\n var rgb2oklab$1 = rgb2oklab_1;\n\n Color$o.prototype.oklab = function () {\n return rgb2oklab$1(this._rgb);\n };\n\n chroma$6.oklab = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$o, [ null ].concat( args, ['oklab']) ));\n };\n\n input$1.format.oklab = oklab2rgb_1;\n\n input$1.autodetect.push({\n p: 3,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$3(args, 'oklab');\n if (type$8(args) === 'array' && args.length === 3) {\n return 'oklab';\n }\n }\n });\n\n var unpack$2 = utils.unpack;\n var rgb2oklab = rgb2oklab_1;\n var lab2lch = lab2lch_1;\n\n var rgb2oklch$1 = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var ref = unpack$2(args, 'rgb');\n var r = ref[0];\n var g = ref[1];\n var b = ref[2];\n var ref$1 = rgb2oklab(r, g, b);\n var l = ref$1[0];\n var a = ref$1[1];\n var b_ = ref$1[2];\n return lab2lch(l, a, b_);\n };\n\n var rgb2oklch_1 = rgb2oklch$1;\n\n var unpack$1 = utils.unpack;\n var lch2lab = lch2lab_1;\n var oklab2rgb = oklab2rgb_1;\n\n var oklch2rgb = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack$1(args, 'lch');\n var l = args[0];\n var c = args[1];\n var h = args[2];\n var ref = lch2lab(l, c, h);\n var L = ref[0];\n var a = ref[1];\n var b_ = ref[2];\n var ref$1 = oklab2rgb(L, a, b_);\n var r = ref$1[0];\n var g = ref$1[1];\n var b = ref$1[2];\n return [r, g, b, args.length > 3 ? args[3] : 1];\n };\n\n var oklch2rgb_1 = oklch2rgb;\n\n var unpack = utils.unpack;\n var type$7 = utils.type;\n var chroma$5 = chroma_1;\n var Color$n = Color_1;\n var input = input$h;\n\n var rgb2oklch = rgb2oklch_1;\n\n Color$n.prototype.oklch = function () {\n return rgb2oklch(this._rgb);\n };\n\n chroma$5.oklch = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return new (Function.prototype.bind.apply( Color$n, [ null ].concat( args, ['oklch']) ));\n };\n\n input.format.oklch = oklch2rgb_1;\n\n input.autodetect.push({\n p: 3,\n test: function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n args = unpack(args, 'oklch');\n if (type$7(args) === 'array' && args.length === 3) {\n return 'oklch';\n }\n }\n });\n\n var Color$m = Color_1;\n var type$6 = utils.type;\n\n Color$m.prototype.alpha = function(a, mutate) {\n if ( mutate === void 0 ) mutate=false;\n\n if (a !== undefined && type$6(a) === 'number') {\n if (mutate) {\n this._rgb[3] = a;\n return this;\n }\n return new Color$m([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n }\n return this._rgb[3];\n };\n\n var Color$l = Color_1;\n\n Color$l.prototype.clipped = function() {\n return this._rgb._clipped || false;\n };\n\n var Color$k = Color_1;\n var LAB_CONSTANTS$1 = labConstants;\n\n Color$k.prototype.darken = function(amount) {\n \tif ( amount === void 0 ) amount=1;\n\n \tvar me = this;\n \tvar lab = me.lab();\n \tlab[0] -= LAB_CONSTANTS$1.Kn * amount;\n \treturn new Color$k(lab, 'lab').alpha(me.alpha(), true);\n };\n\n Color$k.prototype.brighten = function(amount) {\n \tif ( amount === void 0 ) amount=1;\n\n \treturn this.darken(-amount);\n };\n\n Color$k.prototype.darker = Color$k.prototype.darken;\n Color$k.prototype.brighter = Color$k.prototype.brighten;\n\n var Color$j = Color_1;\n\n Color$j.prototype.get = function (mc) {\n var ref = mc.split('.');\n var mode = ref[0];\n var channel = ref[1];\n var src = this[mode]();\n if (channel) {\n var i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n if (i > -1) { return src[i]; }\n throw new Error((\"unknown channel \" + channel + \" in mode \" + mode));\n } else {\n return src;\n }\n };\n\n var Color$i = Color_1;\n var type$5 = utils.type;\n var pow$6 = Math.pow;\n\n var EPS = 1e-7;\n var MAX_ITER = 20;\n\n Color$i.prototype.luminance = function(lum) {\n if (lum !== undefined && type$5(lum) === 'number') {\n if (lum === 0) {\n // return pure black\n return new Color$i([0,0,0,this._rgb[3]], 'rgb');\n }\n if (lum === 1) {\n // return pure white\n return new Color$i([255,255,255,this._rgb[3]], 'rgb');\n }\n // compute new color using...\n var cur_lum = this.luminance();\n var mode = 'rgb';\n var max_iter = MAX_ITER;\n\n var test = function (low, high) {\n var mid = low.interpolate(high, 0.5, mode);\n var lm = mid.luminance();\n if (Math.abs(lum - lm) < EPS || !max_iter--) {\n // close enough\n return mid;\n }\n return lm > lum ? test(low, mid) : test(mid, high);\n };\n\n var rgb = (cur_lum > lum ? test(new Color$i([0,0,0]), this) : test(this, new Color$i([255,255,255]))).rgb();\n return new Color$i(rgb.concat( [this._rgb[3]]));\n }\n return rgb2luminance.apply(void 0, (this._rgb).slice(0,3));\n };\n\n\n var rgb2luminance = function (r,g,b) {\n // relative luminance\n // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n r = luminance_x(r);\n g = luminance_x(g);\n b = luminance_x(b);\n return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n };\n\n var luminance_x = function (x) {\n x /= 255;\n return x <= 0.03928 ? x/12.92 : pow$6((x+0.055)/1.055, 2.4);\n };\n\n var interpolator$1 = {};\n\n var Color$h = Color_1;\n var type$4 = utils.type;\n var interpolator = interpolator$1;\n\n var mix$1 = function (col1, col2, f) {\n if ( f === void 0 ) f=0.5;\n var rest = [], len = arguments.length - 3;\n while ( len-- > 0 ) rest[ len ] = arguments[ len + 3 ];\n\n var mode = rest[0] || 'lrgb';\n if (!interpolator[mode] && !rest.length) {\n // fall back to the first supported mode\n mode = Object.keys(interpolator)[0];\n }\n if (!interpolator[mode]) {\n throw new Error((\"interpolation mode \" + mode + \" is not defined\"));\n }\n if (type$4(col1) !== 'object') { col1 = new Color$h(col1); }\n if (type$4(col2) !== 'object') { col2 = new Color$h(col2); }\n return interpolator[mode](col1, col2, f)\n .alpha(col1.alpha() + f * (col2.alpha() - col1.alpha()));\n };\n\n var Color$g = Color_1;\n var mix = mix$1;\n\n Color$g.prototype.mix =\n Color$g.prototype.interpolate = function(col2, f) {\n \tif ( f === void 0 ) f=0.5;\n \tvar rest = [], len = arguments.length - 2;\n \twhile ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ];\n\n \treturn mix.apply(void 0, [ this, col2, f ].concat( rest ));\n };\n\n var Color$f = Color_1;\n\n Color$f.prototype.premultiply = function(mutate) {\n \tif ( mutate === void 0 ) mutate=false;\n\n \tvar rgb = this._rgb;\n \tvar a = rgb[3];\n \tif (mutate) {\n \t\tthis._rgb = [rgb[0]*a, rgb[1]*a, rgb[2]*a, a];\n \t\treturn this;\n \t} else {\n \t\treturn new Color$f([rgb[0]*a, rgb[1]*a, rgb[2]*a, a], 'rgb');\n \t}\n };\n\n var Color$e = Color_1;\n var LAB_CONSTANTS = labConstants;\n\n Color$e.prototype.saturate = function(amount) {\n \tif ( amount === void 0 ) amount=1;\n\n \tvar me = this;\n \tvar lch = me.lch();\n \tlch[1] += LAB_CONSTANTS.Kn * amount;\n \tif (lch[1] < 0) { lch[1] = 0; }\n \treturn new Color$e(lch, 'lch').alpha(me.alpha(), true);\n };\n\n Color$e.prototype.desaturate = function(amount) {\n \tif ( amount === void 0 ) amount=1;\n\n \treturn this.saturate(-amount);\n };\n\n var Color$d = Color_1;\n var type$3 = utils.type;\n\n Color$d.prototype.set = function (mc, value, mutate) {\n if ( mutate === void 0 ) mutate = false;\n\n var ref = mc.split('.');\n var mode = ref[0];\n var channel = ref[1];\n var src = this[mode]();\n if (channel) {\n var i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n if (i > -1) {\n if (type$3(value) == 'string') {\n switch (value.charAt(0)) {\n case '+':\n src[i] += +value;\n break;\n case '-':\n src[i] += +value;\n break;\n case '*':\n src[i] *= +value.substr(1);\n break;\n case '/':\n src[i] /= +value.substr(1);\n break;\n default:\n src[i] = +value;\n }\n } else if (type$3(value) === 'number') {\n src[i] = value;\n } else {\n throw new Error(\"unsupported value for Color.set\");\n }\n var out = new Color$d(src, mode);\n if (mutate) {\n this._rgb = out._rgb;\n return this;\n }\n return out;\n }\n throw new Error((\"unknown channel \" + channel + \" in mode \" + mode));\n } else {\n return src;\n }\n };\n\n var Color$c = Color_1;\n\n var rgb = function (col1, col2, f) {\n var xyz0 = col1._rgb;\n var xyz1 = col2._rgb;\n return new Color$c(\n xyz0[0] + f * (xyz1[0]-xyz0[0]),\n xyz0[1] + f * (xyz1[1]-xyz0[1]),\n xyz0[2] + f * (xyz1[2]-xyz0[2]),\n 'rgb'\n )\n };\n\n // register interpolator\n interpolator$1.rgb = rgb;\n\n var Color$b = Color_1;\n var sqrt$2 = Math.sqrt;\n var pow$5 = Math.pow;\n\n var lrgb = function (col1, col2, f) {\n var ref = col1._rgb;\n var x1 = ref[0];\n var y1 = ref[1];\n var z1 = ref[2];\n var ref$1 = col2._rgb;\n var x2 = ref$1[0];\n var y2 = ref$1[1];\n var z2 = ref$1[2];\n return new Color$b(\n sqrt$2(pow$5(x1,2) * (1-f) + pow$5(x2,2) * f),\n sqrt$2(pow$5(y1,2) * (1-f) + pow$5(y2,2) * f),\n sqrt$2(pow$5(z1,2) * (1-f) + pow$5(z2,2) * f),\n 'rgb'\n )\n };\n\n // register interpolator\n interpolator$1.lrgb = lrgb;\n\n var Color$a = Color_1;\n\n var lab = function (col1, col2, f) {\n var xyz0 = col1.lab();\n var xyz1 = col2.lab();\n return new Color$a(\n xyz0[0] + f * (xyz1[0]-xyz0[0]),\n xyz0[1] + f * (xyz1[1]-xyz0[1]),\n xyz0[2] + f * (xyz1[2]-xyz0[2]),\n 'lab'\n )\n };\n\n // register interpolator\n interpolator$1.lab = lab;\n\n var Color$9 = Color_1;\n\n var _hsx = function (col1, col2, f, m) {\n var assign, assign$1;\n\n var xyz0, xyz1;\n if (m === 'hsl') {\n xyz0 = col1.hsl();\n xyz1 = col2.hsl();\n } else if (m === 'hsv') {\n xyz0 = col1.hsv();\n xyz1 = col2.hsv();\n } else if (m === 'hcg') {\n xyz0 = col1.hcg();\n xyz1 = col2.hcg();\n } else if (m === 'hsi') {\n xyz0 = col1.hsi();\n xyz1 = col2.hsi();\n } else if (m === 'lch' || m === 'hcl') {\n m = 'hcl';\n xyz0 = col1.hcl();\n xyz1 = col2.hcl();\n } else if (m === 'oklch') {\n xyz0 = col1.oklch().reverse();\n xyz1 = col2.oklch().reverse();\n }\n\n var hue0, hue1, sat0, sat1, lbv0, lbv1;\n if (m.substr(0, 1) === 'h' || m === 'oklch') {\n (assign = xyz0, hue0 = assign[0], sat0 = assign[1], lbv0 = assign[2]);\n (assign$1 = xyz1, hue1 = assign$1[0], sat1 = assign$1[1], lbv1 = assign$1[2]);\n }\n\n var sat, hue, lbv, dh;\n\n if (!isNaN(hue0) && !isNaN(hue1)) {\n // both colors have hue\n if (hue1 > hue0 && hue1 - hue0 > 180) {\n dh = hue1 - (hue0 + 360);\n } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n dh = hue1 + 360 - hue0;\n } else {\n dh = hue1 - hue0;\n }\n hue = hue0 + f * dh;\n } else if (!isNaN(hue0)) {\n hue = hue0;\n if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') { sat = sat0; }\n } else if (!isNaN(hue1)) {\n hue = hue1;\n if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') { sat = sat1; }\n } else {\n hue = Number.NaN;\n }\n\n if (sat === undefined) { sat = sat0 + f * (sat1 - sat0); }\n lbv = lbv0 + f * (lbv1 - lbv0);\n return m === 'oklch' ? new Color$9([lbv, sat, hue], m) : new Color$9([hue, sat, lbv], m);\n };\n\n var interpolate_hsx$5 = _hsx;\n\n var lch = function (col1, col2, f) {\n \treturn interpolate_hsx$5(col1, col2, f, 'lch');\n };\n\n // register interpolator\n interpolator$1.lch = lch;\n interpolator$1.hcl = lch;\n\n var Color$8 = Color_1;\n\n var num = function (col1, col2, f) {\n var c1 = col1.num();\n var c2 = col2.num();\n return new Color$8(c1 + f * (c2-c1), 'num')\n };\n\n // register interpolator\n interpolator$1.num = num;\n\n var interpolate_hsx$4 = _hsx;\n\n var hcg = function (col1, col2, f) {\n \treturn interpolate_hsx$4(col1, col2, f, 'hcg');\n };\n\n // register interpolator\n interpolator$1.hcg = hcg;\n\n var interpolate_hsx$3 = _hsx;\n\n var hsi = function (col1, col2, f) {\n \treturn interpolate_hsx$3(col1, col2, f, 'hsi');\n };\n\n // register interpolator\n interpolator$1.hsi = hsi;\n\n var interpolate_hsx$2 = _hsx;\n\n var hsl = function (col1, col2, f) {\n \treturn interpolate_hsx$2(col1, col2, f, 'hsl');\n };\n\n // register interpolator\n interpolator$1.hsl = hsl;\n\n var interpolate_hsx$1 = _hsx;\n\n var hsv = function (col1, col2, f) {\n \treturn interpolate_hsx$1(col1, col2, f, 'hsv');\n };\n\n // register interpolator\n interpolator$1.hsv = hsv;\n\n var Color$7 = Color_1;\n\n var oklab = function (col1, col2, f) {\n var xyz0 = col1.oklab();\n var xyz1 = col2.oklab();\n return new Color$7(\n xyz0[0] + f * (xyz1[0] - xyz0[0]),\n xyz0[1] + f * (xyz1[1] - xyz0[1]),\n xyz0[2] + f * (xyz1[2] - xyz0[2]),\n 'oklab'\n );\n };\n\n // register interpolator\n interpolator$1.oklab = oklab;\n\n var interpolate_hsx = _hsx;\n\n var oklch = function (col1, col2, f) {\n return interpolate_hsx(col1, col2, f, 'oklch');\n };\n\n // register interpolator\n interpolator$1.oklch = oklch;\n\n var Color$6 = Color_1;\n var clip_rgb$1 = utils.clip_rgb;\n var pow$4 = Math.pow;\n var sqrt$1 = Math.sqrt;\n var PI$1 = Math.PI;\n var cos$2 = Math.cos;\n var sin$2 = Math.sin;\n var atan2$1 = Math.atan2;\n\n var average = function (colors, mode, weights) {\n if ( mode === void 0 ) mode='lrgb';\n if ( weights === void 0 ) weights=null;\n\n var l = colors.length;\n if (!weights) { weights = Array.from(new Array(l)).map(function () { return 1; }); }\n // normalize weights\n var k = l / weights.reduce(function(a, b) { return a + b; });\n weights.forEach(function (w,i) { weights[i] *= k; });\n // convert colors to Color objects\n colors = colors.map(function (c) { return new Color$6(c); });\n if (mode === 'lrgb') {\n return _average_lrgb(colors, weights)\n }\n var first = colors.shift();\n var xyz = first.get(mode);\n var cnt = [];\n var dx = 0;\n var dy = 0;\n // initial color\n for (var i=0; i= 360) { A$1 -= 360; }\n xyz[i$1] = A$1;\n } else {\n xyz[i$1] = xyz[i$1]/cnt[i$1];\n }\n }\n alpha /= l;\n return (new Color$6(xyz, mode)).alpha(alpha > 0.99999 ? 1 : alpha, true);\n };\n\n\n var _average_lrgb = function (colors, weights) {\n var l = colors.length;\n var xyz = [0,0,0,0];\n for (var i=0; i < colors.length; i++) {\n var col = colors[i];\n var f = weights[i] / l;\n var rgb = col._rgb;\n xyz[0] += pow$4(rgb[0],2) * f;\n xyz[1] += pow$4(rgb[1],2) * f;\n xyz[2] += pow$4(rgb[2],2) * f;\n xyz[3] += rgb[3] * f;\n }\n xyz[0] = sqrt$1(xyz[0]);\n xyz[1] = sqrt$1(xyz[1]);\n xyz[2] = sqrt$1(xyz[2]);\n if (xyz[3] > 0.9999999) { xyz[3] = 1; }\n return new Color$6(clip_rgb$1(xyz));\n };\n\n // minimal multi-purpose interface\n\n // @requires utils color analyze\n\n var chroma$4 = chroma_1;\n var type$2 = utils.type;\n\n var pow$3 = Math.pow;\n\n var scale$2 = function(colors) {\n\n // constructor\n var _mode = 'rgb';\n var _nacol = chroma$4('#ccc');\n var _spread = 0;\n // const _fixed = false;\n var _domain = [0, 1];\n var _pos = [];\n var _padding = [0,0];\n var _classes = false;\n var _colors = [];\n var _out = false;\n var _min = 0;\n var _max = 1;\n var _correctLightness = false;\n var _colorCache = {};\n var _useCache = true;\n var _gamma = 1;\n\n // private methods\n\n var setColors = function(colors) {\n colors = colors || ['#fff', '#000'];\n if (colors && type$2(colors) === 'string' && chroma$4.brewer &&\n chroma$4.brewer[colors.toLowerCase()]) {\n colors = chroma$4.brewer[colors.toLowerCase()];\n }\n if (type$2(colors) === 'array') {\n // handle single color\n if (colors.length === 1) {\n colors = [colors[0], colors[0]];\n }\n // make a copy of the colors\n colors = colors.slice(0);\n // convert to chroma classes\n for (var c=0; c= _classes[i]) {\n i++;\n }\n return i-1;\n }\n return 0;\n };\n\n var tMapLightness = function (t) { return t; };\n var tMapDomain = function (t) { return t; };\n\n // const classifyValue = function(value) {\n // let val = value;\n // if (_classes.length > 2) {\n // const n = _classes.length-1;\n // const i = getClass(value);\n // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class\n // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class\n // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n // }\n // return val;\n // };\n\n var getColor = function(val, bypassMap) {\n var col, t;\n if (bypassMap == null) { bypassMap = false; }\n if (isNaN(val) || (val === null)) { return _nacol; }\n if (!bypassMap) {\n if (_classes && (_classes.length > 2)) {\n // find the class\n var c = getClass(val);\n t = c / (_classes.length-2);\n } else if (_max !== _min) {\n // just interpolate between min/max\n t = (val - _min) / (_max - _min);\n } else {\n t = 1;\n }\n } else {\n t = val;\n }\n\n // domain map\n t = tMapDomain(t);\n\n if (!bypassMap) {\n t = tMapLightness(t); // lightness correction\n }\n\n if (_gamma !== 1) { t = pow$3(t, _gamma); }\n\n t = _padding[0] + (t * (1 - _padding[0] - _padding[1]));\n\n t = Math.min(1, Math.max(0, t));\n\n var k = Math.floor(t * 10000);\n\n if (_useCache && _colorCache[k]) {\n col = _colorCache[k];\n } else {\n if (type$2(_colors) === 'array') {\n //for i in [0.._pos.length-1]\n for (var i=0; i<_pos.length; i++) {\n var p = _pos[i];\n if (t <= p) {\n col = _colors[i];\n break;\n }\n if ((t >= p) && (i === (_pos.length-1))) {\n col = _colors[i];\n break;\n }\n if (t > p && t < _pos[i+1]) {\n t = (t-p)/(_pos[i+1]-p);\n col = chroma$4.interpolate(_colors[i], _colors[i+1], t, _mode);\n break;\n }\n }\n } else if (type$2(_colors) === 'function') {\n col = _colors(t);\n }\n if (_useCache) { _colorCache[k] = col; }\n }\n return col;\n };\n\n var resetCache = function () { return _colorCache = {}; };\n\n setColors(colors);\n\n // public interface\n\n var f = function(v) {\n var c = chroma$4(getColor(v));\n if (_out && c[_out]) { return c[_out](); } else { return c; }\n };\n\n f.classes = function(classes) {\n if (classes != null) {\n if (type$2(classes) === 'array') {\n _classes = classes;\n _domain = [classes[0], classes[classes.length-1]];\n } else {\n var d = chroma$4.analyze(_domain);\n if (classes === 0) {\n _classes = [d.min, d.max];\n } else {\n _classes = chroma$4.limits(d, 'e', classes);\n }\n }\n return f;\n }\n return _classes;\n };\n\n\n f.domain = function(domain) {\n if (!arguments.length) {\n return _domain;\n }\n _min = domain[0];\n _max = domain[domain.length-1];\n _pos = [];\n var k = _colors.length;\n if ((domain.length === k) && (_min !== _max)) {\n // update positions\n for (var i = 0, list = Array.from(domain); i < list.length; i += 1) {\n var d = list[i];\n\n _pos.push((d-_min) / (_max-_min));\n }\n } else {\n for (var c=0; c 2) {\n // set domain map\n var tOut = domain.map(function (d,i) { return i/(domain.length-1); });\n var tBreaks = domain.map(function (d) { return (d - _min) / (_max - _min); });\n if (!tBreaks.every(function (val, i) { return tOut[i] === val; })) {\n tMapDomain = function (t) {\n if (t <= 0 || t >= 1) { return t; }\n var i = 0;\n while (t >= tBreaks[i+1]) { i++; }\n var f = (t - tBreaks[i]) / (tBreaks[i+1] - tBreaks[i]);\n var out = tOut[i] + f * (tOut[i+1] - tOut[i]);\n return out;\n };\n }\n\n }\n }\n _domain = [_min, _max];\n return f;\n };\n\n f.mode = function(_m) {\n if (!arguments.length) {\n return _mode;\n }\n _mode = _m;\n resetCache();\n return f;\n };\n\n f.range = function(colors, _pos) {\n setColors(colors);\n return f;\n };\n\n f.out = function(_o) {\n _out = _o;\n return f;\n };\n\n f.spread = function(val) {\n if (!arguments.length) {\n return _spread;\n }\n _spread = val;\n return f;\n };\n\n f.correctLightness = function(v) {\n if (v == null) { v = true; }\n _correctLightness = v;\n resetCache();\n if (_correctLightness) {\n tMapLightness = function(t) {\n var L0 = getColor(0, true).lab()[0];\n var L1 = getColor(1, true).lab()[0];\n var pol = L0 > L1;\n var L_actual = getColor(t, true).lab()[0];\n var L_ideal = L0 + ((L1 - L0) * t);\n var L_diff = L_actual - L_ideal;\n var t0 = 0;\n var t1 = 1;\n var max_iter = 20;\n while ((Math.abs(L_diff) > 1e-2) && (max_iter-- > 0)) {\n (function() {\n if (pol) { L_diff *= -1; }\n if (L_diff < 0) {\n t0 = t;\n t += (t1 - t) * 0.5;\n } else {\n t1 = t;\n t += (t0 - t) * 0.5;\n }\n L_actual = getColor(t, true).lab()[0];\n return L_diff = L_actual - L_ideal;\n })();\n }\n return t;\n };\n } else {\n tMapLightness = function (t) { return t; };\n }\n return f;\n };\n\n f.padding = function(p) {\n if (p != null) {\n if (type$2(p) === 'number') {\n p = [p,p];\n }\n _padding = p;\n return f;\n } else {\n return _padding;\n }\n };\n\n f.colors = function(numColors, out) {\n // If no arguments are given, return the original colors that were provided\n if (arguments.length < 2) { out = 'hex'; }\n var result = [];\n\n if (arguments.length === 0) {\n result = _colors.slice(0);\n\n } else if (numColors === 1) {\n result = [f(0.5)];\n\n } else if (numColors > 1) {\n var dm = _domain[0];\n var dd = _domain[1] - dm;\n result = __range__(0, numColors, false).map(function (i) { return f( dm + ((i/(numColors-1)) * dd) ); });\n\n } else { // returns all colors based on the defined classes\n colors = [];\n var samples = [];\n if (_classes && (_classes.length > 2)) {\n for (var i = 1, end = _classes.length, asc = 1 <= end; asc ? i < end : i > end; asc ? i++ : i--) {\n samples.push((_classes[i-1]+_classes[i])*0.5);\n }\n } else {\n samples = _domain;\n }\n result = samples.map(function (v) { return f(v); });\n }\n\n if (chroma$4[out]) {\n result = result.map(function (c) { return c[out](); });\n }\n return result;\n };\n\n f.cache = function(c) {\n if (c != null) {\n _useCache = c;\n return f;\n } else {\n return _useCache;\n }\n };\n\n f.gamma = function(g) {\n if (g != null) {\n _gamma = g;\n return f;\n } else {\n return _gamma;\n }\n };\n\n f.nodata = function(d) {\n if (d != null) {\n _nacol = chroma$4(d);\n return f;\n } else {\n return _nacol;\n }\n };\n\n return f;\n };\n\n function __range__(left, right, inclusive) {\n var range = [];\n var ascending = left < right;\n var end = !inclusive ? right : ascending ? right + 1 : right - 1;\n for (var i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n range.push(i);\n }\n return range;\n }\n\n //\n // interpolates between a set of colors uzing a bezier spline\n //\n\n // @requires utils lab\n var Color$5 = Color_1;\n\n var scale$1 = scale$2;\n\n // nth row of the pascal triangle\n var binom_row = function(n) {\n var row = [1, 1];\n for (var i = 1; i < n; i++) {\n var newrow = [1];\n for (var j = 1; j <= row.length; j++) {\n newrow[j] = (row[j] || 0) + row[j - 1];\n }\n row = newrow;\n }\n return row;\n };\n\n var bezier = function(colors) {\n var assign, assign$1, assign$2;\n\n var I, lab0, lab1, lab2;\n colors = colors.map(function (c) { return new Color$5(c); });\n if (colors.length === 2) {\n // linear interpolation\n (assign = colors.map(function (c) { return c.lab(); }), lab0 = assign[0], lab1 = assign[1]);\n I = function(t) {\n var lab = ([0, 1, 2].map(function (i) { return lab0[i] + (t * (lab1[i] - lab0[i])); }));\n return new Color$5(lab, 'lab');\n };\n } else if (colors.length === 3) {\n // quadratic bezier interpolation\n (assign$1 = colors.map(function (c) { return c.lab(); }), lab0 = assign$1[0], lab1 = assign$1[1], lab2 = assign$1[2]);\n I = function(t) {\n var lab = ([0, 1, 2].map(function (i) { return ((1-t)*(1-t) * lab0[i]) + (2 * (1-t) * t * lab1[i]) + (t * t * lab2[i]); }));\n return new Color$5(lab, 'lab');\n };\n } else if (colors.length === 4) {\n // cubic bezier interpolation\n var lab3;\n (assign$2 = colors.map(function (c) { return c.lab(); }), lab0 = assign$2[0], lab1 = assign$2[1], lab2 = assign$2[2], lab3 = assign$2[3]);\n I = function(t) {\n var lab = ([0, 1, 2].map(function (i) { return ((1-t)*(1-t)*(1-t) * lab0[i]) + (3 * (1-t) * (1-t) * t * lab1[i]) + (3 * (1-t) * t * t * lab2[i]) + (t*t*t * lab3[i]); }));\n return new Color$5(lab, 'lab');\n };\n } else if (colors.length >= 5) {\n // general case (degree n bezier)\n var labs, row, n;\n labs = colors.map(function (c) { return c.lab(); });\n n = colors.length - 1;\n row = binom_row(n);\n I = function (t) {\n var u = 1 - t;\n var lab = ([0, 1, 2].map(function (i) { return labs.reduce(function (sum, el, j) { return (sum + row[j] * Math.pow( u, (n - j) ) * Math.pow( t, j ) * el[i]); }, 0); }));\n return new Color$5(lab, 'lab');\n };\n } else {\n throw new RangeError(\"No point in running bezier with only one color.\")\n }\n return I;\n };\n\n var bezier_1 = function (colors) {\n var f = bezier(colors);\n f.scale = function () { return scale$1(f); };\n return f;\n };\n\n /*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\n var chroma$3 = chroma_1;\n\n var blend = function (bottom, top, mode) {\n if (!blend[mode]) {\n throw new Error('unknown blend mode ' + mode);\n }\n return blend[mode](bottom, top);\n };\n\n var blend_f = function (f) { return function (bottom,top) {\n var c0 = chroma$3(top).rgb();\n var c1 = chroma$3(bottom).rgb();\n return chroma$3.rgb(f(c0, c1));\n }; };\n\n var each = function (f) { return function (c0, c1) {\n var out = [];\n out[0] = f(c0[0], c1[0]);\n out[1] = f(c0[1], c1[1]);\n out[2] = f(c0[2], c1[2]);\n return out;\n }; };\n\n var normal = function (a) { return a; };\n var multiply = function (a,b) { return a * b / 255; };\n var darken = function (a,b) { return a > b ? b : a; };\n var lighten = function (a,b) { return a > b ? a : b; };\n var screen = function (a,b) { return 255 * (1 - (1-a/255) * (1-b/255)); };\n var overlay = function (a,b) { return b < 128 ? 2 * a * b / 255 : 255 * (1 - 2 * (1 - a / 255 ) * ( 1 - b / 255 )); };\n var burn = function (a,b) { return 255 * (1 - (1 - b / 255) / (a/255)); };\n var dodge = function (a,b) {\n if (a === 255) { return 255; }\n a = 255 * (b / 255) / (1 - a / 255);\n return a > 255 ? 255 : a\n };\n\n // # add = (a,b) ->\n // # if (a + b > 255) then 255 else a + b\n\n blend.normal = blend_f(each(normal));\n blend.multiply = blend_f(each(multiply));\n blend.screen = blend_f(each(screen));\n blend.overlay = blend_f(each(overlay));\n blend.darken = blend_f(each(darken));\n blend.lighten = blend_f(each(lighten));\n blend.dodge = blend_f(each(dodge));\n blend.burn = blend_f(each(burn));\n // blend.add = blend_f(each(add));\n\n var blend_1 = blend;\n\n // cubehelix interpolation\n // based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n // http://astron-soc.in/bulletin/11June/289392011.pdf\n\n var type$1 = utils.type;\n var clip_rgb = utils.clip_rgb;\n var TWOPI = utils.TWOPI;\n var pow$2 = Math.pow;\n var sin$1 = Math.sin;\n var cos$1 = Math.cos;\n var chroma$2 = chroma_1;\n\n var cubehelix = function(start, rotations, hue, gamma, lightness) {\n if ( start === void 0 ) start=300;\n if ( rotations === void 0 ) rotations=-1.5;\n if ( hue === void 0 ) hue=1;\n if ( gamma === void 0 ) gamma=1;\n if ( lightness === void 0 ) lightness=[0,1];\n\n var dh = 0, dl;\n if (type$1(lightness) === 'array') {\n dl = lightness[1] - lightness[0];\n } else {\n dl = 0;\n lightness = [lightness, lightness];\n }\n\n var f = function(fract) {\n var a = TWOPI * (((start+120)/360) + (rotations * fract));\n var l = pow$2(lightness[0] + (dl * fract), gamma);\n var h = dh !== 0 ? hue[0] + (fract * dh) : hue;\n var amp = (h * l * (1-l)) / 2;\n var cos_a = cos$1(a);\n var sin_a = sin$1(a);\n var r = l + (amp * ((-0.14861 * cos_a) + (1.78277* sin_a)));\n var g = l + (amp * ((-0.29227 * cos_a) - (0.90649* sin_a)));\n var b = l + (amp * (+1.97294 * cos_a));\n return chroma$2(clip_rgb([r*255,g*255,b*255,1]));\n };\n\n f.start = function(s) {\n if ((s == null)) { return start; }\n start = s;\n return f;\n };\n\n f.rotations = function(r) {\n if ((r == null)) { return rotations; }\n rotations = r;\n return f;\n };\n\n f.gamma = function(g) {\n if ((g == null)) { return gamma; }\n gamma = g;\n return f;\n };\n\n f.hue = function(h) {\n if ((h == null)) { return hue; }\n hue = h;\n if (type$1(hue) === 'array') {\n dh = hue[1] - hue[0];\n if (dh === 0) { hue = hue[1]; }\n } else {\n dh = 0;\n }\n return f;\n };\n\n f.lightness = function(h) {\n if ((h == null)) { return lightness; }\n if (type$1(h) === 'array') {\n lightness = h;\n dl = h[1] - h[0];\n } else {\n lightness = [h,h];\n dl = 0;\n }\n return f;\n };\n\n f.scale = function () { return chroma$2.scale(f); };\n\n f.hue(hue);\n\n return f;\n };\n\n var Color$4 = Color_1;\n var digits = '0123456789abcdef';\n\n var floor$1 = Math.floor;\n var random = Math.random;\n\n var random_1 = function () {\n var code = '#';\n for (var i=0; i<6; i++) {\n code += digits.charAt(floor$1(random() * 16));\n }\n return new Color$4(code, 'hex');\n };\n\n var type = type$p;\n var log = Math.log;\n var pow$1 = Math.pow;\n var floor = Math.floor;\n var abs$1 = Math.abs;\n\n\n var analyze = function (data, key) {\n if ( key === void 0 ) key=null;\n\n var r = {\n min: Number.MAX_VALUE,\n max: Number.MAX_VALUE*-1,\n sum: 0,\n values: [],\n count: 0\n };\n if (type(data) === 'object') {\n data = Object.values(data);\n }\n data.forEach(function (val) {\n if (key && type(val) === 'object') { val = val[key]; }\n if (val !== undefined && val !== null && !isNaN(val)) {\n r.values.push(val);\n r.sum += val;\n if (val < r.min) { r.min = val; }\n if (val > r.max) { r.max = val; }\n r.count += 1;\n }\n });\n\n r.domain = [r.min, r.max];\n\n r.limits = function (mode, num) { return limits(r, mode, num); };\n\n return r;\n };\n\n\n var limits = function (data, mode, num) {\n if ( mode === void 0 ) mode='equal';\n if ( num === void 0 ) num=7;\n\n if (type(data) == 'array') {\n data = analyze(data);\n }\n var min = data.min;\n var max = data.max;\n var values = data.values.sort(function (a,b) { return a-b; });\n\n if (num === 1) { return [min,max]; }\n\n var limits = [];\n\n if (mode.substr(0,1) === 'c') { // continuous\n limits.push(min);\n limits.push(max);\n }\n\n if (mode.substr(0,1) === 'e') { // equal interval\n limits.push(min);\n for (var i=1; i 0');\n }\n var min_log = Math.LOG10E * log(min);\n var max_log = Math.LOG10E * log(max);\n limits.push(min);\n for (var i$1=1; i$1 pb\n var pr = p - pb;\n limits.push((values[pb]*(1-pr)) + (values[pb+1]*pr));\n }\n }\n limits.push(max);\n\n }\n\n else if (mode.substr(0,1) === 'k') { // k-means clustering\n /*\n implementation based on\n http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n simplified for 1-d input values\n */\n var cluster;\n var n = values.length;\n var assignments = new Array(n);\n var clusterSizes = new Array(num);\n var repeat = true;\n var nb_iters = 0;\n var centroids = null;\n\n // get seed values\n centroids = [];\n centroids.push(min);\n for (var i$3=1; i$3 200) {\n repeat = false;\n }\n }\n\n // finished k-means clustering\n // the next part is borrowed from gabrielflor.it\n var kClusters = {};\n for (var j$5=0; j$5 l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n };\n\n var Color$2 = Color_1;\n var sqrt = Math.sqrt;\n var pow = Math.pow;\n var min = Math.min;\n var max = Math.max;\n var atan2 = Math.atan2;\n var abs = Math.abs;\n var cos = Math.cos;\n var sin = Math.sin;\n var exp = Math.exp;\n var PI = Math.PI;\n\n var deltaE = function(a, b, Kl, Kc, Kh) {\n if ( Kl === void 0 ) Kl=1;\n if ( Kc === void 0 ) Kc=1;\n if ( Kh === void 0 ) Kh=1;\n\n // Delta E (CIE 2000)\n // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n var rad2deg = function(rad) {\n return 360 * rad / (2 * PI);\n };\n var deg2rad = function(deg) {\n return (2 * PI * deg) / 360;\n };\n a = new Color$2(a);\n b = new Color$2(b);\n var ref = Array.from(a.lab());\n var L1 = ref[0];\n var a1 = ref[1];\n var b1 = ref[2];\n var ref$1 = Array.from(b.lab());\n var L2 = ref$1[0];\n var a2 = ref$1[1];\n var b2 = ref$1[2];\n var avgL = (L1 + L2)/2;\n var C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n var C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n var avgC = (C1 + C2)/2;\n var G = 0.5*(1-sqrt(pow(avgC, 7)/(pow(avgC, 7) + pow(25, 7))));\n var a1p = a1*(1+G);\n var a2p = a2*(1+G);\n var C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n var C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n var avgCp = (C1p + C2p)/2;\n var arctan1 = rad2deg(atan2(b1, a1p));\n var arctan2 = rad2deg(atan2(b2, a2p));\n var h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n var h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n var avgHp = abs(h1p - h2p) > 180 ? (h1p + h2p + 360)/2 : (h1p + h2p)/2;\n var T = 1 - 0.17*cos(deg2rad(avgHp - 30)) + 0.24*cos(deg2rad(2*avgHp)) + 0.32*cos(deg2rad(3*avgHp + 6)) - 0.2*cos(deg2rad(4*avgHp - 63));\n var deltaHp = h2p - h1p;\n deltaHp = abs(deltaHp) <= 180 ? deltaHp : h2p <= h1p ? deltaHp + 360 : deltaHp - 360;\n deltaHp = 2*sqrt(C1p*C2p)*sin(deg2rad(deltaHp)/2);\n var deltaL = L2 - L1;\n var deltaCp = C2p - C1p; \n var sl = 1 + (0.015*pow(avgL - 50, 2))/sqrt(20 + pow(avgL - 50, 2));\n var sc = 1 + 0.045*avgCp;\n var sh = 1 + 0.015*avgCp*T;\n var deltaTheta = 30*exp(-pow((avgHp - 275)/25, 2));\n var Rc = 2*sqrt(pow(avgCp, 7)/(pow(avgCp, 7) + pow(25, 7)));\n var Rt = -Rc*sin(2*deg2rad(deltaTheta));\n var result = sqrt(pow(deltaL/(Kl*sl), 2) + pow(deltaCp/(Kc*sc), 2) + pow(deltaHp/(Kh*sh), 2) + Rt*(deltaCp/(Kc*sc))*(deltaHp/(Kh*sh)));\n return max(0, min(100, result));\n };\n\n var Color$1 = Color_1;\n\n // simple Euclidean distance\n var distance = function(a, b, mode) {\n if ( mode === void 0 ) mode='lab';\n\n // Delta E (CIE 1976)\n // see http://www.brucelindbloom.com/index.html?Equations.html\n a = new Color$1(a);\n b = new Color$1(b);\n var l1 = a.get(mode);\n var l2 = b.get(mode);\n var sum_sq = 0;\n for (var i in l1) {\n var d = (l1[i] || 0) - (l2[i] || 0);\n sum_sq += d*d;\n }\n return Math.sqrt(sum_sq);\n };\n\n var Color = Color_1;\n\n var valid = function () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n try {\n new (Function.prototype.bind.apply( Color, [ null ].concat( args) ));\n return true;\n } catch (e) {\n return false;\n }\n };\n\n // some pre-defined color scales:\n var chroma$1 = chroma_1;\n\n var scale = scale$2;\n\n var scales = {\n \tcool: function cool() { return scale([chroma$1.hsl(180,1,.9), chroma$1.hsl(250,.7,.4)]) },\n \thot: function hot() { return scale(['#000','#f00','#ff0','#fff']).mode('rgb') }\n };\n\n /**\n ColorBrewer colors for chroma.js\n\n Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n Pennsylvania State University.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software distributed\n under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n CONDITIONS OF ANY KIND, either express or implied. See the License for the\n specific language governing permissions and limitations under the License.\n */\n\n var colorbrewer = {\n // sequential\n OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n // diverging\n\n Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n // qualitative\n\n Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2'],\n };\n\n // add lowercase aliases for case-insensitive matches\n for (var i = 0, list = Object.keys(colorbrewer); i < list.length; i += 1) {\n var key = list[i];\n\n colorbrewer[key.toLowerCase()] = colorbrewer[key];\n }\n\n var colorbrewer_1 = colorbrewer;\n\n var chroma = chroma_1;\n\n // feel free to comment out anything to rollup\n // a smaller chroma.js built\n\n // io --> convert colors\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // operators --> modify existing Colors\n\n\n\n\n\n\n\n\n\n\n // interpolators\n\n\n\n\n\n\n\n\n\n\n\n\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n\n // scale\n chroma.scales = scales;\n\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n\n var chroma_js = chroma;\n\n return chroma_js;\n\n}));\n","/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.17\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tminDistance = this.minDistance,\n\t\t\tmaxDistance = this.maxDistance,\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(minDistance, maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0],\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]* 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","\"use strict\";","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // operators --> modify existing Colors\n\n\n\n\n\n\n\n\n\n\n // interpolators\n\n\n\n\n\n\n\n\n\n\n\n\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n\n // scale\n chroma.scales = scales;\n\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n\n var chroma_js = chroma;\n\n return chroma_js;\n\n}));\n","/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.17\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tminDistance = this.minDistance,\n\t\t\tmaxDistance = this.maxDistance,\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(minDistance, maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0],\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]* 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","\"use strict\";","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken();\n }\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.incDec, 2);\n }\n if (next === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.plusMin, 1);\n};\n$ebef8a20963d596b$var$pp.readToken_lt_gt = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.bitShift, size);\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n // operators --> modify existing Colors\n // interpolators\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n // scale\n chroma.scales = scales;\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n var chroma_js = chroma;\n return chroma_js;\n});\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nconst $3e2f0fa58ba587b4$var$location = window.location;\nconst $3e2f0fa58ba587b4$export$281ad3752a540efe = new URLSearchParams($3e2f0fa58ba587b4$var$location.search);\nconst $3e2f0fa58ba587b4$export$128fa18b7194ef = new URL($3e2f0fa58ba587b4$var$location);\nconst $3e2f0fa58ba587b4$export$1bb10639a2cd4297 = $90706cc60453e267$export$185802fd694ee1f5({\n objectHash: $3e2f0fa58ba587b4$export$9cb4719e2e525b7a\n});\nfunction $3e2f0fa58ba587b4$export$d2cf6cd1dc7067d3(className, ...elements) {\n elements.forEach((element)=>element.classList.add(className));\n}\nfunction $3e2f0fa58ba587b4$export$1a23559e655dacdd(original, degrees) {\n const result = original + degrees;\n if (result < 0) return 360 + result;\n else if (result > 360) return result - 360;\n return result;\n}\nfunction $3e2f0fa58ba587b4$export$bac4c4504d574f(direction, amount) {\n return (direction + amount + 6) % 6;\n}\nfunction $3e2f0fa58ba587b4$export$afb15ede80c42aab(string) {\n const binString = window.atob($3e2f0fa58ba587b4$var$base64unescape(string));\n // noinspection JSCheckFunctionSignatures\n return new TextDecoder().decode((0, $a39eeb69bf620de6$export$2e2bcd8739ae039).inflate(Uint8Array.from(binString, (c)=>c.codePointAt(0))));\n}\nwindow.base64decode = $3e2f0fa58ba587b4$export$afb15ede80c42aab;\nfunction $3e2f0fa58ba587b4$export$4e633de97d65d1c8(string) {\n return $3e2f0fa58ba587b4$var$base64escape(window.btoa(String.fromCodePoint(...(0, $a39eeb69bf620de6$export$2e2bcd8739ae039).deflate(new TextEncoder().encode(string)))));\n}\nwindow.base64encode = $3e2f0fa58ba587b4$export$4e633de97d65d1c8;\nfunction $3e2f0fa58ba587b4$var$base64escape(string) {\n // https://en.wikipedia.org/wiki/Base64#URL_applications\n return string.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction $3e2f0fa58ba587b4$var$base64unescape(string) {\n return (string + \"===\".slice((string.length + 3) % 4)).replace(/-/g, \"+\").replace(/_/g, \"/\");\n}\nfunction $3e2f0fa58ba587b4$export$9a00dee1beb8f576(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction $3e2f0fa58ba587b4$export$6e5538615c060df7(...args) {\n return args.findLast((arg)=>arg !== undefined);\n}\nfunction $3e2f0fa58ba587b4$export$61fc7d43ac8f84b0(func, delay = 500) {\n let timeout;\n return (...args)=>{\n clearTimeout(timeout);\n timeout = setTimeout(()=>{\n func(...args);\n }, delay);\n };\n}\nfunction $3e2f0fa58ba587b4$export$9cb4719e2e525b7a(x, y) {\n return typeof x === \"object\" && typeof y === \"object\" ? Object.keys(x).length === Object.keys(y).length && Object.keys(x).every((key)=>{\n const xv = x[key];\n const yv = y[key];\n return Object.hasOwn(y, key) && (typeof xv?.equals === \"function\" ? xv.equals(yv) : $3e2f0fa58ba587b4$export$9cb4719e2e525b7a(xv, yv));\n }) : x === y;\n}\nfunction $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1(event, detail = null) {\n document.dispatchEvent(new CustomEvent(event, {\n detail: detail\n }));\n}\nfunction $3e2f0fa58ba587b4$export$c23f9d3341b5fd07(pointA, pointB, maxDiff = 0) {\n return pointA && pointB && pointA.round().subtract(pointB.round()).length <= maxDiff;\n}\nfunction $3e2f0fa58ba587b4$export$836ff99bad0a09da(triangle) {\n const segments = triangle.segments;\n const vertex = segments[0].point;\n const opposite = segments[1].point.subtract(segments[1].point.subtract(segments[2].point).divide(2));\n return vertex.add(opposite.subtract(vertex).multiply(2 / 3));\n}\nfunction $3e2f0fa58ba587b4$export$3cb91a81090b9eee(color) {\n const span = document.createElement(\"span\");\n span.classList.add(\"beam\");\n span.style.backgroundColor = color;\n span.title = color;\n return span;\n}\nfunction $3e2f0fa58ba587b4$export$6d3741128bd5bb7d(colors) {\n if (!colors.length) return [];\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(colors).hex();\n const elements = [];\n if (colors.some((other)=>other !== color)) {\n const maxColorIndex = colors.length - 1;\n colors.forEach((color, index)=>{\n elements.push($3e2f0fa58ba587b4$export$3cb91a81090b9eee(color));\n if (index < maxColorIndex) {\n const plus = document.createElement(\"span\");\n plus.classList.add(\"text\");\n plus.textContent = \"+\";\n elements.push(plus);\n }\n });\n const equals = document.createElement(\"span\");\n equals.classList.add(\"text\");\n equals.textContent = \"=\";\n elements.push(equals);\n }\n elements.push($3e2f0fa58ba587b4$export$3cb91a81090b9eee(color));\n return elements;\n}\nfunction $3e2f0fa58ba587b4$export$79376507b09a66f(point) {\n return (a, b)=>a.subtract(point).length - b.subtract(point).length;\n}\nfunction $3e2f0fa58ba587b4$export$f6292fcace2a1886(name, title) {\n const span = document.createElement(\"span\");\n span.classList.add(\"icon\", \"material-symbols-outlined\");\n span.textContent = name;\n span.title = title ?? $3e2f0fa58ba587b4$export$9a00dee1beb8f576(name);\n return span;\n}\nfunction $3e2f0fa58ba587b4$export$78da85ac75754159(pointA, pointB, length = (length)=>length / 2) {\n const vector = pointA.subtract(pointB);\n vector.length = typeof length === \"function\" ? length(vector.length) : length;\n return pointA.subtract(vector);\n}\nfunction $3e2f0fa58ba587b4$export$bd58da2e19cd17da(point, length, direction) {\n const vector = new (0, $hvNIE.Point)(0, 0);\n vector.length = length;\n vector.angle = $3e2f0fa58ba587b4$export$c43d7a950587702b(direction) * 60;\n return point.add(vector);\n}\nfunction $3e2f0fa58ba587b4$export$35d6177dfa7903b5(direction) {\n return direction + (direction >= 3 ? -3 : 3);\n}\nfunction $3e2f0fa58ba587b4$export$c43d7a950587702b(direction, toPaperJs = true) {\n direction = direction + (toPaperJs ? -1 : 1) * 2;\n if (direction < 0) return direction + 6;\n else if (direction > 5) return direction - 6;\n return direction;\n}\nfunction $3e2f0fa58ba587b4$export$1690e12b840569b9(line, point) {\n const [a, b] = line;\n const c = point;\n return Math.sign((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));\n}\nfunction $3e2f0fa58ba587b4$export$17a5d53cd2e4de6c(beamDirection, reflectorDirection) {\n // Have to convert to PaperJS directions on the way in\n const beamAngle = $3e2f0fa58ba587b4$export$c43d7a950587702b(beamDirection, true) * 60;\n const reflectorAngle = reflectorDirection * 30;\n const reflectedBeamAngle = (reflectorAngle - beamAngle) * 2;\n // And convert back to our normal directions on the way out\n return $3e2f0fa58ba587b4$export$c43d7a950587702b($3e2f0fa58ba587b4$export$1a23559e655dacdd(beamAngle, reflectedBeamAngle) / 60 % 6, false);\n}\nfunction $3e2f0fa58ba587b4$export$43941667eccc070(text) {\n const span = document.createElement(\"span\");\n span.classList.add(\"text\");\n span.textContent = text.toString();\n return span;\n}\nfunction $3e2f0fa58ba587b4$export$8793edee2d425525(value) {\n if (value) return value;\n}\nfunction $3e2f0fa58ba587b4$export$c2255604a80b4506(className, ...elements) {\n elements.forEach((element)=>element.classList.remove(className));\n}\nfunction $3e2f0fa58ba587b4$export$abb49451cc8201c(direction, amount) {\n return $3e2f0fa58ba587b4$export$bac4c4504d574f(direction, amount * -1);\n}\nfunction $3e2f0fa58ba587b4$export$abf0e2545164275f(array, key) {\n const values = array.map((value)=>value[key]);\n return array.filter((value, index)=>!values.includes(value[key], index + 1));\n}\n\n\nconst $f1fc5431671d3192$var$console = window.console = window.console || {\n debug: function() {}\n};\nconst $f1fc5431671d3192$var$consoleDebug = $f1fc5431671d3192$var$console.debug;\nfunction $f1fc5431671d3192$export$1c9f709888824e05(debug) {\n $f1fc5431671d3192$var$console.debug = debug ? $f1fc5431671d3192$var$consoleDebug : function() {};\n}\n// Silence debug logging by default\n$f1fc5431671d3192$export$1c9f709888824e05((0, $3e2f0fa58ba587b4$export$281ad3752a540efe).has(\"debug\") ?? false);\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nclass $ca914ef976dd611b$export$2e382909194b1aab {\n constructor(r, c){\n this.coordinates = [\n r,\n c\n ];\n this.r = r;\n this.c = c;\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static toAxialCoordinates(offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2;\n return new (0, $fe48dca2d228a457$export$c56d3ccff2456440)(q, offset.r);\n }\n}\n\n\nclass $fe48dca2d228a457$export$c56d3ccff2456440 {\n constructor(q, r, s){\n if (!s) s = -q - r;\n this.coordinates = [\n q,\n r,\n s\n ];\n this.q = q;\n this.r = r;\n this.s = s;\n }\n add(other) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.add(this, other);\n }\n equals(other) {\n return this.q === other.q && this.r === other.r && this.s === other.s;\n }\n isNeighbor(other) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.isNeighbor(this, other);\n }\n neighbor(direction) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.neighbor(this, direction);\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static add(a, b) {\n return new $fe48dca2d228a457$export$c56d3ccff2456440(a.q + b.q, a.r + b.r);\n }\n static direction(direction) {\n if (direction === 0) direction = 6;\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return $fe48dca2d228a457$export$c56d3ccff2456440.directions[6 - direction];\n }\n static directions = [\n new $fe48dca2d228a457$export$c56d3ccff2456440(1, 0),\n new $fe48dca2d228a457$export$c56d3ccff2456440(1, -1),\n new $fe48dca2d228a457$export$c56d3ccff2456440(0, -1),\n new $fe48dca2d228a457$export$c56d3ccff2456440(-1, 0),\n new $fe48dca2d228a457$export$c56d3ccff2456440(-1, 1),\n new $fe48dca2d228a457$export$c56d3ccff2456440(0, 1)\n ];\n static isNeighbor(a, b) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.directions.map((direction)=>$fe48dca2d228a457$export$c56d3ccff2456440.add(a, direction)).some((neighbor)=>neighbor.equals(b));\n }\n static neighbor(start, direction) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.add(start, $fe48dca2d228a457$export$c56d3ccff2456440.direction(direction));\n }\n static toOffsetCoordinates(axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2;\n return new (0, $ca914ef976dd611b$export$2e382909194b1aab)(c, axial.r);\n }\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nclass $ca3880ece69ea231$export$654f18991713c8c4 {\n #state = {};\n constructor(state){\n this.setState(state);\n }\n getState() {\n return structuredClone(this.#state);\n }\n setState(state) {\n this.#state = structuredClone(state);\n }\n updateState(updater, dispatchEvent = true) {\n updater(this.#state);\n if (dispatchEvent) (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($ca3880ece69ea231$export$654f18991713c8c4.Events.Update, {\n object: this\n });\n return this.getState();\n }\n static Events = Object.freeze({\n Update: \"state-update\"\n });\n}\n\n\nclass $4b738c6f333de3e1$export$6d08773d2e66f8f2 extends (0, $ca3880ece69ea231$export$654f18991713c8c4) {\n center;\n data;\n group;\n id = $4b738c6f333de3e1$export$6d08773d2e66f8f2.uniqueId++;\n // Whether the item can be clicked on\n locked;\n parent;\n sortOrder = 100;\n type;\n constructor(parent, state, configuration){\n super(state);\n this.type = state?.type || configuration?.type;\n this.data = Object.assign({\n id: this.id,\n type: this.type\n }, configuration?.data || {});\n this.locked = configuration?.locked !== false;\n if (parent) this.center = parent.center;\n this.parent = parent;\n this.group = new (0, $hvNIE.Group)({\n data: this.data,\n locked: this.locked\n });\n }\n equals(otherItem) {\n return otherItem instanceof $4b738c6f333de3e1$export$6d08773d2e66f8f2 && this.id === otherItem.id;\n }\n getColorElements() {\n return [];\n }\n getCompoundPath() {\n return new (0, $hvNIE.CompoundPath)({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({\n insert: false\n }).children.filter((child)=>child.data.collidable !== false)\n });\n }\n getIndex() {\n return this.group.index;\n }\n getLayer() {\n return this.group.parent;\n }\n onTap() {}\n onCollision({ collisionStep: collisionStep }) {\n return collisionStep;\n }\n onDeselected() {}\n onInitialization() {}\n onSelected() {}\n remove() {\n this.group.remove();\n }\n toString() {\n return `[${this.type}:${this.id}]`;\n }\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"beam\",\n \"collision\",\n \"filter\",\n \"mask\",\n \"portal\",\n \"reflector\",\n \"terminus\",\n \"tile\",\n \"wall\"\n ].map((type)=>[\n type,\n (0, $3e2f0fa58ba587b4$export$9a00dee1beb8f576)(type)\n ])));\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0;\n}\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\nclass $8ee30938c07750df$export$b20b719ec758a20f {\n #events = [];\n #options = {\n element: document\n };\n constructor(options = {}){\n this.#options = Object.assign(this.#options, options);\n }\n add(events, options = {}) {\n this.#events = this.#events.concat(events.map((event)=>{\n event = Object.assign({}, this.#options, options, event);\n if (!event.type) throw new Error(\"Event type is required\");\n if (event.context) event.handler = event.handler.bind(event.context);\n event.element.addEventListener(event.type, event.handler, event.options);\n return event;\n }));\n }\n remove() {\n this.#events.forEach((event)=>event.element.removeEventListener(event.type, event.handler));\n this.#events = [];\n }\n}\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nclass $97686966a3fec53f$export$94affb487e701bf2 {\n #cache = {};\n #hasKeys;\n #keys;\n constructor(keys = []){\n this.#keys = keys;\n this.#hasKeys = keys.length !== 0;\n keys.forEach((key)=>{\n this.#cache[key] = new $97686966a3fec53f$export$94affb487e701bf2();\n });\n }\n set(key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) throw new Error(`Invalid key: ${key}`);\n this.#cache[key] = item;\n }\n get(key) {\n return key === undefined ? this.#cache : this.#cache[key];\n }\n keys(key) {\n return Object.keys(this.#get(key));\n }\n length(key) {\n return this.keys(key).length;\n }\n unset(key) {\n delete this.#cache[key];\n }\n values(key) {\n return Object.values(this.#get(key));\n }\n #get(key) {\n const value = this.get(key);\n return value instanceof $97686966a3fec53f$export$94affb487e701bf2 ? value.get() : value;\n }\n}\n\n\n\nclass $4f41d74d72b0a295$export$b0d759d807f751d4 {\n #bounds;\n #cache = new (0, $97686966a3fec53f$export$94affb487e701bf2)(Object.values($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys));\n #element;\n #eventListener = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #offset;\n constructor(element){\n this.#bounds = element.getBoundingClientRect();\n this.#element = element;\n this.#offset = new (0, $hvNIE.Point)(this.#bounds.left, this.#bounds.top);\n this.#eventListener.add([\n {\n type: \"pointercancel\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointermove\",\n handler: this.onPointerMove\n },\n {\n type: \"pointerout\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n },\n {\n type: \"wheel\",\n handler: this.onMouseWheel,\n options: {\n passive: false\n }\n }\n ], {\n element: element\n });\n }\n onMouseWheel(event) {\n event.preventDefault();\n this.#zoom(new (0, $hvNIE.Point)(event.offsetX, event.offsetY), event.deltaY, 1.05);\n }\n onPan(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewToProject($4f41d74d72b0a295$export$b0d759d807f751d4.point(event));\n const pan = this.#getGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pan);\n if (!pan) {\n this.#setGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pan, {\n from: point\n });\n return;\n }\n const center = pan.from.subtract(point).add((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center);\n // Allow a little wiggle room to prevent panning on tap\n if ((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains(\"grab\")) document.body.classList.add(\"grab\");\n // Center on the cursor\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center = center;\n }\n }\n onPinch(events) {\n const pointer0 = events[0];\n const pointer1 = events[1];\n const point0 = $4f41d74d72b0a295$export$b0d759d807f751d4.point(pointer0);\n const point1 = $4f41d74d72b0a295$export$b0d759d807f751d4.point(pointer1);\n const distance = point0.getDistance(point1);\n const pinch = this.#getGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pinch);\n if (!pinch) {\n this.#setGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pinch, {\n distance: distance\n });\n return;\n }\n const center = point0.add(point1).divide(2).subtract(this.#offset);\n const scale = distance / pinch.distance;\n const delta = (pinch.distance - distance) * scale;\n this.#zoom(center, delta, 1.01);\n pinch.distance = distance;\n }\n onPointerDown(event) {\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).set(event.pointerId, event);\n }\n onPointerMove(event) {\n const down = this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) // Ignore events until there is a pointer down event\n return;\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = $4f41d74d72b0a295$export$b0d759d807f751d4.point(event).subtract($4f41d74d72b0a295$export$b0d759d807f751d4.point(down)).length;\n if (diff > 1) {\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).set(event.pointerId, event);\n const events = this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).values();\n if (events.length === 2) this.onPinch(events);\n else this.onPan(event);\n }\n }\n onPointerUp(event) {\n const down = this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) return;\n if (this.#cache.length($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down) === 1 && !this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).get(event.pointerId)) this.onTap(down);\n document.body.classList.remove(\"grab\");\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).unset(event.pointerId);\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).unset(event.pointerId);\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).unset($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pan);\n if (this.#cache.length($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move) < 2) this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).unset($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pinch);\n }\n onTap(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewToProject($4f41d74d72b0a295$export$b0d759d807f751d4.point(event).subtract(this.#offset));\n this.#element.dispatchEvent(new CustomEvent($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Tap, {\n detail: {\n event: event,\n point: point\n }\n }));\n }\n #getGesture(key) {\n return this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).get(key);\n }\n #setGesture(key, value) {\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).set(key, value);\n }\n #zoom(point, delta, factor) {\n const zoom = Math.max(Math.min(delta < 0 ? (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom * factor : (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom / factor, $4f41d74d72b0a295$export$b0d759d807f751d4.maxZoom), $4f41d74d72b0a295$export$b0d759d807f751d4.minZoom);\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewToProject(point);\n const touchOffset = touchPoint.subtract((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center);\n // Adjust center towards cursor location\n const zoomOffset = touchPoint.subtract(touchOffset.multiply((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom / zoom)).subtract((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center);\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom = zoom;\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center.add(zoomOffset);\n }\n static point(event) {\n return new (0, $hvNIE.Point)(event.clientX, event.clientY);\n }\n static CacheKeys = Object.freeze({\n Down: \"down\",\n Move: \"move\",\n Gesture: \"gesture\"\n });\n static GestureKeys = Object.freeze({\n Pan: \"pan\",\n Pinch: \"pinch\",\n Tap: \"tap\"\n });\n static maxZoom = 2;\n static minZoom = 0.5;\n static vibratePattern = 25;\n}\n\n\nconst $890ebaa4ee6ae241$var$modifiersImmutable = document.getElementById(\"modifiers-immutable\");\nconst $890ebaa4ee6ae241$var$modifiersMutable = document.getElementById(\"modifiers-mutable\");\nconst $890ebaa4ee6ae241$var$navigator = window.navigator;\nlet $890ebaa4ee6ae241$var$uniqueId = 0;\nclass $890ebaa4ee6ae241$export$5acd5e6efc9671b7 extends (0, $ca3880ece69ea231$export$654f18991713c8c4) {\n #container;\n #down = false;\n #eventListener = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #mask;\n #selectionTime = 500;\n #timeoutId;\n configuration;\n element;\n disabled = false;\n id = $890ebaa4ee6ae241$var$uniqueId++;\n immutable = false;\n name;\n selected = false;\n tile;\n title;\n type;\n constructor(tile, state){\n super(state);\n this.tile = tile;\n this.type = state.type;\n }\n /**\n * Attach the modifier to the DOM and add listeners.\n */ attach() {\n const li = this.#container = document.createElement(\"li\");\n li.classList.add([\n \"modifier\",\n this.type.toLowerCase()\n ].join(\"-\"));\n if (this.immutable) this.disabled = true;\n const span = this.element = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\", \"fill\");\n li.append(span);\n this.update();\n this.#eventListener.add([\n {\n type: \"deselected\",\n handler: this.onDeselected\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n }\n ], {\n element: li\n });\n this.immutable ? $890ebaa4ee6ae241$var$modifiersImmutable.append(li) : $890ebaa4ee6ae241$var$modifiersMutable.append(li);\n }\n /**\n * Remove listeners and the modifier from the DOM.\n */ detach() {\n if (!this.#container) return;\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.deselect();\n this.#eventListener.remove();\n this.#container.remove();\n this.selected = false;\n this.element = undefined;\n this.#container = undefined;\n }\n dispatchEvent(event, detail) {\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)(event, Object.assign({}, detail || {}, {\n modifier: this,\n tile: this.tile\n }));\n }\n equals(other) {\n return other instanceof $890ebaa4ee6ae241$export$5acd5e6efc9671b7 && this.id === other.id;\n }\n move(tile) {\n this.remove();\n tile.addModifier(this);\n this.tile = tile;\n }\n moveFilter(tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier)=>modifier.type === $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.immutable);\n }\n onDeselected() {\n this.update({\n selected: false\n });\n this.tile.afterModify();\n this.dispatchEvent($890ebaa4ee6ae241$export$5acd5e6efc9671b7.Events.Deselected);\n }\n onPointerDown(event) {\n if (event.button !== 0) // Support toggle on non-primary pointer button\n this.onToggle(event);\n else {\n this.#down = true;\n if (!this.#mask && !this.tile.modifiers.some((modifier)=>[\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.immutable,\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.lock\n ].includes(modifier.type))) this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime);\n }\n }\n onPointerUp(event) {\n clearTimeout(this.#timeoutId);\n if (this.#down && !this.disabled && !this.selected) switch(event.type){\n case \"pointerleave\":\n // Support swiping up on pointer device\n this.onToggle(event);\n break;\n case \"pointerup\":\n this.onTap(event);\n break;\n }\n this.#down = false;\n }\n onSelected() {\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.deselect();\n $890ebaa4ee6ae241$var$navigator.vibrate((0, $4f41d74d72b0a295$export$b0d759d807f751d4).vibratePattern);\n this.update({\n selected: true\n });\n const mask = this.#mask = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onMask: ()=>this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n });\n this.dispatchEvent((0, $b65a2f5625db2a92$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n onTap() {\n this.selected = false;\n }\n onToggle() {\n $890ebaa4ee6ae241$var$navigator.vibrate((0, $4f41d74d72b0a295$export$b0d759d807f751d4).vibratePattern);\n }\n remove() {\n this.detach();\n this.tile.removeModifier(this);\n this.tile = null;\n }\n toString() {\n return [\n this.name,\n this.id\n ].join(\":\");\n }\n update(options) {\n options = Object.assign({\n disabled: this.disabled,\n selected: this.selected,\n name: this.name,\n title: this.title\n }, options || {});\n if (!this.immutable) this.disabled = options.disabled;\n this.name = options.name;\n this.title = options.title;\n this.selected = options.selected;\n if (this.#container) {\n this.#container.classList.toggle(\"disabled\", this.disabled);\n this.#container.classList.toggle(\"selected\", this.selected);\n this.element.textContent = this.name;\n this.element.title = this.title;\n }\n }\n #maskOnTap(puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile;\n this.move(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent($890ebaa4ee6ae241$export$5acd5e6efc9671b7.Events.Moved, {\n fromTile: fromTile\n });\n } else {\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.deselect();\n puzzle.unmask();\n }\n this.#mask = undefined;\n this.update({\n selected: false\n });\n }\n #moveFilter(tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile);\n }\n static deselect() {\n const selectedModifier = document.querySelector(\".modifiers .selected\");\n if (selectedModifier) selectedModifier.dispatchEvent(new CustomEvent(\"deselected\"));\n }\n static immutable(modifier) {\n return modifier.type === $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.immutable;\n }\n static Events = Object.freeze({\n Deselected: \"modifier-deselected\",\n Invoked: \"modifier-invoked\",\n Moved: \"modifier-moved\"\n });\n static Types = Object.freeze(Object.fromEntries([\n \"immutable\",\n \"lock\",\n \"move\",\n \"rotate\",\n \"swap\",\n \"toggle\"\n ].map((type)=>[\n type,\n (0, $3e2f0fa58ba587b4$export$9a00dee1beb8f576)(type)\n ])));\n}\n\n\n\n\n\nclass $6b5ed925b0615466$export$e49a5ad3dd6df925 extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n #mask;\n name = \"drag_pan\";\n title = \"Move\";\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter($6b5ed925b0615466$export$e49a5ad3dd6df925.movable);\n if (this.#mask || !items.length) return;\n const mask = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: ()=>this.tile.beforeModify(),\n onUnmask: ()=>this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n });\n this.#mask = mask;\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)((0, $b65a2f5625db2a92$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n moveFilter(tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.movable);\n }\n moveItems(tile) {\n const items = this.tile.items.filter($6b5ed925b0615466$export$e49a5ad3dd6df925.movable);\n items.forEach((item)=>item.move(tile));\n return {\n moved: [\n $6b5ed925b0615466$export$e49a5ad3dd6df925.data(this.tile, tile, items)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).immutable) || tile.items.filter((item)=>item.type !== (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam).length > 0 && !(tile === this.tile);\n }\n #maskOnTap(puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked, data);\n } else puzzle.unmask();\n this.#mask = undefined;\n }\n static data(fromTile, toTile, items) {\n return {\n fromTile: fromTile,\n toTile: toTile,\n items: items\n };\n }\n static movable(item) {\n return item.movable;\n }\n}\nconst $6b5ed925b0615466$export$1288a4f7eae890b0 = (SuperClass)=>class MovableItem extends SuperClass {\n movable;\n constructor(parent, configuration){\n super(...arguments);\n this.movable = configuration.movable !== false;\n }\n move(tile) {\n this.parent.removeItem(this);\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center);\n this.group.position = this.group.position.subtract(vector);\n // Update tile reference\n this.parent = tile;\n this.parent.addItem(this);\n this.center = this.parent.center;\n this.onMove();\n }\n onMove() {}\n };\n\n\n\n\n\nclass $0b4b4185562e5b04$export$fd55ce593607084a {\n color;\n colors;\n connected;\n direction;\n done;\n insertAbove;\n onAdd;\n onRemove;\n point;\n pathIndex;\n segmentIndex;\n state;\n tile;\n constructor(index, tile, colors, direction, point, pathIndex, segmentIndex, connected, insertAbove, done, state, onAdd, onRemove){\n if (state && !(state instanceof $0b4b4185562e5b04$export$81262d6ca0162a3)) throw new Error(\"Step.state must be instance of StepState\");\n this.colors = colors ? Array.isArray(colors) ? Array.from(colors) : [\n colors\n ] : [];\n if (this.colors.length) this.color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(this.colors).hex();\n this.connected = connected ?? true;\n this.direction = direction;\n this.done = done ?? false;\n this.index = index;\n this.insertAbove = insertAbove;\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.onRemove = onRemove ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.point = point;\n this.pathIndex = pathIndex;\n this.segmentIndex = segmentIndex;\n this.state = state ?? new $0b4b4185562e5b04$export$81262d6ca0162a3();\n this.tile = tile;\n }\n copy(settings) {\n return new $0b4b4185562e5b04$export$fd55ce593607084a(settings.index ?? this.index, settings.tile ?? this.tile, settings.colors ?? settings.color ?? this.colors, settings.direction ?? this.direction, settings.point ?? this.point, settings.pathIndex ?? this.pathIndex, settings.segmentIndex ?? this.segmentIndex, settings.connected ?? this.connected, settings.insertAbove ?? this.insertAbove, settings.done ?? this.done, settings.state ?? new $0b4b4185562e5b04$export$81262d6ca0162a3(this.state), settings.onAdd ?? this.onAdd, settings.onRemove ?? this.onRemove);\n }\n equals(step) {\n return (0, $3e2f0fa58ba587b4$export$9cb4719e2e525b7a)(this, step);\n }\n}\nclass $0b4b4185562e5b04$export$81262d6ca0162a3 {\n #cache = {};\n constructor(){\n const settings = Object.assign({}, ...arguments);\n Object.keys(settings).forEach((key)=>{\n this[key] = settings[key];\n });\n }\n copy(...settings) {\n return new $0b4b4185562e5b04$export$81262d6ca0162a3(...[\n this\n ].concat(settings));\n }\n get(Class) {\n return this.#keys(Class).map((key)=>this[key]).find((value)=>value);\n }\n has(Class) {\n return this.#keys(Class).some((key)=>this[key]);\n }\n #keys(Class) {\n return this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, []));\n }\n static Collision = class StepCollision {\n collision;\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor(collision){\n this.collision = collision;\n }\n };\n static Filter = class StepFilter {\n filter = {};\n };\n static MergeInto = class StepMergeInto {\n mergeInto;\n constructor(beam){\n this.mergeInto = {\n beam: beam\n };\n }\n };\n static MergeWith = class StepMergeWith {\n mergeWith;\n constructor(mergeWith){\n this.mergeWith = mergeWith;\n }\n };\n static Portal = class StepPortal {\n portal;\n constructor(entryPortal, exitPortal){\n this.portal = {\n entryPortal: entryPortal,\n exitPortal: exitPortal\n };\n }\n };\n static Reflector = class StepReflector {\n reflector;\n constructor(item){\n this.reflector = {\n item: item\n };\n }\n };\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection;\n constructor(terminus, opening){\n this.terminusConnection = {\n terminus: terminus,\n opening: opening\n };\n }\n };\n}\n\n\nclass $b9391c61de18417d$export$ec91da630f36d5ea extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2)) {\n constructor(tile, { color: color }){\n super(...arguments);\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(Array.isArray(color) ? color : [\n color\n ]).hex();\n const fillColor = new (0, $hvNIE.Color)(color);\n fillColor.alpha = 0.25;\n // TODO: update to something else? prism?\n const item = new (0, $hvNIE.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor: fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n getColorElements() {\n return [\n (0, $3e2f0fa58ba587b4$export$3cb91a81090b9eee)(this.color)\n ];\n }\n onCollision({ currentStep: currentStep, nextStep: nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(currentStep.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Filter) ? {\n colors: nextStep.colors.concat([\n this.color\n ])\n } : {\n state: new (0, $0b4b4185562e5b04$export$81262d6ca0162a3)({\n insertAbove: this\n }, new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Filter())\n });\n }\n}\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\nclass $94a7df60cff9f28b$export$152db69a76b6b79e extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n clockwise;\n title = \"Rotate\";\n constructor(tile, state, configuration = {}){\n super(...arguments);\n this.clockwise = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(true, state.clockwise, configuration.clockwise);\n this.name = $94a7df60cff9f28b$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"];\n }\n moveFilter(tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.rotatable);\n }\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter((item)=>item.rotatable);\n items.forEach((item)=>item.rotate(this.clockwise));\n this.dispatchEvent((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n onToggle() {\n super.onToggle();\n this.clockwise = !this.clockwise;\n this.updateState((state)=>{\n state.clockwise = this.clockwise;\n });\n this.update({\n name: $94a7df60cff9f28b$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"]\n });\n }\n static Names = Object.freeze({\n left: \"rotate_left\",\n right: \"rotate_right \"\n });\n}\nconst $94a7df60cff9f28b$export$781de49a9284d537 = (SuperClass)=>class RotatableItem extends SuperClass {\n direction;\n rotatable;\n rotation = 0;\n rotationDegrees;\n constructor(parent, state, configuration = {}){\n super(...arguments);\n this.direction = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(state.direction, configuration.direction);\n this.rotatable = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(true, state.rotatable, configuration.rotatable);\n this.rotationDegrees = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(60, state.rotationDegrees, configuration.rotationDegrees);\n this.rotation = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(0, state.rotation, configuration.rotation) % this.getMaxRotation();\n }\n // Get the direction of an item with rotation factored in\n getDirection(direction) {\n direction = direction ?? this.direction;\n return direction === undefined ? direction : (0, $3e2f0fa58ba587b4$export$bac4c4504d574f)(direction, this.rotation);\n }\n getMaxRotation() {\n return 360 / this.rotationDegrees;\n }\n onInitialization() {\n super.onInitialization();\n this.rotateGroup(this.rotation);\n if (this.direction !== undefined) // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction);\n }\n rotateGroup(rotation) {\n if (this.rotatable) this.group.rotate(rotation * this.rotationDegrees, this.center);\n }\n rotate(clockwise) {\n const rotation = clockwise === false ? -1 : 1;\n this.rotation = (rotation + this.rotation) % this.getMaxRotation();\n this.updateState((state)=>{\n state.rotation = this.rotation;\n });\n this.rotateGroup(rotation);\n }\n };\n\n\n\n\n\nclass $9a8fa6fd25778435$export$602eac185826482c extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2))) {\n #directions = {};\n constructor(tile, state){\n // Only allow rotation if direction is defined\n super(tile, state, {\n rotatable: state.direction !== undefined\n });\n this.direction = state.direction;\n const height = tile.parameters.circumradius / 3;\n const width = tile.parameters.circumradius / 5;\n const style = {\n fillColor: \"black\",\n strokeColor: \"white\",\n strokeWidth: 2\n };\n const children = [];\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new (0, $hvNIE.Path).Ellipse({\n center: tile.center,\n radius: [\n width,\n height\n ],\n style: style\n });\n children.push(ellipse);\n const ring = new (0, $hvNIE.Path).Ellipse({\n center: tile.center,\n radius: [\n width - style.strokeWidth * 2,\n height - style.strokeWidth * 2\n ],\n style: style\n });\n children.push(ring);\n if (this.rotatable) {\n const pointer = new (0, $hvNIE.Path)({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new (0, $hvNIE.Point)(0, height)),\n tile.center.subtract(new (0, $hvNIE.Point)(0, height)),\n tile.center.subtract(new (0, $hvNIE.Point)(width * 2.5, 0))\n ],\n style: {\n fillColor: \"black\"\n }\n }).subtract(ellipse);\n children.unshift(pointer);\n }\n this.group.addChildren(children);\n if (this.rotatable) // Properly align items with hexagonal rotation\n this.rotateGroup(1);\n }\n get(direction) {\n return this.#directions[direction];\n }\n onCollision({ beam: beam, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const portalState = currentStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal);\n if (!portalState) {\n const stepIndex = nextStep.index;\n const entryDirection = (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(nextStep.direction);\n const existing = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(this.get(entryDirection), {\n stepIndex: stepIndex\n });\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(this.toString(), \"ignoring beam trying to enter through a direction which is already occupied:\", entryDirection);\n return;\n }\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: ()=>this.update(entryDirection, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>this.update(entryDirection),\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal(this))\n });\n } else if (portalState.exitPortal === this) // Handle exit collision\n return nextStep.copy({\n insertAbove: this\n });\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [\n this.id,\n nextStep.index\n ].join(\":\");\n const destinationId = beam.getState().moves?.[stateId];\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item)=>item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.portal && !item.equals(this) && // Portal must not already have a beam occupying the desired direction\n !item.get($9a8fa6fd25778435$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, item)) && (destinationId === undefined || item.id === destinationId) && // Entry portals without defined direction can exit from any other portal.\n (this.getDirection() === undefined || // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined || // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()));\n if (destinations.length === 0) {\n console.debug(this.toString(), \"no valid destinations found\");\n // This will cause the beam to stop\n return currentStep;\n }\n if (destinations.length === 1) // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState);\n else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal)=>portal.parent);\n const mask = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Mask({\n beam: beam,\n id: stateId,\n onMask: ()=>currentStep.tile.beforeModify(),\n onTap: (puzzle, tile)=>{\n const destination = destinations.find((portal)=>portal.parent === tile);\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState));\n beam.updateState((state)=>{\n if (!state.moves) state.moves = {};\n // Store this decision in beam state\n state.moves[stateId] = destination.id;\n });\n puzzle.unmask();\n }\n },\n onUnmask: ()=>currentStep.tile.afterModify(),\n tileFilter: (tile)=>{\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile)=>destinationTile === tile));\n }\n });\n puzzle.updateSelectedTile(currentStep.tile);\n puzzle.mask(mask);\n // This will cause the beam to stop\n return currentStep;\n }\n }\n update(direction, data) {\n this.#directions[direction] = data;\n }\n #getStep(beam, portal, nextStep, portalState) {\n const direction = $9a8fa6fd25778435$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, portal);\n const stepIndex = nextStep.index;\n return nextStep.copy({\n connected: false,\n direction: direction,\n insertAbove: portal,\n onAdd: ()=>portal.update(direction, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n });\n }\n static getExitDirection(step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction;\n }\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nclass $90288bbda8776a08$export$bea8ebba691c5813 extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n on;\n title = \"Toggle\";\n constructor(tile, { on: on }){\n super(...arguments);\n this.on = on || false;\n this.tile.items.forEach((item)=>{\n item.toggled = this.on;\n });\n }\n attach() {\n this.name = $90288bbda8776a08$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"];\n super.attach();\n }\n moveFilter(tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.toggleable);\n }\n onTap(event) {\n super.onTap(event);\n this.on = !this.on;\n const items = this.tile.items.filter((item)=>item.toggleable);\n items.forEach((item)=>item.toggle(this.on));\n this.update({\n name: $90288bbda8776a08$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"]\n });\n this.dispatchEvent((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n static Names = Object.freeze({\n on: \"toggle_on\",\n off: \"toggle_off \"\n });\n}\nconst $90288bbda8776a08$export$cdb1ce8c4b8a5afe = (SuperClass)=>class ToggleableItem extends SuperClass {\n toggleable;\n toggled;\n constructor(parent, configuration){\n super(...arguments);\n this.toggleable = configuration.toggleable !== false;\n }\n onToggle() {}\n toggle(toggled) {\n this.toggled = toggled;\n this.onToggle();\n }\n };\n\n\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\n\nclass $74097bbf14237549$export$88c9f72b40fcdd85 {\n constructor(index, points, beam, item){\n const items = [\n beam\n ];\n if (item !== undefined) items.push(item);\n this.beam = beam;\n this.index = index;\n // The item that was collided with\n this.item = item;\n this.itemIds = items.map((item)=>item.id);\n this.items = items;\n // The first collision point\n this.point = points[0];\n this.points = points;\n // Check if the collision is with self\n this.withSelf = beam.equals(item);\n }\n copy(settings) {\n return new $74097bbf14237549$export$88c9f72b40fcdd85(settings.index ?? this.index, settings.points ?? this.points, settings.beam ?? this.beam, settings.item ?? this.item);\n }\n equals(other) {\n return other && other.point.equals(this.point) && other.items.every((item)=>this.has(item));\n }\n has(item) {\n return this.itemIds.includes(item.id);\n }\n mirror() {\n return this.copy({\n beam: this.item,\n item: this.beam\n });\n }\n}\nclass $74097bbf14237549$export$20aab196240bbdf2 {\n constructor(beam, step, stepIndex){\n this.beams = [\n beam\n ].concat(step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeWith)?.beams || []);\n this.colors = step.colors.concat(beam.getColors());\n this.stepIndex = stepIndex;\n }\n}\n\n\n\nclass $5625a4a7d65ce9b8$export$693b33588b3dd9d8 extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n done = false;\n path = [];\n sortOrder = 3;\n #cache = new (0, $97686966a3fec53f$export$94affb487e701bf2)(Object.values($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys));\n #direction;\n #path;\n #stepIndex = -1;\n #steps = [];\n constructor(terminus, state, configuration){\n super(...arguments);\n this.group = null;\n this.#direction = configuration.direction;\n this.#path = {\n closed: false,\n data: {\n id: this.id,\n type: this.type\n },\n locked: true,\n strokeJoin: \"round\",\n strokeCap: \"round\",\n strokeWidth: terminus.radius / 12\n };\n }\n addStep(step) {\n const lastStepIndex = this.getLastStepIndex();\n // Can't be done if adding a new step\n this.done = false;\n this.#path.strokeColor = step.color;\n if (this.path.length === 0) {\n const path = new (0, $hvNIE.Path)(this.#path);\n this.path.push(path);\n this.getLayer().insertChild(0, path);\n }\n const currentPath = this.path[this.path.length - 1];\n const previousStep = this.#steps[lastStepIndex];\n // Handles cases that require adding a new path item\n if (!step.connected || previousStep && (step.color !== previousStep.color || step.insertAbove !== previousStep.insertAbove)) {\n console.debug(this.toString(), \"adding new path item for step:\", step, \"previous step:\", previousStep);\n const path = new (0, $hvNIE.Path)(this.#path);\n const points = [\n step.point\n ];\n // If the next step is connected, we will link it with the previous step\n if (step.connected) points.unshift(previousStep.point);\n path.add(...points);\n this.path.push(path);\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path);\n // Reset the segmentIndex\n step.segmentIndex = 0;\n } else {\n currentPath.add(step.point);\n step.segmentIndex = currentPath.segments.length - 1;\n }\n step.pathIndex = this.path.length - 1;\n this.#steps.push(step);\n step.index = this.#stepIndex = this.#steps.length - 1;\n if (!step.tile.items.some((item)=>item.equals(this))) // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this);\n step.onAdd(step);\n console.debug(this.toString(), \"added step\", step);\n this.#onUpdate(this.#stepIndex);\n return step;\n }\n getCollision() {\n return this.getStep()?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision);\n }\n getColor() {\n return this.getStep()?.color || this.getOpening().color;\n }\n getColors() {\n return Array.from(this.getStep()?.colors || this.getOpening().colors);\n }\n getColorElements(tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step)=>step.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeWith));\n return step ? (0, $3e2f0fa58ba587b4$export$6d3741128bd5bb7d)(step.color) : [];\n }\n getCompoundPath() {\n return new (0, $hvNIE.CompoundPath)({\n children: this.path.map((item)=>item.clone({\n insert: false\n }))\n });\n }\n getIndex() {\n return this.path[this.path.length - 1].index;\n }\n getLastStepIndex() {\n return this.length() - 1;\n }\n getLayer() {\n return this.parent.getLayer();\n }\n getMergeWith(beam) {\n return this.#cache.get($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys.MergeWith).get(beam.id);\n }\n getOpening() {\n return this.parent.getOpening(this.#direction);\n }\n getState() {\n return this.parent.getState().openings[this.#direction];\n }\n getStep(stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()];\n }\n getSteps(tile) {\n return tile ? this.#steps.filter((step)=>step.tile === tile) : this.#steps;\n }\n isComplete() {\n return this.isOn() && this.done;\n }\n isConnected() {\n const step = this.getStep();\n return step?.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection) || // Consider beams which have merged into connected beams to also be connected\n step?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto)?.beam.isConnected();\n }\n isOn() {\n const opening = this.getOpening();\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected;\n }\n isPending() {\n return this.isOn() && !this.done;\n }\n length() {\n return this.#steps.length;\n }\n onBeamUpdated(event) {\n const beam = event.detail.beam;\n if (beam.isPending()) // Wait for beam to finish before evaluating\n return;\n const beamLastStep = beam.getStep();\n if (this.isComplete()) {\n const lastStep = this.getStep();\n // Check for invalid collisions\n const collision = lastStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision);\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision))) {\n console.debug(this.toString(), \"re-evaluating collision with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(lastStep.index - 1, 0);\n return;\n }\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto);\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), \"re-evaluating merge into\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0);\n return;\n }\n }\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam);\n if (mergeWith && !beamLastStep?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), \"re-evaluating merge with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0);\n }\n }\n onCollision({ beam: beam, collision: collision, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const isSelf = beam.equals(this);\n console.debug(this.toString(), \"evaluating collision with\", isSelf ? \"self\" : beam.toString());\n if (!beam.isOn()) {\n console.debug(this.toString(), \"ignoring collision with inactive beam\", beam.toString());\n return;\n }\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), \"ignoring collision with sibling beam\", beam.toString());\n return;\n }\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), \"ignoring collision with self while re-evaluating history\");\n return;\n }\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step)=>(0, $3e2f0fa58ba587b4$export$c23f9d3341b5fd07)(collision.point, step.point));\n if (stepIndex < 0) // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(`Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`);\n const step = this.#steps[stepIndex];\n if (step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), \"ignoring collision with merged beam\", beam.toString());\n return;\n }\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), \"ignoring collision with connected beam in parent terminus\", beam.toString());\n return;\n }\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector) ?? currentStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector);\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(step.point, 1, (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(step.direction));\n const nextStepPoint = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(currentStep.point, 1, (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(currentStep.direction));\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), \"ignoring collision with beam on opposite side of reflector\", beam.toString());\n return;\n }\n }\n const isSameDirection = step.direction === nextStep.direction;\n if (currentStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal)?.exitPortal && !isSameDirection) {\n console.debug(this.toString(), \"ignoring collision with beam using same portal with different exit direction\", beam.toString());\n return;\n }\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), \"has collided with\", isSelf ? \"self\" : this.toString(), collision);\n if (!isSelf) // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision.mirror()))\n });\n else if (!isSameDirection) // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay());\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n });\n }\n console.debug(this.toString(), \"merging with\", beam.toString());\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex);\n const mergeWith = new (0, $74097bbf14237549$export$20aab196240bbdf2)(beam, step, stepIndex);\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: ()=>{\n this.#cache.get($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys.MergeWith).set(beam.id, mergeWith);\n },\n onRemove: ()=>{\n this.#cache.get($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys.MergeWith).unset(beam.id);\n },\n state: step.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeWith(mergeWith))\n }));\n console.debug(beam.toString(), \"merging into\", this.toString());\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto(this))\n });\n }\n onModifierInvoked(event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), \"beam has been toggled off\");\n // Also reset any state changes from user move decisions\n this.updateState((state)=>{\n delete state.moves;\n });\n this.remove();\n }\n return;\n }\n const tiles = event.detail.tiles || [\n event.detail.tile\n ];\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step)=>tiles.some((tile)=>tile.equals(step.tile)));\n if (stepIndex >= 0) {\n console.debug(this.toString(), \"re-evaluating due to modifier being invoked in matching tile\", stepIndex);\n // Re-evaluate beginning at the step before the matched one\n this.done = false;\n this.#stepIndex = Math.max(stepIndex - 1, 0);\n return;\n }\n if (this.isComplete()) {\n const lastStep = this.getStep();\n if (lastStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal)?.entryPortal) // Check for valid exit portal\n this.done = false;\n }\n }\n remove(stepIndex = 0) {\n this.#updateHistory(stepIndex);\n }\n selected(selected = true) {\n this.path.forEach((path)=>{\n path.selected = selected;\n });\n }\n startDirection() {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6;\n }\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */ step(puzzle) {\n if (!this.isPending()) return;\n console.debug(this.toString(), \"currentStepIndex\", this.#stepIndex);\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent;\n this.addStep(new (0, $0b4b4185562e5b04$export$fd55ce593607084a)(0, tile, this.getColor(), this.startDirection(), tile.center));\n }\n const currentStepIndex = this.#stepIndex;\n const currentStep = this.#steps[currentStepIndex];\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction;\n const nextStepPoint = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(currentStep.point, currentStep.tile.parameters.inradius, direction);\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile((0, $3e2f0fa58ba587b4$export$78da85ac75754159)(currentStep.point, nextStepPoint));\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), \"stopping due to out of bounds\");\n const collision = new (0, $74097bbf14237549$export$88c9f72b40fcdd85)(0, [\n currentStep.point\n ], this);\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new (0, $0b4b4185562e5b04$export$81262d6ca0162a3)(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision))\n });\n }\n const nextStepIndex = currentStepIndex + 1;\n const existingNextStep = this.#steps[nextStepIndex];\n const lastPathIndex = this.path.length - 1;\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1;\n let nextStep = new (0, $0b4b4185562e5b04$export$fd55ce593607084a)(nextStepIndex, tile, currentStep.color, direction, nextStepPoint, existingNextStep?.pathIndex || lastPathIndex, existingNextStep?.segmentIndex || lastSegmentIndex);\n const items = (0, $3e2f0fa58ba587b4$export$abf0e2545164275f)(tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items), \"id\");\n console.debug(this.toString(), \"collision items:\", items);\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle).map((collision, index)=>new (0, $74097bbf14237549$export$88c9f72b40fcdd85)(index, collision.points, this, collision.item));\n if (collisions.length) console.debug(this.toString(), \"collisions:\", collisions);\n let collisionStep;\n for(let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++){\n const collision = collisions[collisionIndex];\n console.debug(this.toString(), \"resolving collision:\", collision);\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision))\n });\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision: collision,\n collisions: collisions,\n collisionStep: collisionStep,\n currentStep: currentStep,\n nextStep: nextStep,\n existingNextStep: existingNextStep,\n puzzle: puzzle\n });\n if (collisionStep instanceof (0, $0b4b4185562e5b04$export$fd55ce593607084a)) break;\n }\n if (collisionStep) nextStep = collisionStep;\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++;\n const lastStepIndex = this.getLastStepIndex();\n console.debug(this.toString(), \"new step is same as existing. new step index:\", this.#stepIndex, \"last step index:\", lastStepIndex);\n if (this.#stepIndex === lastStepIndex) // To ensure we mark as done\n this.#onUpdate(this.#stepIndex);\n return existingNextStep;\n } else {\n console.debug(this.toString(), `is revising history at step index: ${nextStepIndex}`, \"existing step:\", existingNextStep, \"new step:\", nextStep);\n this.#updateHistory(nextStepIndex);\n }\n }\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), \"next step point is same as current step point, stopping.\", nextStep);\n return this.updateStep(currentStepIndex, nextStep.copy({\n done: true\n }));\n }\n return this.addStep(nextStep);\n }\n toString() {\n return `[${this.type}:${this.id}:${(0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports)))(this.getColor()).name()}]`;\n }\n update(stepIndex, settings = {}, timeout) {\n if (typeof settings === \"number\") {\n timeout = settings;\n settings = {};\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout);\n return timeout === undefined ? update() : setTimeout(update, timeout);\n }\n updateState(updater, dispatchEvent = true) {\n return this.parent.updateState((state)=>updater(state.openings[this.#direction]), dispatchEvent);\n }\n updateStep(stepIndex, settings) {\n const step = this.getStep(stepIndex);\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings);\n this.#steps[stepIndex] = updatedStep;\n updatedStep.onAdd(updatedStep);\n console.debug(this.toString(), \"updated step at index\", stepIndex, \"from\", step, \"to\", updatedStep);\n this.#onUpdate(stepIndex);\n return updatedStep;\n }\n }\n #getCollisions(items, currentStep, nextStep, puzzle) {\n const segments = [\n currentStep.point,\n nextStep.point\n ];\n const path = new (0, $hvNIE.Path)({\n segments: segments\n });\n const firstPoint = segments[0];\n return items.map((item)=>{\n const points = [];\n const intersections = path.getIntersections(item.getCompoundPath(), // Ignore first point from self which will always collide\n (curveLocation)=>!(item === this && curveLocation.point.equals(firstPoint)));\n points.push(...new Set(intersections.map((intersection)=>intersection.point)));\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam && item !== this) points.push(...item.getSteps().map((step)=>step.point).filter((point)=>segments.some((segment)=>(0, $3e2f0fa58ba587b4$export$c23f9d3341b5fd07)(point, segment))));\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort((0, $3e2f0fa58ba587b4$export$79376507b09a66f)(firstPoint));\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint);\n points.forEach((point)=>puzzle.drawDebugPoint(point, {\n fillColor: \"black\"\n }));\n }\n return {\n points: points,\n item: item\n };\n }).filter((result)=>result.points.length).sort((a, b)=>{\n // Sort items returned by proximity to starting point\n const distance = (0, $3e2f0fa58ba587b4$export$79376507b09a66f)(firstPoint)(a.points[0], b.points[0]);\n if (distance === 0) // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder;\n return distance;\n });\n }\n #getItemIndex(step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0;\n }\n #getUpdatedStep(step, settings) {\n if (typeof settings === \"function\") settings = settings(step);\n return settings instanceof (0, $0b4b4185562e5b04$export$fd55ce593607084a) ? settings : step.copy(settings);\n }\n #update(stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex);\n this.addStep(this.#getUpdatedStep(step, settings));\n } else this.updateStep(stepIndex, settings);\n }\n #onUpdate(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n stepIndex ??= lastStepIndex;\n const step = this.getStep(stepIndex);\n if (stepIndex === lastStepIndex) // Update beam status if last step was updated\n this.done = step?.done ?? false;\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($5625a4a7d65ce9b8$export$693b33588b3dd9d8.Events.Update, {\n beam: this,\n state: step?.state,\n step: step,\n stepIndex: stepIndex\n });\n }\n #updateHistory(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n const step = this.#steps[stepIndex];\n console.debug(this.toString(), \"updateHistory\", \"stepIndex:\", stepIndex, \"lastStepIndex:\", lastStepIndex, \"step:\", step);\n if (step) {\n const currentPath = this.path[step.pathIndex];\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex);\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1);\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item)=>item.remove());\n const deletedSteps = this.#steps.splice(stepIndex);\n console.debug(this.toString(), \"removed steps: \", deletedSteps);\n const tiles = [\n ...new Set(deletedSteps.map((step)=>step.tile))\n ];\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile)=>this.getSteps(tile).length === 0).forEach((tile)=>tile.removeItem(this));\n deletedSteps.forEach((step)=>step.onRemove(step));\n this.done = false;\n this.#stepIndex = stepIndex - 1;\n this.#onUpdate(this.#stepIndex);\n }\n return step;\n }\n static CacheKeys = Object.freeze({\n MergeWith: \"mergeWith\"\n });\n static Events = Object.freeze({\n Collision: \"beam-collision\",\n Connection: \"beam-connection\",\n Merge: \"beam-merge\",\n Update: \"beam-update\"\n });\n}\n\n\n\n\nclass $7a376349f5a360a3$export$3ad31a823e05e6fb extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $90288bbda8776a08$export$cdb1ce8c4b8a5afe)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2)))) {\n sortOrder = 2;\n #ui;\n constructor(tile, state){\n super(...arguments);\n const colors = state.openings.filter((opening)=>opening?.color).flatMap((opening)=>Array.isArray(opening.color) ? opening.color : [\n opening.color\n ]);\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(colors.length ? colors : Array.isArray(state.color) ? state.color : [\n state.color\n ]).hex();\n const openings = state.openings.map((state, direction)=>state ? new $7a376349f5a360a3$export$3ad31a823e05e6fb.#Opening(state.color || color, direction, state.connected, state.on) : state).filter((opening)=>opening);\n this.#ui = $7a376349f5a360a3$export$3ad31a823e05e6fb.ui(tile, color, openings);\n this.group.addChildren([\n ...this.#ui.openings,\n this.#ui.terminus\n ]);\n this.color = color;\n this.openings = openings;\n this.radius = this.#ui.radius;\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening)=>new (0, $5625a4a7d65ce9b8$export$693b33588b3dd9d8)(this, state.openings[opening.direction], opening));\n this.update();\n }\n getColorElements() {\n return (0, $3e2f0fa58ba587b4$export$6d3741128bd5bb7d)(this.openings.map((opening)=>opening.color));\n }\n getOpening(direction) {\n return this.openings.find((opening)=>opening.direction === direction);\n }\n onMove() {\n this.beams.forEach((beam)=>beam.remove());\n }\n onCollision({ beam: beam, collisionStep: collisionStep, currentStep: currentStep, existingNextStep: existingNextStep, nextStep: nextStep }) {\n console.debug(this.toString(), \"collision\", beam.toString());\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), \"ignoring starting terminus collision\");\n return;\n }\n const directionFrom = (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(currentStep.direction);\n // Take rotation of terminus into account\n const opening = this.openings.find((opening)=>this.getDirection(opening.direction) === directionFrom);\n if (opening && opening.color === nextStep.color && (!opening.on || // When re-evaluating history of an already connected opening\n opening.connected && existingNextStep?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(this))) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), \"terminus connection\", this.toString(), opening);\n return nextStep.copy({\n done: true,\n onAdd: ()=>{\n nextStep.onAdd();\n this.onConnection(opening.direction);\n },\n onRemove: ()=>{\n nextStep.onRemove();\n this.onDisconnection(opening.direction);\n },\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection(this, opening))\n });\n }\n // Otherwise, treat this as a collision\n return collisionStep;\n }\n onConnection(direction) {\n const opening = this.getOpening(direction);\n if (opening.connected) // Already connected\n return;\n opening.connect();\n this.update();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($7a376349f5a360a3$export$3ad31a823e05e6fb.Events.Connection, {\n terminus: this,\n opening: opening\n });\n }\n onDisconnection(direction) {\n const opening = this.getOpening(direction);\n if (!opening.connected) // Already disconnected\n return;\n opening.disconnect();\n this.update();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($7a376349f5a360a3$export$3ad31a823e05e6fb.Events.Disconnection, {\n terminus: this,\n opening: opening\n });\n }\n onToggle() {\n this.updateState((state)=>{\n this.openings.filter((opening)=>!opening.connected).forEach((opening)=>{\n opening.toggle();\n state.openings[opening.direction].on = opening.on;\n });\n });\n this.update();\n }\n update() {\n this.beams.forEach((beam)=>{\n const opening = beam.getOpening();\n const item = this.#ui.openings.find((item)=>item.data.direction === opening.direction);\n item.opacity = opening.on ? 1 : $7a376349f5a360a3$export$3ad31a823e05e6fb.#openingOffOpacity;\n });\n }\n static #openingOffOpacity = 0.3;\n static ui(tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2;\n const terminus = new (0, $hvNIE.Path).RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n });\n const openings = configuration.map((opening)=>{\n const direction = opening.direction;\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[(0, $3e2f0fa58ba587b4$export$abb49451cc8201c)(direction, 1)].point;\n const p2 = terminus.segments[(0, $3e2f0fa58ba587b4$export$bac4c4504d574f)(direction, 2)].point;\n const vector = p2.subtract(p1);\n vector.angle += 120;\n const p3 = p1.subtract(vector);\n return new (0, $hvNIE.Path)({\n closed: true,\n data: {\n collidable: false,\n direction: direction\n },\n fillColor: opening.color,\n opacity: opening.on ? 1 : $7a376349f5a360a3$export$3ad31a823e05e6fb.#openingOffOpacity,\n segments: [\n p1,\n p2,\n p3\n ]\n });\n });\n return {\n openings: openings,\n radius: radius,\n terminus: terminus\n };\n }\n static #Opening = class {\n constructor(color, direction, connected, on){\n this.colors = Array.isArray(color) ? color : [\n color\n ];\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(this.colors).hex();\n this.direction = direction;\n this.connected = connected === true;\n this.on = on === true;\n }\n connect() {\n this.connected = this.on = true;\n }\n disconnect() {\n this.connected = this.on = false;\n }\n toggle() {\n this.on = !this.on;\n }\n };\n static Events = Object.freeze({\n Connection: \"terminus-connection\",\n Disconnection: \"terminus-disconnection\"\n });\n}\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\n\n\nclass $833b17827b418a5b$export$edf083caefbff926 extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2))) {\n #item;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 30\n });\n this.color = state.color || \"black\";\n this.#item = $833b17827b418a5b$export$edf083caefbff926.item(tile, this.color);\n this.group.addChild(this.#item);\n }\n midLine() {\n // Two points which form a line through the mid-point of the reflector\n return [\n (0, $3e2f0fa58ba587b4$export$78da85ac75754159)(this.#item.segments[3].point, this.#item.segments[0].point),\n (0, $3e2f0fa58ba587b4$export$78da85ac75754159)(this.#item.segments[1].point, this.#item.segments[2].point)\n ];\n }\n getSide(point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return (0, $3e2f0fa58ba587b4$export$1690e12b840569b9)(this.midLine(), point);\n }\n isSameSide(pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB);\n }\n onCollision({ beam: beam, collision: collision, collisions: collisions, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep }) {\n const directionFrom = (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(currentStep.direction);\n const directionTo = (0, $3e2f0fa58ba587b4$export$17a5d53cd2e4de6c)(directionFrom, this.rotation);\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), \"stopping due to collision with non-reflective side of reflector\");\n return collisionStep;\n }\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), \"stopping due to reflection back at self\");\n if (collisions.some((collision)=>collision.item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam)) // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return;\n else // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision.copy({\n points: [\n nextStep.point\n ]\n })))\n });\n }\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector)) return nextStep.copy({\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector(this))\n });\n const point = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(currentStep.point, nextStep.tile.parameters.inradius, directionTo);\n return nextStep.copy({\n direction: directionTo,\n point: point\n });\n }\n static item(tile, color) {\n const length = tile.parameters.circumradius;\n const width = tile.parameters.circumradius / 12;\n const topLeft = tile.center.subtract(new (0, $hvNIE.Point)(width / 2, length / 2));\n const size = new (0, $hvNIE.Size)(width, length);\n return new (0, $hvNIE.Path).Rectangle({\n data: {\n size: size\n },\n fillColor: color,\n point: topLeft,\n size: size\n });\n }\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\nclass $62983545fa7e5cd3$export$cb4338d67ffa8a1d extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2))) {\n sortOrder = 1;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 60\n });\n const walls = $62983545fa7e5cd3$export$cb4338d67ffa8a1d.item(tile, state);\n this.group.addChildren(walls);\n }\n static item(tile, configuration) {\n const radius = tile.parameters.circumradius;\n const width = radius / 12;\n const fillColor = tile.styles.default.strokeColor;\n return configuration.directions.map((direction)=>{\n const firstSegment = tile.hexagon.segments[direction].point;\n const nextDirection = (0, $3e2f0fa58ba587b4$export$bac4c4504d574f)(direction, 1);\n const lastSegment = tile.hexagon.segments[nextDirection].point;\n return new (0, $hvNIE.Path)({\n closed: true,\n fillColor: fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt((direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width),\n tile.hexagon.getLocationAt((nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width),\n lastSegment\n ]\n });\n });\n }\n}\n\n\n\nfunction $c097e682a6d7ac01$export$a69a8f92cd2ea310(parent, configuration) {\n let item;\n switch(configuration.type){\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.filter:\n item = new (0, $b9391c61de18417d$export$ec91da630f36d5ea)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.portal:\n item = new (0, $9a8fa6fd25778435$export$602eac185826482c)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.terminus:\n item = new (0, $7a376349f5a360a3$export$3ad31a823e05e6fb)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.reflector:\n item = new (0, $833b17827b418a5b$export$edf083caefbff926)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.wall:\n item = new (0, $62983545fa7e5cd3$export$cb4338d67ffa8a1d)(parent, configuration);\n break;\n default:\n console.error(\"Ignoring item with unknown type:\", configuration.type);\n break;\n }\n if (item) item.onInitialization();\n return item;\n}\n\n\n\n\nclass $1f91e29af141027d$export$4b0ab9e4fad38dea extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"block\";\n title = \"Immutable\";\n}\n\n\n\nclass $7b23092ccd74af51$export$5b9db7ce80343746 extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"lock\";\n title = \"Locked\";\n}\n\n\n\n\n\n\n\n\n\nclass $7e06163ac6e6af1b$export$bdb5f0a1b77546f4 extends (0, $6b5ed925b0615466$export$e49a5ad3dd6df925) {\n name = \"swap_horiz\";\n title = \"Swap\";\n moveItems(tile) {\n const toItems = tile.items.filter((0, $6b5ed925b0615466$export$e49a5ad3dd6df925).movable);\n const fromItems = this.tile.items.filter((0, $6b5ed925b0615466$export$e49a5ad3dd6df925).movable);\n fromItems.forEach((item)=>item.move(tile));\n toItems.forEach((item)=>item.move(this.tile));\n return {\n moved: [\n (0, $6b5ed925b0615466$export$e49a5ad3dd6df925).data(this.tile, tile, fromItems),\n (0, $6b5ed925b0615466$export$e49a5ad3dd6df925).data(tile, this.tile, toItems)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).immutable) || !tile.items.filter((item)=>item.type !== (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam).length;\n }\n}\n\n\nfunction $cc224f8bd3ed022c$export$1d55952676fae128(tile, configuration) {\n let modifier;\n switch(configuration.type){\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.immutable:\n modifier = new (0, $1f91e29af141027d$export$4b0ab9e4fad38dea)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.lock:\n modifier = new (0, $7b23092ccd74af51$export$5b9db7ce80343746)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.move:\n modifier = new (0, $6b5ed925b0615466$export$e49a5ad3dd6df925)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.rotate:\n modifier = new (0, $94a7df60cff9f28b$export$152db69a76b6b79e)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.swap:\n modifier = new (0, $7e06163ac6e6af1b$export$bdb5f0a1b77546f4)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.toggle:\n modifier = new (0, $90288bbda8776a08$export$bea8ebba691c5813)(tile, configuration);\n break;\n default:\n console.error(\"Ignoring modifier with unknown type:\", configuration.type);\n break;\n }\n return modifier;\n}\n\n\nclass $644ce6e6cc7a5abb$export$235cb65c20ad2b7 extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n selected = false;\n #ui;\n constructor(coordinates, layout, parameters, state){\n super(null, state, {\n locked: false\n });\n this.#ui = $644ce6e6cc7a5abb$export$235cb65c20ad2b7.ui(layout, parameters, state, {\n coordinates: coordinates,\n type: this.type\n });\n this.center = this.#ui.center;\n this.coordinates = coordinates;\n this.hexagon = this.#ui.hexagon;\n this.parameters = parameters;\n this.styles = this.#ui.styles;\n this.group.addChildren([\n this.#ui.hexagon,\n this.#ui.indicator\n ]);\n // These need to be last, since they reference this\n this.items = (state.items || []).map((state)=>(0, $c097e682a6d7ac01$export$a69a8f92cd2ea310)(this, state)).filter((item)=>item !== undefined);\n this.modifiers = (state.modifiers || []).map((state)=>(0, $cc224f8bd3ed022c$export$1d55952676fae128)(this, state)).filter((modifier)=>modifier !== undefined);\n this.update();\n }\n addItem(item) {\n this.items.unshift(item);\n this.update();\n }\n addModifier(modifier) {\n this.modifiers.unshift(modifier);\n this.update();\n }\n afterModify() {\n this.setStyle(this.selected ? \"selected\" : \"default\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: false\n }));\n }\n beforeModify() {\n this.group.bringToFront();\n this.setStyle(\"edit\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: true\n }));\n }\n getState() {\n const state = {\n type: this.type\n };\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item)=>item.type !== (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam).map((item)=>item.getState());\n if (items.length) state.items = items;\n const modifiers = this.modifiers.map((modifier)=>modifier.getState());\n if (modifiers.length) state.modifiers = modifiers;\n return state;\n }\n onTap(event) {\n console.debug(this.coordinates.offset.toString(), this);\n this.items.forEach((item)=>item.onTap(event));\n }\n onDeselected(selectedTile) {\n this.selected = false;\n this.#ui.hexagon.style = this.styles.default;\n this.items.forEach((item)=>item.onDeselected());\n this.modifiers.forEach((modifier)=>modifier.detach());\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($644ce6e6cc7a5abb$export$235cb65c20ad2b7.Events.Deselected, {\n selectedTile: selectedTile,\n deselectedTile: this\n });\n }\n onSelected(deselectedTile) {\n this.selected = true;\n this.group.bringToFront();\n this.#ui.hexagon.style = this.styles.selected;\n this.items.forEach((item)=>item.onSelected());\n this.modifiers.forEach((modifier)=>modifier.attach());\n }\n removeItem(item) {\n const index = this.items.indexOf(item);\n if (index >= 0) {\n this.items.splice(index, 1);\n this.update();\n }\n }\n removeModifier(modifier) {\n const index = this.modifiers.indexOf(modifier);\n if (index >= 0) {\n this.modifiers.splice(index, 1);\n this.update();\n }\n }\n setStyle(style) {\n this.hexagon.set(this.styles[style]);\n }\n teardown() {\n this.modifiers.forEach((modifier)=>modifier.detach());\n }\n toString() {\n return this.coordinates.offset.toString();\n }\n update() {\n super.update();\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0;\n }\n static parameters(height) {\n const circumradius = height / 2;\n const width = Math.sqrt(3) * circumradius;\n const inradius = width / 2;\n const offsetY = height * (3 / 4);\n return {\n circumradius: circumradius,\n height: height,\n inradius: inradius,\n offsetY: offsetY,\n width: width\n };\n }\n static ui(layout, parameters, configuration, data) {\n const center = new (0, $hvNIE.Point)(layout.startingOffsetX + parameters.inradius + layout.column * parameters.width, layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY);\n const dashWidth = parameters.circumradius / 10;\n const styles = Object.assign({}, $644ce6e6cc7a5abb$export$235cb65c20ad2b7.Styles, {\n edit: Object.assign({\n dashArray: [\n dashWidth,\n dashWidth\n ]\n }, $644ce6e6cc7a5abb$export$235cb65c20ad2b7.Styles.edit)\n }, configuration.style || {});\n const hexagon = new (0, $hvNIE.Path).RegularPolygon({\n center: center,\n closed: true,\n data: data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n });\n const indicator = new (0, $hvNIE.Path).RegularPolygon({\n center: (0, $3e2f0fa58ba587b4$export$78da85ac75754159)(hexagon.segments[1].point, center, (length)=>length / 3),\n data: {\n collidable: false\n },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: {\n fillColor: \"#ccc\"\n }\n });\n return {\n center: center,\n hexagon: hexagon,\n indicator: indicator,\n styles: styles\n };\n }\n static Events = Object.freeze({\n Deselected: \"tile-deselected\",\n Selected: \"tile-selected\"\n });\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new (0, $hvNIE.Color)(\"white\"),\n strokeColor: new (0, $hvNIE.Color)(\"#666\"),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new (0, $hvNIE.Color)(\"black\"),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new (0, $hvNIE.Color)(\"black\"),\n strokeWidth: 2\n }\n });\n}\n\n\n\n\nclass $941a4b5ec82b485b$export$c84671f46d6a1ca extends (0, $ca3880ece69ea231$export$654f18991713c8c4) {\n #tilesByAxial = [];\n #tilesByOffset = [];\n items = [];\n layers = {};\n tiles = [];\n tileSize = 120;\n constructor(state){\n super(state);\n this.type = state.type || $941a4b5ec82b485b$export$c84671f46d6a1ca.Types.oddR;\n const center = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center;\n const parameters = (0, $644ce6e6cc7a5abb$export$235cb65c20ad2b7).parameters(this.tileSize);\n const tiles = state.tiles;\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width;\n const startingOffsetY = center.y - height / 2;\n this.layers.tiles = new (0, $hvNIE.Layer)();\n this.layers.items = new (0, $hvNIE.Layer)();\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index)=>{\n const length = row.length;\n // Favor offset rows, since they will be wider\n if (length > current.length || length === current.length && this.#isOffsetRow(index)) return {\n index: index,\n length: length\n };\n return current;\n }, {\n index: 0,\n length: 0\n });\n const width = widestRow.length * parameters.width + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0);\n const startingOffsetX = center.x - width / 2;\n for(let r = 0; r < tiles.length; r++){\n const row = tiles[r];\n const rowByAxial = new Array(row.length).fill(null);\n const rowByOffset = new Array(row.length).fill(null);\n const rowOffset = Math.floor(r / 2);\n for(let c = 0; c < row.length; c++){\n const axial = new (0, $fe48dca2d228a457$export$c56d3ccff2456440)(c - rowOffset, r);\n const offset = new (0, $ca914ef976dd611b$export$2e382909194b1aab)(r, c);\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY: startingOffsetY\n };\n const state = row[c];\n if (!state) continue;\n const tile = new (0, $644ce6e6cc7a5abb$export$235cb65c20ad2b7)({\n axial: axial,\n offset: offset\n }, layout, parameters, state);\n this.layers.tiles.addChild(tile.group);\n if (tile.items.length) {\n this.items.push(...tile.items);\n this.layers.items.addChildren(tile.items.map((item)=>item.group));\n }\n this.tiles.push(tile);\n rowByAxial[axial.q] = tile;\n rowByOffset[offset.c] = tile;\n }\n this.#tilesByAxial.push(rowByAxial);\n this.#tilesByOffset.push(rowByOffset);\n }\n }\n getTileByAxial(axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q];\n }\n getTileByOffset(offset) {\n return this.#tilesByOffset[offset.r][offset.c];\n }\n getState() {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row)=>row.map((tile)=>tile?.getState() || null))\n });\n }\n getNeighboringTile(axial, direction) {\n return this.getTileByAxial((0, $fe48dca2d228a457$export$c56d3ccff2456440).neighbor(axial, (0, $3e2f0fa58ba587b4$export$c43d7a950587702b)(direction)));\n }\n teardown() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n }\n #isOffsetRow(index) {\n return index % 2 === 0 ? this.type === $941a4b5ec82b485b$export$c84671f46d6a1ca.Types.evenR : this.type === $941a4b5ec82b485b$export$c84671f46d6a1ca.Types.oddR;\n }\n static Types = Object.freeze({\n evenR: \"even-r\",\n oddR: \"odd-r\"\n });\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nclass $4029f0d6ba5141b4$export$991dcf7284de63d extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n constructor(tile, style){\n super(null, style, {\n locked: false,\n type: (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.mask\n });\n const data = {\n type: this.type\n };\n const item = new (0, $hvNIE.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n data: data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({\n fillColor: \"black\"\n }, style)\n });\n this.center = tile.center;\n this.group.addChild(item);\n }\n}\n\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nclass $729c2b05fa2dedeb$export$88c9f72b40fcdd85 extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n constructor(state){\n super(null, state, {\n type: (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.collision\n });\n const { center: center, color: color } = state;\n this.center = center;\n this.color = color;\n const item = new (0, $hvNIE.Path).Circle({\n center: center,\n closed: true,\n radius: 4,\n style: {\n fillColor: \"white\",\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $df74fd5b33098157$var$puzzles = {\n \"001\": (parcelRequire(\"3VFNU\")),\n \"002\": (parcelRequire(\"dvwd6\")),\n \"003\": (parcelRequire(\"1pc6w\")),\n \"004\": (parcelRequire(\"iL3ZL\")),\n \"005\": (parcelRequire(\"bzWyh\")),\n \"006\": (parcelRequire(\"cJ803\")),\n \"007\": (parcelRequire(\"dX47o\")),\n \"008\": (parcelRequire(\"j6Nsr\")),\n \"009\": (parcelRequire(\"dtX4d\")),\n \"010\": (parcelRequire(\"g1I4V\")),\n \"011\": (parcelRequire(\"8EOId\")),\n test_infinite_loop: (parcelRequire(\"1C1In\")),\n test_layout: (parcelRequire(\"heXOA\")),\n test_portal: (parcelRequire(\"16oTl\")),\n test_reflector: (parcelRequire(\"1nXJz\"))\n};\nfunction $df74fd5b33098157$var$traverse(ids, id, amount) {\n const index = ids.indexOf(id);\n return ids[index < 0 ? index : index + amount];\n}\nclass $df74fd5b33098157$var$PuzzleGroup {\n ids;\n constructor(ids){\n this.firstId = ids[0];\n this.ids = ids;\n this.lastId = ids[ids.length - 1];\n }\n get(id) {\n if (this.has(id)) // Note: deep cloning puzzles to prevent mutation\n return structuredClone($df74fd5b33098157$var$puzzles[id]);\n }\n has(id) {\n return this.ids.includes(id);\n }\n nextId(id) {\n return $df74fd5b33098157$var$traverse(this.ids, id, 1);\n }\n previousId(id) {\n return $df74fd5b33098157$var$traverse(this.ids, id, -1);\n }\n}\nconst $df74fd5b33098157$export$f68871ba002ca835 = new $df74fd5b33098157$var$PuzzleGroup(Object.keys($df74fd5b33098157$var$puzzles).sort());\n$df74fd5b33098157$export$f68871ba002ca835.hidden = new $df74fd5b33098157$var$PuzzleGroup($df74fd5b33098157$export$f68871ba002ca835.ids.filter((id)=>id.startsWith(\"test_\")));\n$df74fd5b33098157$export$f68871ba002ca835.titles = Object.fromEntries($df74fd5b33098157$export$f68871ba002ca835.ids.map((id)=>[\n id,\n $df74fd5b33098157$var$puzzles[id].title || id\n ]));\n$df74fd5b33098157$export$f68871ba002ca835.visible = new $df74fd5b33098157$var$PuzzleGroup($df74fd5b33098157$export$f68871ba002ca835.ids.filter((id)=>!$df74fd5b33098157$export$f68871ba002ca835.hidden.has(id)));\n\n\n\nconst $0ca0e02f0a4bc377$var$history = window.history;\nconst $0ca0e02f0a4bc377$var$localStorage = window.localStorage;\nclass $0ca0e02f0a4bc377$export$7254cc27399e90bd {\n #current;\n #deltas;\n #id;\n #index;\n #original;\n #selectedTile;\n #version;\n constructor(id, original, deltas, deltasIndex, selectedTile, version){\n this.#id = id;\n this.#original = original;\n this.#deltas = deltas || [];\n this.#index = deltasIndex || this.#lastIndex();\n this.#selectedTile = selectedTile;\n this.#version = version ?? original.version;\n // Update current state\n this.#current = structuredClone(original);\n this.#deltas.filter((delta, index)=>index <= this.#index).forEach((delta)=>this.apply(delta));\n this.#updateCache(id);\n }\n apply(delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === \"string\") delta = JSON.parse(delta);\n console.debug(\"StateManager: applying delta\", delta);\n return (0, $3e2f0fa58ba587b4$export$1bb10639a2cd4297).patch(this.#current, delta);\n }\n canRedo() {\n return this.#index < this.#lastIndex();\n }\n canUndo() {\n return this.#index >= 0;\n }\n encode() {\n return (0, $3e2f0fa58ba587b4$export$4e633de97d65d1c8)(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: (0, $df74fd5b33098157$export$f68871ba002ca835).has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }));\n }\n getCurrent() {\n return structuredClone(this.#current);\n }\n getId() {\n return this.#id;\n }\n getTitle() {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : \"\");\n }\n getSelectedTile() {\n return this.#selectedTile;\n }\n moves() {\n return this.#index + 1;\n }\n length() {\n return this.#deltas.length;\n }\n redo() {\n const nextIndex = this.#index + 1;\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= nextIndex).forEach((delta)=>this.apply(delta));\n this.#index = nextIndex;\n this.#updateCache();\n }\n }\n reset() {\n this.#current = structuredClone(this.#original);\n this.#deltas = [];\n this.#index = this.#lastIndex();\n this.#selectedTile = undefined;\n $0ca0e02f0a4bc377$export$7254cc27399e90bd.clearCache(this.getId());\n this.#updateCache();\n }\n setSelectedTile(tile) {\n const id = tile?.coordinates.offset.toString();\n if (this.#selectedTile !== id) {\n this.#selectedTile = id;\n this.#updateCache();\n }\n }\n undo() {\n const previousIndex = this.#index - 1;\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= previousIndex).forEach((delta)=>this.apply(delta));\n this.#index = previousIndex;\n this.#updateCache();\n }\n }\n update(newState) {\n const delta = (0, $3e2f0fa58ba587b4$export$1bb10639a2cd4297).diff(this.#current, newState);\n console.debug(\"delta\", delta);\n if (delta === undefined) // Nothing to do\n return;\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1);\n this.apply(delta);\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta));\n this.#index = this.#lastIndex();\n this.#updateCache();\n }\n #key(key) {\n return $0ca0e02f0a4bc377$export$7254cc27399e90bd.key(key, this.getId());\n }\n #lastIndex() {\n return this.#deltas.length - 1;\n }\n #updateCache() {\n const id = this.getId();\n const state = this.encode();\n (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash = [\n \"\",\n id,\n state\n ].join(\"/\");\n $0ca0e02f0a4bc377$var$history.pushState({\n id: id,\n state: state\n }, \"\", (0, $3e2f0fa58ba587b4$export$128fa18b7194ef));\n $0ca0e02f0a4bc377$var$localStorage.setItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id, id);\n $0ca0e02f0a4bc377$var$localStorage.setItem(this.#key($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.state), state);\n }\n static clearCache(id) {\n if (!id) {\n // Clear everything\n (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash = \"\";\n $0ca0e02f0a4bc377$var$history.pushState({}, \"\", (0, $3e2f0fa58ba587b4$export$128fa18b7194ef));\n id = $0ca0e02f0a4bc377$var$localStorage.getItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id);\n $0ca0e02f0a4bc377$var$localStorage.clear();\n // Keep current puzzle ID\n $0ca0e02f0a4bc377$var$localStorage.setItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id, id);\n } else {\n // Clear a single puzzle\n (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash = `/${id}`;\n $0ca0e02f0a4bc377$var$history.pushState({\n id: id\n }, \"\", (0, $3e2f0fa58ba587b4$export$128fa18b7194ef));\n $0ca0e02f0a4bc377$var$localStorage.removeItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.key($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.state, id));\n }\n }\n static fromEncoded(state) {\n state = JSON.parse((0, $3e2f0fa58ba587b4$export$afb15ede80c42aab)(state));\n state.original = state.original || (0, $df74fd5b33098157$export$f68871ba002ca835).get(state.id);\n state.original.version ??= 0;\n return new $0ca0e02f0a4bc377$export$7254cc27399e90bd(state.id, state.original, state.deltas, state.deltasIndex, state.selectedTile, state.version);\n }\n static fromId(id) {\n return new $0ca0e02f0a4bc377$export$7254cc27399e90bd(id, (0, $df74fd5b33098157$export$f68871ba002ca835).get(id));\n }\n static resolve(id) {\n let state;\n // Allow cache to be cleared via URL param\n if ((0, $3e2f0fa58ba587b4$export$281ad3752a540efe).has($0ca0e02f0a4bc377$export$7254cc27399e90bd.ParamKeys.clearCache)) $0ca0e02f0a4bc377$export$7254cc27399e90bd.clearCache((0, $3e2f0fa58ba587b4$export$281ad3752a540efe).get($0ca0e02f0a4bc377$export$7254cc27399e90bd.ParamKeys.clearCache));\n const pathSegments = (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash.substring(1).split(\"/\").filter((path)=>path !== \"\");\n if (!id) // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path)=>!(0, $df74fd5b33098157$export$f68871ba002ca835).has(path)).some((segment, index)=>{\n try {\n state = $0ca0e02f0a4bc377$export$7254cc27399e90bd.fromEncoded(segment);\n id = state.getId();\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e);\n }\n return state !== undefined;\n });\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || $0ca0e02f0a4bc377$var$localStorage.getItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id) || (0, $df74fd5b33098157$export$f68871ba002ca835).visible.firstId;\n const localState = $0ca0e02f0a4bc377$var$localStorage.getItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.key($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.state, id));\n if (localState) try {\n state = $0ca0e02f0a4bc377$export$7254cc27399e90bd.fromEncoded(localState);\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e);\n }\n }\n if (state) {\n const cachedVersion = state.#version;\n const originalVersion = state.#original.version;\n if (cachedVersion !== originalVersion) {\n console.debug(`Invalidating cache for ID ${id} due to version mismatch. ` + `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`);\n state = undefined;\n $0ca0e02f0a4bc377$export$7254cc27399e90bd.clearCache(id);\n }\n }\n if (!state) // Fall back to loading state from Puzzles cache by ID\n state = $0ca0e02f0a4bc377$export$7254cc27399e90bd.fromId(id);\n if (!state) throw new Error(`Unable to resolve state for ID '${id}'`);\n return state;\n }\n static key(key, id) {\n return `${key}:${id}`;\n }\n static CacheKeys = Object.freeze({\n center: \"center\",\n id: \"id\",\n state: \"state\",\n zoom: \"zoom\"\n });\n static ParamKeys = Object.freeze({\n clearCache: \"clearCache\"\n });\n}\n\n\n\n\n\n\n\n\n\nclass $8010a1f4ac1afb69$export$a337a674d761bdc2 {\n #conditions = [];\n constructor(state){\n state.forEach((condition)=>this.#conditionFactory(condition));\n }\n teardown() {\n this.#conditions.forEach((condition)=>condition.teardown());\n $8010a1f4ac1afb69$export$a337a674d761bdc2.element.replaceChildren();\n }\n isSolved() {\n return this.#conditions.every((condition)=>condition.isMet());\n }\n #conditionFactory(condition) {\n switch(condition.type){\n case $8010a1f4ac1afb69$var$SolutionCondition.Types.connections:\n this.#conditions.push(new $8010a1f4ac1afb69$var$Connections(condition));\n break;\n case $8010a1f4ac1afb69$var$SolutionCondition.Types.moves:\n this.#conditions.push(new $8010a1f4ac1afb69$var$Moves(condition));\n break;\n default:\n console.warn(\"Ignoring condition with unknown type:\", condition.type);\n break;\n }\n }\n static element = document.getElementById(\"solution\");\n}\nclass $8010a1f4ac1afb69$var$SolutionCondition {\n constructor(state, elements){\n this.state = state;\n const li = document.createElement(\"li\");\n li.append(...elements);\n $8010a1f4ac1afb69$export$a337a674d761bdc2.element.append(li);\n }\n isMet() {}\n teardown() {}\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"connections\",\n \"moves\"\n ].map((type)=>[\n type,\n (0, $3e2f0fa58ba587b4$export$9a00dee1beb8f576)(type)\n ])));\n}\nclass $8010a1f4ac1afb69$var$Connections extends $8010a1f4ac1afb69$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #connections = [];\n constructor(state){\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $3e2f0fa58ba587b4$export$43941667eccc070)(\"/\"),\n required,\n (0, $3e2f0fa58ba587b4$export$f6292fcace2a1886)(\"link\", \"Connections\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $7a376349f5a360a3$export$3ad31a823e05e6fb).Events.Connection,\n handler: this.update\n },\n {\n type: (0, $7a376349f5a360a3$export$3ad31a823e05e6fb).Events.Disconnection,\n handler: this.update\n }\n ]);\n }\n isMet() {\n return this.#connections.length === this.state.amount;\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Connections.update\", event);\n const terminus = event.detail.terminus;\n const opening = event.detail.opening;\n const connectionId = `${terminus.id}:${opening.direction}`;\n const connectionIndex = this.#connections.findIndex((connection)=>connection === connectionId);\n if (opening.connected && connectionIndex < 0) this.#connections.push(connectionId);\n else if (!opening.connected && connectionIndex >= 0) this.#connections.splice(connectionIndex, 1);\n this.#completed.textContent = this.#connections.length.toString();\n }\n}\nclass $8010a1f4ac1afb69$var$Moves extends $8010a1f4ac1afb69$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #moves = 0;\n constructor(state){\n state.operator ??= $8010a1f4ac1afb69$var$Moves.Operators.equalTo;\n if (!Object.values($8010a1f4ac1afb69$var$Moves.Operators).includes(state.operator)) throw new Error(`Invalid moves operator: ${state.operator}`);\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $3e2f0fa58ba587b4$export$43941667eccc070)(state.operator),\n required,\n (0, $3e2f0fa58ba587b4$export$f6292fcace2a1886)(\"stacks\", \"Moves\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Events.Updated,\n handler: this.update\n }\n ]);\n }\n isMet() {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch(this.state.operator){\n case $8010a1f4ac1afb69$var$Moves.Operators.equalTo:\n return this.#moves === this.state.amount;\n case $8010a1f4ac1afb69$var$Moves.Operators.greaterThan:\n return this.#moves > this.state.amount;\n case $8010a1f4ac1afb69$var$Moves.Operators.lessThan:\n return this.#moves < this.state.amount;\n }\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Moves.update\", event);\n this.#moves = event.detail.state.moves();\n this.#completed.textContent = this.#moves.toString();\n }\n static Operators = Object.freeze({\n equalTo: \"=\",\n greaterThan: \">\",\n lessThan: \"<\"\n });\n}\n\n\n\nconst $b65a2f5625db2a92$var$elements = Object.freeze({\n main: document.getElementById(\"main\"),\n message: document.getElementById(\"message\"),\n next: document.getElementById(\"next\"),\n previous: document.getElementById(\"previous\"),\n puzzle: document.getElementById(\"puzzle\"),\n puzzleId: document.getElementById(\"puzzle-id\"),\n redo: document.getElementById(\"redo\"),\n reset: document.getElementById(\"reset\"),\n undo: document.getElementById(\"undo\"),\n title: document.querySelector(\"title\")\n});\nclass $b65a2f5625db2a92$export$a9753b1ffc289935 {\n connections = [];\n debug = false;\n error = false;\n layers = {};\n message;\n selectedTile;\n solved = false;\n #beams;\n #beamsUpdateDelay = 30;\n #collisions = {};\n #eventListeners = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #interact;\n #isUpdatingBeams = false;\n #mask;\n #maskQueue = [];\n #solution;\n #state;\n #termini;\n #tiles = [];\n constructor(){\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).settings.insertItems = false;\n // noinspection JSCheckFunctionSignatures\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).setup($b65a2f5625db2a92$var$elements.puzzle);\n this.#resize();\n this.layers.mask = new (0, $hvNIE.Layer)();\n this.layers.collisions = new (0, $hvNIE.Layer)();\n this.layers.debug = new (0, $hvNIE.Layer)();\n this.#eventListeners.add([\n {\n type: (0, $5625a4a7d65ce9b8$export$693b33588b3dd9d8).Events.Update,\n handler: this.#onBeamUpdate\n },\n {\n type: \"change\",\n element: $b65a2f5625db2a92$var$elements.puzzleId,\n handler: this.#onSelect\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.next,\n handler: this.#next\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.previous,\n handler: this.#previous\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.redo,\n handler: this.#redo\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.reset,\n handler: this.#reset\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.undo,\n handler: this.#undo\n },\n {\n type: \"keyup\",\n handler: this.#onKeyup\n },\n {\n type: (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked,\n handler: this.#onModifierInvoked\n },\n {\n type: $b65a2f5625db2a92$export$a9753b1ffc289935.Events.Mask,\n handler: this.#onMask\n },\n {\n type: \"resize\",\n element: window,\n handler: (0, $3e2f0fa58ba587b4$export$61fc7d43ac8f84b0)(this.#resize)\n },\n {\n type: (0, $ca3880ece69ea231$export$654f18991713c8c4).Events.Update,\n handler: this.#onStateUpdate\n },\n {\n type: \"tap\",\n element: $b65a2f5625db2a92$var$elements.puzzle,\n handler: this.#onTap\n }\n ]);\n this.#interact = new (0, $4f41d74d72b0a295$export$b0d759d807f751d4)($b65a2f5625db2a92$var$elements.puzzle);\n this.#updateDropdown();\n this.select();\n }\n centerOnTile(offset) {\n const tile = this.layout.getTileByOffset(offset);\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center = tile.center;\n }\n clearDebugPoints() {\n this.layers.debug.clear();\n }\n drawDebugPoint(point, style = {}) {\n const circle = new (0, $hvNIE.Path).Circle(Object.assign({\n radius: 3,\n fillColor: \"red\",\n strokeColor: \"white\",\n strokeWidth: 1,\n center: point\n }, style));\n this.layers.debug.addChild(circle);\n }\n getBeamsUpdateDelay() {\n return this.#beamsUpdateDelay;\n }\n getItems(tile) {\n return (tile ? this.#tiles.filter((t)=>t === tile) : this.#tiles).flatMap((tile)=>tile.items);\n }\n getTile(point) {\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.hitTest(point.ceil(), {\n fill: true,\n match: (result)=>result.item.data.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n });\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result;\n }\n mask(mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask);\n throw new Error(`Duplicate mask detected: ${mask.id}`);\n }\n this.#maskQueue.push(mask);\n return;\n }\n this.#mask = mask;\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter).map((tile)=>new (0, $4029f0d6ba5141b4$export$991dcf7284de63d)(tile, typeof mask.configuration.style === \"function\" ? mask.configuration.style(tile) : mask.configuration.style));\n this.layers.mask.addChildren(tiles.map((tile)=>tile.group));\n if (mask.message) $b65a2f5625db2a92$var$elements.message.textContent = mask.message;\n mask.onMask(this);\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Mask);\n }\n select(id) {\n if (id !== undefined && id === this.#state?.getId()) // This ID is already selected\n return;\n try {\n this.#state = (0, $0ca0e02f0a4bc377$export$7254cc27399e90bd).resolve(id);\n } catch (e) {\n this.#onError(e, \"Could not load puzzle.\");\n }\n this.#reload();\n }\n unmask() {\n this.layers.mask.removeChildren();\n this.#updateMessage(this.selectedTile);\n this.#mask.onUnmask(this);\n this.#mask = undefined;\n document.body.classList.remove($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Mask);\n const mask = this.#maskQueue.pop();\n if (mask) // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(()=>this.mask(mask), 0);\n }\n update() {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true;\n this.#updateBeams();\n }\n }\n updateSelectedTile(tile) {\n const previouslySelectedTile = this.selectedTile;\n this.selectedTile = tile;\n this.#state.setSelectedTile(tile);\n this.#updateMessage(tile);\n if (previouslySelectedTile && previouslySelectedTile !== tile) previouslySelectedTile.onDeselected(tile);\n if (tile && tile !== previouslySelectedTile) tile.onSelected(previouslySelectedTile);\n return previouslySelectedTile;\n }\n updateState() {\n this.#state.update(Object.assign(this.#state.getCurrent(), {\n layout: this.layout.getState()\n }));\n this.#updateActions();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #addLayers() {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer)=>(0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.addLayer(layer));\n }\n #next() {\n const id = (0, $df74fd5b33098157$export$f68871ba002ca835).visible.nextId(this.#state.getId());\n if (id) this.select(id);\n }\n #onBeamUpdate(event) {\n const beam = event.detail.beam;\n const state = event.detail.state;\n if (state?.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision)) {\n const collision = state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision);\n const collisionId = $b65a2f5625db2a92$export$a9753b1ffc289935.Collision.id(collision.point);\n const existing = this.#collisions[collisionId];\n if (existing) existing.addBeam(beam);\n else this.#collisions[collisionId] = new $b65a2f5625db2a92$export$a9753b1ffc289935.Collision(this.layers.collisions, [\n beam\n ], collision.point);\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration;\n if (mask?.beam?.equals(beam)) this.unmask();\n }\n Object.values(this.#collisions).forEach((collision)=>collision.update());\n this.#beams.filter((otherBeam)=>otherBeam !== beam).forEach((beam)=>beam.onBeamUpdated(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onError(error, message, cause) {\n this.error = true;\n // Support exclusion of error\n if (typeof error === \"string\") {\n message = error;\n cause = message;\n error = undefined;\n }\n if (error) console.error(error);\n cause = cause ?? error?.cause;\n if (cause) console.error(\"cause:\", cause);\n message = message ?? error?.message ?? \"The puzzle has encountered an error, please consider reporting.\";\n $b65a2f5625db2a92$var$elements.message.textContent = message;\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Error);\n }\n #onKeyup(event) {\n if (this.debug && event.key === \"s\") this.update();\n }\n #onMask(event) {\n console.debug(\"Mask event\", event);\n this.mask(event.detail.mask);\n }\n #onModifierInvoked(event) {\n const tile = event.detail.tile;\n this.#beams// Update beams in the tile being modified first\n .sort((beam)=>tile.items.some((item)=>item === beam) ? -1 : 0).forEach((beam)=>beam.onModifierInvoked(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onSelect(event) {\n this.select(event.target.value);\n }\n #onSolved() {\n if (this.solved) return;\n this.solved = true;\n this.updateSelectedTile(undefined);\n this.mask($b65a2f5625db2a92$export$a9753b1ffc289935.#solvedMask);\n const span = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\");\n span.textContent = \"celebration\";\n span.title = \"Solved!\";\n $b65a2f5625db2a92$var$elements.message.replaceChildren(span);\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Solved);\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Solved);\n }\n #onStateUpdate() {\n this.updateState();\n }\n #onTap(event) {\n let tile;\n if (this.solved || this.error) return;\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.hitTest(event.detail.point);\n switch(result?.item.data.type){\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.mask:\n return;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial);\n break;\n }\n // There is an active mask\n if (this.#mask) this.#mask.onTap(this, tile);\n else {\n const previouslySelectedTile = this.updateSelectedTile(tile);\n if (tile && tile === previouslySelectedTile) tile.onTap(event);\n }\n }\n #previous() {\n const id = (0, $df74fd5b33098157$export$f68871ba002ca835).visible.previousId(this.#state.getId());\n if (id) this.select(id);\n }\n #redo() {\n this.#state.redo();\n this.#reload();\n }\n #reload() {\n this.error = false;\n if (this.#state) this.#teardown();\n this.#setup();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #removeLayers() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.clear();\n }\n #reset() {\n this.#state.reset();\n this.#reload();\n }\n #resize() {\n const { width: width, height: height } = $b65a2f5625db2a92$var$elements.main.getBoundingClientRect();\n $b65a2f5625db2a92$var$elements.puzzle.style.height = height + \"px\";\n $b65a2f5625db2a92$var$elements.puzzle.style.width = width + \"px\";\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewSize = new (0, $hvNIE.Size)(width, height);\n }\n #setup() {\n // Reset the item IDs, so they are unique per-puzzle\n (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).uniqueId = 0;\n const { layout: layout, message: message, solution: solution } = this.#state.getCurrent();\n this.layout = new (0, $941a4b5ec82b485b$export$c84671f46d6a1ca)(layout);\n this.message = message;\n this.#solution = new (0, $8010a1f4ac1afb69$export$a337a674d761bdc2)(solution);\n this.#tiles = this.layout.tiles;\n this.#termini = this.layout.items.filter((item)=>item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.terminus);\n this.#beams = this.#termini.flatMap((terminus)=>terminus.beams);\n this.#addLayers();\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Loaded);\n const selectedTileId = this.#state.getSelectedTile();\n const selectedTile = selectedTileId ? this.layout.getTileByOffset(new (0, $ca914ef976dd611b$export$2e382909194b1aab)(...selectedTileId.split(\",\"))) : undefined;\n this.updateSelectedTile(selectedTile);\n this.update();\n this.#updateActions();\n }\n #teardown() {\n document.body.classList.remove(...Object.values($b65a2f5625db2a92$export$a9753b1ffc289935.Events));\n this.#removeLayers();\n this.#tiles.forEach((tile)=>tile.teardown());\n this.#tiles = [];\n this.#solution?.teardown();\n this.#solution = undefined;\n this.solved = false;\n this.layout?.teardown();\n this.layout = undefined;\n this.selectedTile = undefined;\n this.#beams = [];\n this.#collisions = {};\n this.#isUpdatingBeams = false;\n this.#mask = undefined;\n this.#termini = [];\n }\n #undo() {\n this.#state.undo();\n this.#reload();\n }\n #updateActions() {\n const id = this.#state.getId();\n const title = this.#state.getTitle();\n // Update browser title\n $b65a2f5625db2a92$var$elements.title.textContent = `Beaming: Puzzle ${title}`;\n (0, $3e2f0fa58ba587b4$export$c2255604a80b4506)(\"disabled\", ...Array.from(document.querySelectorAll(\"#actions li\")));\n const disable = [];\n if (!this.#state.canUndo()) disable.push($b65a2f5625db2a92$var$elements.undo);\n if (!this.#state.canRedo()) disable.push($b65a2f5625db2a92$var$elements.redo);\n if (!(0, $df74fd5b33098157$export$f68871ba002ca835).visible.has(id)) {\n // Custom puzzle\n $b65a2f5625db2a92$var$elements.puzzleId.value = \"\";\n disable.push($b65a2f5625db2a92$var$elements.previous, $b65a2f5625db2a92$var$elements.next);\n } else {\n $b65a2f5625db2a92$var$elements.puzzleId.value = id;\n if (id === (0, $df74fd5b33098157$export$f68871ba002ca835).visible.firstId) disable.push($b65a2f5625db2a92$var$elements.previous);\n else if (id === (0, $df74fd5b33098157$export$f68871ba002ca835).visible.lastId) disable.push($b65a2f5625db2a92$var$elements.next);\n }\n (0, $3e2f0fa58ba587b4$export$d2cf6cd1dc7067d3)(\"disabled\", ...disable);\n }\n #updateDropdown() {\n $b65a2f5625db2a92$var$elements.puzzleId.replaceChildren();\n for (const id of (0, $df74fd5b33098157$export$f68871ba002ca835).visible.ids){\n const option = document.createElement(\"option\");\n option.value = id;\n option.innerText = (0, $df74fd5b33098157$export$f68871ba002ca835).titles[id];\n $b65a2f5625db2a92$var$elements.puzzleId.append(option);\n }\n }\n #updateBeams() {\n const beams = this.#beams.filter((beam)=>beam.isPending());\n if (!beams.length) {\n this.#isUpdatingBeams = false;\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(()=>{\n if (this.#solution.isSolved()) this.#onSolved();\n }, 0);\n return;\n }\n if (this.debug) this.layers.debug.clear();\n beams.forEach((beam)=>beam.step(this));\n // Ensure the UI has a chance to update between loops\n setTimeout(()=>this.#updateBeams(), this.#beamsUpdateDelay);\n }\n #updateMessage(tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items.map((item)=>item.getColorElements(tile)).find((colorElements)=>colorElements.length > 0) || [];\n $b65a2f5625db2a92$var$elements.message.replaceChildren(...colorElements);\n } else $b65a2f5625db2a92$var$elements.message.textContent = this.message || \"Select a tile\";\n }\n static Collision = class {\n constructor(layer, beams, point, item){\n this.id = $b65a2f5625db2a92$export$a9753b1ffc289935.Collision.id(point);\n this.layer = layer;\n this.beams = beams;\n this.point = point;\n this.item = item;\n }\n addBeam(beam) {\n if (!this.beams.some((otherBeam)=>otherBeam.id === beam.id)) this.beams.push(beam);\n return this.beams;\n }\n addItem(color) {\n this.item = new (0, $729c2b05fa2dedeb$export$88c9f72b40fcdd85)({\n center: this.point,\n color: color\n });\n this.layer.addChild(this.item.group);\n }\n equals(other) {\n return (0, $3e2f0fa58ba587b4$export$c23f9d3341b5fd07)(this.point, other?.point);\n }\n getColor() {\n return this.beams.length ? (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(this.beams.map((beam)=>beam.getColor())).hex() : undefined;\n }\n removeItem() {\n if (this.item) {\n this.item.remove();\n this.item = undefined;\n }\n }\n update() {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam)=>this.equals(beam.getCollision()));\n const color = this.getColor();\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) this.removeItem();\n // Add missing collision items\n if (this.beams.length && !this.item) this.addItem(color);\n }\n static id(point) {\n const rounded = point.round();\n return [\n rounded.x,\n rounded.y\n ].join(\",\");\n }\n };\n static Events = Object.freeze({\n Error: \"puzzle-error\",\n Loaded: \"puzzle-loaded\",\n Mask: \"puzzle-mask\",\n Solved: \"puzzle-solved\",\n Updated: \"puzzle-updated\"\n });\n static Mask = class {\n constructor(configuration = {}){\n configuration.style ??= {};\n this.configuration = configuration;\n this.id = configuration.id;\n this.message = configuration.message;\n this.tileFilter = configuration.tileFilter ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525)(true);\n this.onMask = configuration.onMask ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.onTap = configuration.onTap ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.onUnmask = configuration.onUnmask ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n }\n equals(other) {\n return this.id === other.id;\n }\n };\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item)=>item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam && item.isConnected();\n static #solvedMask = new $b65a2f5625db2a92$export$a9753b1ffc289935.Mask({\n style: (tile)=>{\n const beams = tile.items.filter($b65a2f5625db2a92$export$a9753b1ffc289935.#connectedBeams);\n const colors = beams.flatMap((beam)=>beam.getSteps(tile).flatMap((step)=>step.color));\n return {\n fillColor: (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(colors).hex()\n };\n },\n tileFilter: (tile)=>tile.items.some($b65a2f5625db2a92$export$a9753b1ffc289935.#connectedBeams)\n });\n}\n\n\n\nconst $250751c5950a3842$var$script = document.createElement(\"script\");\n$250751c5950a3842$var$script.setAttribute(\"src\", \"https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS\");\ndocument.head.append($250751c5950a3842$var$script);\nconst $250751c5950a3842$var$dataLayer = window.dataLayer = window.dataLayer || [];\nfunction $250751c5950a3842$var$gtag() {\n $250751c5950a3842$var$dataLayer.push(arguments);\n}\n$250751c5950a3842$var$gtag(\"js\", new Date());\n$250751c5950a3842$var$gtag(\"config\", \"G-HXLD6EE5NS\");\n\n\nconst $e22b5ab31fbd25da$var$doorbellOptions = window.doorbellOptions = {\n appKey: \"o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC\",\n container: document.getElementById(\"feedback-container\"),\n hideButton: true,\n properties: {}\n};\nconst $e22b5ab31fbd25da$var$script = document.createElement(\"script\");\n$e22b5ab31fbd25da$var$script.setAttribute(\"src\", \"https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0\");\ndocument.head.append($e22b5ab31fbd25da$var$script);\ndocument.addEventListener(\"puzzle-updated\", (event)=>{\n $e22b5ab31fbd25da$var$doorbellOptions.properties.puzzleId = event.detail.state.getId();\n});\n\n\nconst $2fd5a75c703b0f49$var$puzzle = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935)();\nconst $2fd5a75c703b0f49$var$beaming = {\n debug: $f1fc5431671d3192$export$1c9f709888824e05,\n puzzle: $2fd5a75c703b0f49$var$puzzle\n};\n// Used by functional tests\n$2fd5a75c703b0f49$var$beaming.centerOnTile = function(r, c) {\n return $2fd5a75c703b0f49$var$puzzle.centerOnTile(new (0, $ca914ef976dd611b$export$2e382909194b1aab)(r, c));\n};\n$2fd5a75c703b0f49$var$beaming.clearDebugPoints = $2fd5a75c703b0f49$var$puzzle.clearDebugPoints.bind($2fd5a75c703b0f49$var$puzzle);\n$2fd5a75c703b0f49$var$beaming.drawDebugPoint = function(x, y, style) {\n return $2fd5a75c703b0f49$var$puzzle.drawDebugPoint(new (0, $hvNIE.Point)(x, y), style);\n};\n// Export\nwindow.beaming = $2fd5a75c703b0f49$var$beaming;\n\n})();\n//# sourceMappingURL=index.9b656316.js.map\n","/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.17\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tminDistance = this.minDistance,\n\t\t\tmaxDistance = this.maxDistance,\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(minDistance, maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0],\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]* 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","\"use strict\";","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // operators --> modify existing Colors\n\n\n\n\n\n\n\n\n\n\n // interpolators\n\n\n\n\n\n\n\n\n\n\n\n\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n\n // scale\n chroma.scales = scales;\n\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n\n var chroma_js = chroma;\n\n return chroma_js;\n\n}));\n","import { Layout } from './layout'\nimport chroma from 'chroma-js'\nimport paper, { Layer, Path, Size } from 'paper'\nimport { addClass, debounce, emitEvent, fuzzyEquals, noop, removeClass } from './util'\nimport { Item } from './item'\nimport { Mask } from './items/mask'\nimport { Modifier } from './modifier'\nimport { Beam } from './items/beam'\nimport { Collision as CollisionItem } from './items/collision'\nimport { Stateful } from './stateful'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { State } from './state'\nimport { Puzzles } from '../puzzles'\nimport { StepState } from './step'\nimport { EventListeners } from './eventListeners'\nimport { Solution } from './solution'\nimport { Interact } from './interact'\n\nconst elements = Object.freeze({\n main: document.getElementById('main'),\n message: document.getElementById('message'),\n next: document.getElementById('next'),\n previous: document.getElementById('previous'),\n puzzle: document.getElementById('puzzle'),\n puzzleId: document.getElementById('puzzle-id'),\n redo: document.getElementById('redo'),\n reset: document.getElementById('reset'),\n undo: document.getElementById('undo'),\n title: document.querySelector('title')\n})\n\n// There are various spots below that utilize setTimeout in order to process events in order and to prevent\n// long-running computations from blocking UI updates.\n// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop\nexport class Puzzle {\n connections = []\n debug = false\n error = false\n layers = {}\n message\n selectedTile\n solved = false\n\n #beams\n #beamsUpdateDelay = 30\n #collisions = {}\n #eventListeners = new EventListeners({ context: this })\n #interact\n #isUpdatingBeams = false\n #mask\n #maskQueue = []\n #solution\n #state\n #termini\n #tiles = []\n\n constructor () {\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n paper.settings.insertItems = false\n // noinspection JSCheckFunctionSignatures\n paper.setup(elements.puzzle)\n\n this.#resize()\n\n this.layers.mask = new Layer()\n this.layers.collisions = new Layer()\n this.layers.debug = new Layer()\n\n this.#eventListeners.add([\n { type: Beam.Events.Update, handler: this.#onBeamUpdate },\n { type: 'change', element: elements.puzzleId, handler: this.#onSelect },\n { type: 'click', element: elements.next, handler: this.#next },\n { type: 'click', element: elements.previous, handler: this.#previous },\n { type: 'click', element: elements.redo, handler: this.#redo },\n { type: 'click', element: elements.reset, handler: this.#reset },\n { type: 'click', element: elements.undo, handler: this.#undo },\n { type: 'keyup', handler: this.#onKeyup },\n { type: Modifier.Events.Invoked, handler: this.#onModifierInvoked },\n { type: Puzzle.Events.Mask, handler: this.#onMask },\n { type: 'resize', element: window, handler: debounce(this.#resize) },\n { type: Stateful.Events.Update, handler: this.#onStateUpdate },\n { type: 'tap', element: elements.puzzle, handler: this.#onTap }\n ])\n\n this.#interact = new Interact(elements.puzzle)\n this.#updateDropdown()\n\n this.select()\n }\n\n centerOnTile (offset) {\n const tile = this.layout.getTileByOffset(offset)\n paper.view.center = tile.center\n }\n\n clearDebugPoints () {\n this.layers.debug.clear()\n }\n\n drawDebugPoint (point, style = {}) {\n const circle = new Path.Circle(Object.assign({\n radius: 3,\n fillColor: 'red',\n strokeColor: 'white',\n strokeWidth: 1,\n center: point\n }, style))\n this.layers.debug.addChild(circle)\n }\n\n getBeamsUpdateDelay () {\n return this.#beamsUpdateDelay\n }\n\n getItems (tile) {\n return (tile ? this.#tiles.filter((t) => t === tile) : this.#tiles).flatMap((tile) => tile.items)\n }\n\n getTile (point) {\n const result = paper.project.hitTest(point.ceil(), {\n fill: true,\n match: (result) => result.item.data.type === Item.Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n })\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result\n }\n\n mask (mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask)\n throw new Error(`Duplicate mask detected: ${mask.id}`)\n }\n\n this.#maskQueue.push(mask)\n return\n }\n\n this.#mask = mask\n\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter)\n .map((tile) => new Mask(\n tile,\n typeof mask.configuration.style === 'function'\n ? mask.configuration.style(tile)\n : mask.configuration.style\n ))\n\n this.layers.mask.addChildren(tiles.map((tile) => tile.group))\n\n if (mask.message) {\n elements.message.textContent = mask.message\n }\n\n mask.onMask(this)\n\n document.body.classList.add(Puzzle.Events.Mask)\n }\n\n select (id) {\n if (id !== undefined && id === this.#state?.getId()) {\n // This ID is already selected\n return\n }\n\n try {\n this.#state = State.resolve(id)\n } catch (e) {\n this.#onError(e, 'Could not load puzzle.')\n }\n\n this.#reload()\n }\n\n unmask () {\n this.layers.mask.removeChildren()\n this.#updateMessage(this.selectedTile)\n this.#mask.onUnmask(this)\n this.#mask = undefined\n\n document.body.classList.remove(Puzzle.Events.Mask)\n\n const mask = this.#maskQueue.pop()\n if (mask) {\n // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(() => this.mask(mask), 0)\n }\n }\n\n update () {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true\n this.#updateBeams()\n }\n }\n\n updateSelectedTile (tile) {\n const previouslySelectedTile = this.selectedTile\n\n this.selectedTile = tile\n this.#state.setSelectedTile(tile)\n this.#updateMessage(tile)\n\n if (previouslySelectedTile && previouslySelectedTile !== tile) {\n previouslySelectedTile.onDeselected(tile)\n }\n\n if (tile && tile !== previouslySelectedTile) {\n tile.onSelected(previouslySelectedTile)\n }\n\n return previouslySelectedTile\n }\n\n updateState () {\n this.#state.update(Object.assign(this.#state.getCurrent(), { layout: this.layout.getState() }))\n this.#updateActions()\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #addLayers () {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer) => paper.project.addLayer(layer))\n }\n\n #next () {\n const id = Puzzles.visible.nextId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #onBeamUpdate (event) {\n const beam = event.detail.beam\n const state = event.detail.state\n\n if (state?.has(StepState.Collision)) {\n const collision = state.get(StepState.Collision)\n const collisionId = Puzzle.Collision.id(collision.point)\n const existing = this.#collisions[collisionId]\n\n if (existing) {\n existing.addBeam(beam)\n } else {\n this.#collisions[collisionId] = new Puzzle.Collision(this.layers.collisions, [beam], collision.point)\n }\n\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration\n if (mask?.beam?.equals(beam)) {\n this.unmask()\n }\n }\n\n Object.values(this.#collisions).forEach((collision) => collision.update())\n\n this.#beams\n .filter((otherBeam) => otherBeam !== beam)\n .forEach((beam) => beam.onBeamUpdated(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onError (error, message, cause) {\n this.error = true\n\n // Support exclusion of error\n if (typeof error === 'string') {\n message = error\n cause = message\n error = undefined\n }\n\n if (error) {\n console.error(error)\n }\n\n cause = cause ?? error?.cause\n if (cause) {\n console.error('cause:', cause)\n }\n\n message = message ?? error?.message ?? 'The puzzle has encountered an error, please consider reporting.'\n elements.message.textContent = message\n document.body.classList.add(Puzzle.Events.Error)\n }\n\n #onKeyup (event) {\n if (this.debug && event.key === 's') {\n this.update()\n }\n }\n\n #onMask (event) {\n console.debug('Mask event', event)\n this.mask(event.detail.mask)\n }\n\n #onModifierInvoked (event) {\n const tile = event.detail.tile\n\n this.#beams\n // Update beams in the tile being modified first\n .sort((beam) => tile.items.some((item) => item === beam) ? -1 : 0)\n .forEach((beam) => beam.onModifierInvoked(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onSelect (event) {\n this.select(event.target.value)\n }\n\n #onSolved () {\n if (this.solved) {\n return\n }\n\n this.solved = true\n\n this.updateSelectedTile(undefined)\n this.mask(Puzzle.#solvedMask)\n\n const span = document.createElement('span')\n span.classList.add('material-symbols-outlined')\n span.textContent = 'celebration'\n span.title = 'Solved!'\n\n elements.message.replaceChildren(span)\n\n document.body.classList.add(Puzzle.Events.Solved)\n emitEvent(Puzzle.Events.Solved)\n }\n\n #onStateUpdate () {\n this.updateState()\n }\n\n #onTap (event) {\n let tile\n\n if (this.solved || this.error) {\n return\n }\n\n const result = paper.project.hitTest(event.detail.point)\n\n switch (result?.item.data.type) {\n case Item.Types.mask:\n return\n case Item.Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial)\n break\n }\n\n // There is an active mask\n if (this.#mask) {\n this.#mask.onTap(this, tile)\n } else {\n const previouslySelectedTile = this.updateSelectedTile(tile)\n\n if (tile && tile === previouslySelectedTile) {\n tile.onTap(event)\n }\n }\n }\n\n #previous () {\n const id = Puzzles.visible.previousId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #redo () {\n this.#state.redo()\n this.#reload()\n }\n\n #reload () {\n this.error = false\n\n if (this.#state) {\n this.#teardown()\n }\n\n this.#setup()\n\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #removeLayers () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n paper.project.clear()\n }\n\n #reset () {\n this.#state.reset()\n this.#reload()\n }\n\n #resize () {\n const { width, height } = elements.main.getBoundingClientRect()\n elements.puzzle.style.height = height + 'px'\n elements.puzzle.style.width = width + 'px'\n paper.view.viewSize = new Size(width, height)\n }\n\n #setup () {\n // Reset the item IDs, so they are unique per-puzzle\n Item.uniqueId = 0\n\n const { layout, message, solution } = this.#state.getCurrent()\n\n this.layout = new Layout(layout)\n this.message = message\n this.#solution = new Solution(solution)\n\n this.#tiles = this.layout.tiles\n this.#termini = this.layout.items.filter((item) => item.type === Item.Types.terminus)\n this.#beams = this.#termini.flatMap((terminus) => terminus.beams)\n\n this.#addLayers()\n\n document.body.classList.add(Puzzle.Events.Loaded)\n\n const selectedTileId = this.#state.getSelectedTile()\n const selectedTile = selectedTileId\n ? this.layout.getTileByOffset(new OffsetCoordinates(...selectedTileId.split(',')))\n : undefined\n\n this.updateSelectedTile(selectedTile)\n this.update()\n this.#updateActions()\n }\n\n #teardown () {\n document.body.classList.remove(...Object.values(Puzzle.Events))\n\n this.#removeLayers()\n\n this.#tiles.forEach((tile) => tile.teardown())\n this.#tiles = []\n this.#solution?.teardown()\n this.#solution = undefined\n this.solved = false\n this.layout?.teardown()\n this.layout = undefined\n this.selectedTile = undefined\n this.#beams = []\n this.#collisions = {}\n this.#isUpdatingBeams = false\n this.#mask = undefined\n this.#termini = []\n }\n\n #undo () {\n this.#state.undo()\n this.#reload()\n }\n\n #updateActions () {\n const id = this.#state.getId()\n const title = this.#state.getTitle()\n\n // Update browser title\n elements.title.textContent = `Beaming: Puzzle ${title}`\n\n removeClass('disabled', ...Array.from(document.querySelectorAll('#actions li')))\n\n const disable = []\n\n if (!this.#state.canUndo()) {\n disable.push(elements.undo)\n }\n\n if (!this.#state.canRedo()) {\n disable.push(elements.redo)\n }\n\n if (!Puzzles.visible.has(id)) {\n // Custom puzzle\n elements.puzzleId.value = ''\n disable.push(elements.previous, elements.next)\n } else {\n elements.puzzleId.value = id\n\n if (id === Puzzles.visible.firstId) {\n disable.push(elements.previous)\n } else if (id === Puzzles.visible.lastId) {\n disable.push(elements.next)\n }\n }\n\n addClass('disabled', ...disable)\n }\n\n #updateDropdown () {\n elements.puzzleId.replaceChildren()\n for (const id of Puzzles.visible.ids) {\n const option = document.createElement('option')\n option.value = id\n option.innerText = Puzzles.titles[id]\n elements.puzzleId.append(option)\n }\n }\n\n #updateBeams () {\n const beams = this.#beams.filter((beam) => beam.isPending())\n\n if (!beams.length) {\n this.#isUpdatingBeams = false\n\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(() => {\n if (this.#solution.isSolved()) {\n this.#onSolved()\n }\n }, 0)\n return\n }\n\n if (this.debug) {\n this.layers.debug.clear()\n }\n\n beams.forEach((beam) => beam.step(this))\n\n // Ensure the UI has a chance to update between loops\n setTimeout(() => this.#updateBeams(), this.#beamsUpdateDelay)\n }\n\n #updateMessage (tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items\n .map((item) => item.getColorElements(tile))\n .find((colorElements) => colorElements.length > 0) || []\n elements.message.replaceChildren(...colorElements)\n } else {\n elements.message.textContent = this.message || 'Select a tile'\n }\n }\n\n static Collision = class {\n constructor (layer, beams, point, item = undefined) {\n this.id = Puzzle.Collision.id(point)\n this.layer = layer\n this.beams = beams\n this.point = point\n this.item = item\n }\n\n addBeam (beam) {\n if (!this.beams.some((otherBeam) => otherBeam.id === beam.id)) {\n this.beams.push(beam)\n }\n\n return this.beams\n }\n\n addItem (color) {\n this.item = new CollisionItem({ center: this.point, color })\n this.layer.addChild(this.item.group)\n }\n\n equals (other) {\n return fuzzyEquals(this.point, other?.point)\n }\n\n getColor () {\n return this.beams.length\n ? chroma.average(this.beams.map((beam) => beam.getColor())).hex()\n : undefined\n }\n\n removeItem () {\n if (this.item) {\n this.item.remove()\n this.item = undefined\n }\n }\n\n update () {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam) => this.equals(beam.getCollision()))\n\n const color = this.getColor()\n\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) {\n this.removeItem()\n }\n\n // Add missing collision items\n if (this.beams.length && !this.item) {\n this.addItem(color)\n }\n }\n\n static id (point) {\n const rounded = point.round()\n return [rounded.x, rounded.y].join(',')\n }\n }\n\n static Events = Object.freeze({\n Error: 'puzzle-error',\n Loaded: 'puzzle-loaded',\n Mask: 'puzzle-mask',\n Solved: 'puzzle-solved',\n Updated: 'puzzle-updated'\n })\n\n static Mask = class {\n constructor (configuration = {}) {\n configuration.style ??= {}\n this.configuration = configuration\n\n this.id = configuration.id\n this.message = configuration.message\n this.tileFilter = configuration.tileFilter ?? noop(true)\n this.onMask = configuration.onMask ?? noop\n this.onTap = configuration.onTap ?? noop\n this.onUnmask = configuration.onUnmask ?? noop\n }\n\n equals (other) {\n return this.id === other.id\n }\n }\n\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item) => item.type === Item.Types.beam && item.isConnected()\n\n static #solvedMask = new Puzzle.Mask({\n style: (tile) => {\n const beams = tile.items.filter(Puzzle.#connectedBeams)\n const colors = beams.flatMap((beam) => beam.getSteps(tile).flatMap((step) => step.color))\n return { fillColor: chroma.average(colors).hex() }\n },\n tileFilter: (tile) => tile.items.some(Puzzle.#connectedBeams)\n })\n}\n","import paper, { Layer } from 'paper'\nimport { CubeCoordinates } from './coordinates/cube'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { Tile } from './items/tile'\nimport { getConvertedDirection } from './util'\nimport { Stateful } from './stateful'\n\nexport class Layout extends Stateful {\n #tilesByAxial = []\n #tilesByOffset = []\n\n items = []\n layers = {}\n tiles = []\n tileSize = 120\n\n constructor (state) {\n super(state)\n\n this.type = state.type || Layout.Types.oddR\n\n const center = paper.view.center\n const parameters = Tile.parameters(this.tileSize)\n const tiles = state.tiles\n\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width\n const startingOffsetY = center.y - (height / 2)\n\n this.layers.tiles = new Layer()\n this.layers.items = new Layer()\n\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index) => {\n const length = row.length\n\n // Favor offset rows, since they will be wider\n if (length > current.length || (length === current.length && this.#isOffsetRow(index))) {\n return { index, length }\n }\n\n return current\n }, { index: 0, length: 0 })\n\n const width = (widestRow.length * parameters.width) + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0)\n const startingOffsetX = center.x - (width / 2)\n\n for (let r = 0; r < tiles.length; r++) {\n const row = tiles[r]\n const rowByAxial = new Array(row.length).fill(null)\n const rowByOffset = new Array(row.length).fill(null)\n const rowOffset = Math.floor(r / 2)\n\n for (let c = 0; c < row.length; c++) {\n const axial = new CubeCoordinates(c - rowOffset, r)\n const offset = new OffsetCoordinates(r, c)\n\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY\n }\n\n const state = row[c]\n if (!state) {\n continue\n }\n\n const tile = new Tile({ axial, offset }, layout, parameters, state)\n\n this.layers.tiles.addChild(tile.group)\n\n if (tile.items.length) {\n this.items.push(...tile.items)\n this.layers.items.addChildren(tile.items.map((item) => item.group))\n }\n\n this.tiles.push(tile)\n\n rowByAxial[axial.q] = tile\n rowByOffset[offset.c] = tile\n }\n\n this.#tilesByAxial.push(rowByAxial)\n this.#tilesByOffset.push(rowByOffset)\n }\n }\n\n getTileByAxial (axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q]\n }\n\n getTileByOffset (offset) {\n return this.#tilesByOffset[offset.r][offset.c]\n }\n\n getState () {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row) => row.map((tile) => tile?.getState() || null))\n })\n }\n\n getNeighboringTile (axial, direction) {\n return this.getTileByAxial(CubeCoordinates.neighbor(axial, getConvertedDirection(direction)))\n }\n\n teardown () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n }\n\n #isOffsetRow (index) {\n return index % 2 === 0 ? this.type === Layout.Types.evenR : this.type === Layout.Types.oddR\n }\n\n static Types = Object.freeze({\n evenR: 'even-r',\n oddR: 'odd-r'\n })\n}\n","import { OffsetCoordinates } from './offset'\n\n/**\n * @see https://www.redblobgames.com/grids/hexagons/#coordinates\n */\nexport class CubeCoordinates {\n constructor (q, r, s) {\n if (!s) s = -q - r\n this.coordinates = [q, r, s]\n this.q = q\n this.r = r\n this.s = s\n }\n\n add (other) {\n return CubeCoordinates.add(this, other)\n }\n\n equals (other) {\n return this.q === other.q && this.r === other.r && this.s === other.s\n }\n\n isNeighbor (other) {\n return CubeCoordinates.isNeighbor(this, other)\n }\n\n neighbor (direction) {\n return CubeCoordinates.neighbor(this, direction)\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static add (a, b) {\n return new CubeCoordinates(a.q + b.q, a.r + b.r)\n }\n\n static direction (direction) {\n if (direction === 0) direction = 6\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return CubeCoordinates.directions[6 - direction]\n }\n\n static directions = [\n new CubeCoordinates(1, 0),\n new CubeCoordinates(1, -1),\n new CubeCoordinates(0, -1),\n new CubeCoordinates(-1, 0),\n new CubeCoordinates(-1, 1),\n new CubeCoordinates(0, 1)\n ]\n\n static isNeighbor (a, b) {\n return CubeCoordinates.directions\n .map((direction) => CubeCoordinates.add(a, direction))\n .some((neighbor) => neighbor.equals(b))\n }\n\n static neighbor (start, direction) {\n return CubeCoordinates.add(start, CubeCoordinates.direction(direction))\n }\n\n static toOffsetCoordinates (axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2\n return new OffsetCoordinates(c, axial.r)\n }\n}\n","import { CubeCoordinates } from './cube'\n\nexport class OffsetCoordinates {\n constructor (r, c) {\n this.coordinates = [r, c]\n this.r = r\n this.c = c\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static toAxialCoordinates (offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2\n return new CubeCoordinates(q, offset.r)\n }\n}\n","import { Color, Path, Point } from 'paper'\nimport { Item } from '../item'\nimport { itemFactory } from '../itemFactory'\nimport { emitEvent, getPointBetween } from '../util'\nimport { modifierFactory } from '../modifierFactory'\n\nexport class Tile extends Item {\n selected = false\n\n #ui\n\n constructor (coordinates, layout, parameters, state) {\n super(null, state, { locked: false })\n\n this.#ui = Tile.ui(layout, parameters, state, { coordinates, type: this.type })\n\n this.center = this.#ui.center\n this.coordinates = coordinates\n this.hexagon = this.#ui.hexagon\n this.parameters = parameters\n this.styles = this.#ui.styles\n\n this.group.addChildren([this.#ui.hexagon, this.#ui.indicator])\n\n // These need to be last, since they reference this\n this.items = (state.items || [])\n .map((state) => itemFactory(this, state))\n .filter((item) => item !== undefined)\n\n this.modifiers = (state.modifiers || [])\n .map((state) => modifierFactory(this, state))\n .filter((modifier) => modifier !== undefined)\n\n this.update()\n }\n\n addItem (item) {\n this.items.unshift(item)\n this.update()\n }\n\n addModifier (modifier) {\n this.modifiers.unshift(modifier)\n this.update()\n }\n\n afterModify () {\n this.setStyle(this.selected ? 'selected' : 'default')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: false }))\n }\n\n beforeModify () {\n this.group.bringToFront()\n this.setStyle('edit')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: true }))\n }\n\n getState () {\n const state = { type: this.type }\n\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item) => item.type !== Item.Types.beam).map((item) => item.getState())\n if (items.length) {\n state.items = items\n }\n\n const modifiers = this.modifiers.map((modifier) => modifier.getState())\n if (modifiers.length) {\n state.modifiers = modifiers\n }\n\n return state\n }\n\n onTap (event) {\n console.debug(this.coordinates.offset.toString(), this)\n this.items.forEach((item) => item.onTap(event))\n }\n\n onDeselected (selectedTile) {\n this.selected = false\n this.#ui.hexagon.style = this.styles.default\n this.items.forEach((item) => item.onDeselected())\n this.modifiers.forEach((modifier) => modifier.detach())\n\n emitEvent(Tile.Events.Deselected, { selectedTile, deselectedTile: this })\n }\n\n onSelected (deselectedTile) {\n this.selected = true\n this.group.bringToFront()\n this.#ui.hexagon.style = this.styles.selected\n this.items.forEach((item) => item.onSelected())\n this.modifiers.forEach((modifier) => modifier.attach())\n }\n\n removeItem (item) {\n const index = this.items.indexOf(item)\n if (index >= 0) {\n this.items.splice(index, 1)\n this.update()\n }\n }\n\n removeModifier (modifier) {\n const index = this.modifiers.indexOf(modifier)\n if (index >= 0) {\n this.modifiers.splice(index, 1)\n this.update()\n }\n }\n\n setStyle (style) {\n this.hexagon.set(this.styles[style])\n }\n\n teardown () {\n this.modifiers.forEach((modifier) => modifier.detach())\n }\n\n toString () {\n return this.coordinates.offset.toString()\n }\n\n update () {\n super.update()\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0\n }\n\n static parameters (height) {\n const circumradius = height / 2\n const width = Math.sqrt(3) * circumradius\n const inradius = width / 2\n const offsetY = height * (3 / 4)\n\n return {\n circumradius,\n height,\n inradius,\n offsetY,\n width\n }\n }\n\n static ui (layout, parameters, configuration, data) {\n const center = new Point(\n layout.startingOffsetX + parameters.inradius + layout.column * parameters.width,\n layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY\n )\n\n const dashWidth = parameters.circumradius / 10\n\n const styles = Object.assign(\n {},\n Tile.Styles,\n {\n edit: Object.assign({ dashArray: [dashWidth, dashWidth] }, Tile.Styles.edit)\n },\n configuration.style || {}\n )\n\n const hexagon = new Path.RegularPolygon({\n center,\n closed: true,\n data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n })\n\n const indicator = new Path.RegularPolygon({\n center: getPointBetween(hexagon.segments[1].point, center, (length) => length / 3),\n data: { collidable: false },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: { fillColor: '#ccc' }\n })\n\n return { center, hexagon, indicator, styles }\n }\n\n static Events = Object.freeze({\n Deselected: 'tile-deselected',\n Selected: 'tile-selected'\n })\n\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new Color('white'),\n strokeColor: new Color('#666'),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new Color('black'),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new Color('black'),\n strokeWidth: 2\n }\n })\n}\n","import { capitalize } from './util'\nimport { CompoundPath, Group } from 'paper'\nimport { Stateful } from './stateful'\n\nexport class Item extends Stateful {\n center\n data\n group\n id = Item.uniqueId++\n // Whether the item can be clicked on\n locked\n parent\n sortOrder = 100\n type\n\n constructor (parent, state, configuration) {\n super(state)\n\n this.type = state?.type || configuration?.type\n this.data = Object.assign({ id: this.id, type: this.type }, configuration?.data || {})\n this.locked = configuration?.locked !== false\n\n if (parent) {\n this.center = parent.center\n }\n\n this.parent = parent\n this.group = new Group({ data: this.data, locked: this.locked })\n }\n\n equals (otherItem) {\n return otherItem instanceof Item && this.id === otherItem.id\n }\n\n getColorElements () {\n return []\n }\n\n getCompoundPath () {\n return new CompoundPath({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({ insert: false }).children\n .filter((child) => child.data.collidable !== false)\n })\n }\n\n getIndex () {\n return this.group.index\n }\n\n getLayer () {\n return this.group.parent\n }\n\n onTap () {}\n\n onCollision ({ collisionStep }) {\n return collisionStep\n }\n\n onDeselected () { }\n\n onInitialization () {}\n\n onSelected () {}\n\n remove () {\n this.group.remove()\n }\n\n toString () {\n return `[${this.type}:${this.id}]`\n }\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'beam',\n 'collision',\n 'filter',\n 'mask',\n 'portal',\n 'reflector',\n 'terminus',\n 'tile',\n 'wall'\n ].map((type) => [type, capitalize(type)])))\n\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0\n}\n","import { emitEvent } from './util'\n\nexport class Stateful {\n #state = {}\n\n constructor (state) {\n this.setState(state)\n }\n\n getState () {\n return structuredClone(this.#state)\n }\n\n setState (state) {\n this.#state = structuredClone(state)\n }\n\n updateState (updater, dispatchEvent = true) {\n updater(this.#state)\n\n if (dispatchEvent) {\n emitEvent(Stateful.Events.Update, { object: this })\n }\n\n return this.getState()\n }\n\n static Events = Object.freeze({\n Update: 'state-update'\n })\n}\n","import { Filter } from './items/filter'\nimport { Portal } from './items/portal'\nimport { Terminus } from './items/terminus'\nimport { Reflector } from './items/reflector'\nimport { Wall } from './items/wall'\nimport { Item } from './item'\n\nexport function itemFactory (parent, configuration) {\n let item\n\n switch (configuration.type) {\n case Item.Types.filter:\n item = new Filter(parent, configuration)\n break\n case Item.Types.portal:\n item = new Portal(parent, configuration)\n break\n case Item.Types.terminus:\n item = new Terminus(parent, configuration)\n break\n case Item.Types.reflector:\n item = new Reflector(parent, configuration)\n break\n case Item.Types.wall:\n item = new Wall(parent, configuration)\n break\n default:\n console.error('Ignoring item with unknown type:', configuration.type)\n break\n }\n\n if (item) {\n item.onInitialization()\n }\n\n return item\n}\n","import chroma from 'chroma-js'\nimport { Item } from '../item'\nimport { Color, Path } from 'paper'\nimport { movable } from '../modifiers/move'\nimport { getColorElement } from '../util'\nimport { StepState } from '../step'\n\nexport class Filter extends movable(Item) {\n constructor (tile, { color }) {\n super(...arguments)\n\n this.color = chroma.average(Array.isArray(color) ? color : [color]).hex()\n\n const fillColor = new Color(color)\n fillColor.alpha = 0.25\n\n // TODO: update to something else? prism?\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n\n getColorElements () {\n return [getColorElement(this.color)]\n }\n\n onCollision ({ currentStep, nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(\n currentStep.state.has(StepState.Filter)\n ? { colors: nextStep.colors.concat([this.color]) }\n : { state: new StepState({ insertAbove: this }, new StepState.Filter()) }\n )\n }\n}\n","import { Modifier } from '../modifier'\nimport { Puzzle } from '../puzzle'\nimport { emitEvent } from '../util'\nimport { Item } from '../item'\n\nexport class Move extends Modifier {\n #mask\n\n name = 'drag_pan'\n title = 'Move'\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter(Move.movable)\n if (this.#mask || !items.length) {\n return\n }\n\n const mask = new Puzzle.Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: () => this.tile.beforeModify(),\n onUnmask: () => this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n })\n\n this.#mask = mask\n\n emitEvent(Puzzle.Events.Mask, { mask })\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.movable)\n }\n\n moveItems (tile) {\n const items = this.tile.items.filter(Move.movable)\n items.forEach((item) => item.move(tile))\n return {\n moved: [Move.data(this.tile, tile, items)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some(Modifier.immutable) ||\n (tile.items.filter((item) => item.type !== Item.Types.beam).length > 0 && !(tile === this.tile))\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Invoked, data)\n } else {\n puzzle.unmask()\n }\n\n this.#mask = undefined\n }\n\n static data (fromTile, toTile, items) {\n return { fromTile, toTile, items }\n }\n\n static movable (item) {\n return item.movable\n }\n}\n\n/**\n * Move an item from one tile to another.\n * @param SuperClass\n * @returns {{new(*, *): MovableItem, movable: boolean, prototype: MovableItem}}\n */\nexport const movable = (SuperClass) => class MovableItem extends SuperClass {\n movable\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.movable = configuration.movable !== false\n }\n\n move (tile) {\n this.parent.removeItem(this)\n\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center)\n this.group.position = this.group.position.subtract(vector)\n\n // Update tile reference\n this.parent = tile\n this.parent.addItem(this)\n this.center = this.parent.center\n\n this.onMove()\n }\n\n onMove () {}\n}\n","import { capitalize, emitEvent } from './util'\nimport { Puzzle } from './puzzle'\nimport { Stateful } from './stateful'\nimport { EventListeners } from './eventListeners'\nimport { Interact } from './interact'\n\nconst modifiersImmutable = document.getElementById('modifiers-immutable')\nconst modifiersMutable = document.getElementById('modifiers-mutable')\nconst navigator = window.navigator\n\nlet uniqueId = 0\n\nexport class Modifier extends Stateful {\n #container\n #down = false\n #eventListener = new EventListeners({ context: this })\n #mask\n #selectionTime = 500\n #timeoutId\n\n configuration\n element\n disabled = false\n id = uniqueId++\n immutable = false\n name\n selected = false\n tile\n title\n type\n\n constructor (tile, state) {\n super(state)\n\n this.tile = tile\n this.type = state.type\n }\n\n /**\n * Attach the modifier to the DOM and add listeners.\n */\n attach () {\n const li = this.#container = document.createElement('li')\n\n li.classList.add(['modifier', this.type.toLowerCase()].join('-'))\n\n if (this.immutable) {\n this.disabled = true\n }\n\n const span = this.element = document.createElement('span')\n\n span.classList.add('material-symbols-outlined', 'fill')\n\n li.append(span)\n\n this.update()\n\n this.#eventListener.add([\n { type: 'deselected', handler: this.onDeselected },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp }\n ], { element: li })\n\n this.immutable ? modifiersImmutable.append(li) : modifiersMutable.append(li)\n }\n\n /**\n * Remove listeners and the modifier from the DOM.\n */\n detach () {\n if (!this.#container) {\n return\n }\n\n Modifier.deselect()\n\n this.#eventListener.remove()\n this.#container.remove()\n\n this.selected = false\n this.element = undefined\n this.#container = undefined\n }\n\n dispatchEvent (event, detail) {\n emitEvent(event, Object.assign({}, detail || {}, { modifier: this, tile: this.tile }))\n }\n\n equals (other) {\n return other instanceof Modifier && this.id === other.id\n }\n\n move (tile) {\n this.remove()\n tile.addModifier(this)\n this.tile = tile\n }\n\n moveFilter (tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier) => modifier.type === Modifier.Types.immutable)\n }\n\n onDeselected () {\n this.update({ selected: false })\n this.tile.afterModify()\n this.dispatchEvent(Modifier.Events.Deselected)\n }\n\n onPointerDown (event) {\n if (event.button !== 0) {\n // Support toggle on non-primary pointer button\n this.onToggle(event)\n } else {\n this.#down = true\n if (\n !this.#mask &&\n !this.tile.modifiers.some((modifier) => [Modifier.Types.immutable, Modifier.Types.lock].includes(modifier.type))\n ) {\n this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime)\n }\n }\n }\n\n onPointerUp (event) {\n clearTimeout(this.#timeoutId)\n\n if (this.#down && !this.disabled && !this.selected) {\n switch (event.type) {\n case 'pointerleave': {\n // Support swiping up on pointer device\n this.onToggle(event)\n break\n }\n case 'pointerup': {\n this.onTap(event)\n break\n }\n }\n }\n\n this.#down = false\n }\n\n onSelected () {\n Modifier.deselect()\n\n navigator.vibrate(Interact.vibratePattern)\n\n this.update({ selected: true })\n\n const mask = this.#mask = new Puzzle.Mask({\n id: this.toString(),\n onMask: () => this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n })\n\n this.dispatchEvent(Puzzle.Events.Mask, { mask })\n }\n\n onTap () {\n this.selected = false\n }\n\n onToggle () {\n navigator.vibrate(Interact.vibratePattern)\n }\n\n remove () {\n this.detach()\n this.tile.removeModifier(this)\n this.tile = null\n }\n\n toString () {\n return [this.name, this.id].join(':')\n }\n\n update (options) {\n options = Object.assign(\n { disabled: this.disabled, selected: this.selected, name: this.name, title: this.title },\n options || {}\n )\n\n if (!this.immutable) {\n this.disabled = options.disabled\n }\n\n this.name = options.name\n this.title = options.title\n this.selected = options.selected\n\n if (this.#container) {\n this.#container.classList.toggle('disabled', this.disabled)\n this.#container.classList.toggle('selected', this.selected)\n this.element.textContent = this.name\n this.element.title = this.title\n }\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile\n\n this.move(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Moved, { fromTile })\n } else {\n Modifier.deselect()\n puzzle.unmask()\n }\n\n this.#mask = undefined\n this.update({ selected: false })\n }\n\n #moveFilter (tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile)\n }\n\n static deselect () {\n const selectedModifier = document.querySelector('.modifiers .selected')\n if (selectedModifier) {\n selectedModifier.dispatchEvent(new CustomEvent('deselected'))\n }\n }\n\n static immutable (modifier) {\n return modifier.type === Modifier.Types.immutable\n }\n\n static Events = Object.freeze({\n Deselected: 'modifier-deselected',\n Invoked: 'modifier-invoked',\n Moved: 'modifier-moved'\n })\n\n static Types = Object.freeze(Object.fromEntries([\n 'immutable',\n 'lock',\n 'move',\n 'rotate',\n 'swap',\n 'toggle'\n ].map((type) => [type, capitalize(type)])))\n}\n","export class EventListeners {\n #events = []\n #options = { element: document }\n\n constructor (options = {}) {\n this.#options = Object.assign(this.#options, options)\n }\n\n add (events, options = {}) {\n this.#events = this.#events.concat(events.map((event) => {\n event = Object.assign({}, this.#options, options, event)\n if (!event.type) {\n throw new Error('Event type is required')\n }\n if (event.context) {\n event.handler = event.handler.bind(event.context)\n }\n event.element.addEventListener(event.type, event.handler, event.options)\n return event\n }))\n }\n\n remove () {\n this.#events.forEach((event) => event.element.removeEventListener(event.type, event.handler))\n this.#events = []\n }\n}\n","import paper, { Point } from 'paper'\nimport { Cache } from './cache'\nimport { EventListeners } from './eventListeners'\n\nexport class Interact {\n #bounds\n #cache = new Cache(Object.values(Interact.CacheKeys))\n #element\n #eventListener = new EventListeners({ context: this })\n #offset\n\n constructor (element) {\n this.#bounds = element.getBoundingClientRect()\n this.#element = element\n this.#offset = new Point(this.#bounds.left, this.#bounds.top)\n this.#eventListener.add([\n { type: 'pointercancel', handler: this.onPointerUp },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointermove', handler: this.onPointerMove },\n { type: 'pointerout', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp },\n { type: 'wheel', handler: this.onMouseWheel, options: { passive: false } }\n ], { element })\n }\n\n onMouseWheel (event) {\n event.preventDefault()\n this.#zoom(new Point(event.offsetX, event.offsetY), event.deltaY, 1.05)\n }\n\n onPan (event) {\n const point = paper.view.viewToProject(Interact.point(event))\n const pan = this.#getGesture(Interact.GestureKeys.Pan)\n\n if (!pan) {\n this.#setGesture(Interact.GestureKeys.Pan, { from: point })\n return\n }\n\n const center = pan.from.subtract(point).add(paper.view.center)\n\n // Allow a little wiggle room to prevent panning on tap\n if (paper.view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains('grab')) {\n document.body.classList.add('grab')\n }\n\n // Center on the cursor\n paper.view.center = center\n }\n }\n\n onPinch (events) {\n const pointer0 = events[0]\n const pointer1 = events[1]\n\n const point0 = Interact.point(pointer0)\n const point1 = Interact.point(pointer1)\n const distance = point0.getDistance(point1)\n\n const pinch = this.#getGesture(Interact.GestureKeys.Pinch)\n if (!pinch) {\n this.#setGesture(Interact.GestureKeys.Pinch, { distance })\n return\n }\n\n const center = point0.add(point1).divide(2).subtract(this.#offset)\n const scale = distance / pinch.distance\n const delta = (pinch.distance - distance) * scale\n\n this.#zoom(center, delta, 1.01)\n\n pinch.distance = distance\n }\n\n onPointerDown (event) {\n this.#cache.get(Interact.CacheKeys.Down).set(event.pointerId, event)\n }\n\n onPointerMove (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n // Ignore events until there is a pointer down event\n return\n }\n\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = Interact.point(event).subtract(Interact.point(down)).length\n if (diff > 1) {\n this.#cache.get(Interact.CacheKeys.Move).set(event.pointerId, event)\n\n const events = this.#cache.get(Interact.CacheKeys.Move).values()\n if (events.length === 2) {\n this.onPinch(events)\n } else {\n this.onPan(event)\n }\n }\n }\n\n onPointerUp (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n return\n }\n\n if (\n this.#cache.length(Interact.CacheKeys.Down) === 1 &&\n !this.#cache.get(Interact.CacheKeys.Move).get(event.pointerId)\n ) {\n this.onTap(down)\n }\n\n document.body.classList.remove('grab')\n\n this.#cache.get(Interact.CacheKeys.Down).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Move).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pan)\n\n if (this.#cache.length(Interact.CacheKeys.Move) < 2) {\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pinch)\n }\n }\n\n onTap (event) {\n const point = paper.view.viewToProject(Interact.point(event).subtract(this.#offset))\n this.#element.dispatchEvent(new CustomEvent(Interact.GestureKeys.Tap, { detail: { event, point } }))\n }\n\n #getGesture (key) {\n return this.#cache.get(Interact.CacheKeys.Gesture).get(key)\n }\n\n #setGesture (key, value) {\n this.#cache.get(Interact.CacheKeys.Gesture).set(key, value)\n }\n\n #zoom (point, delta, factor) {\n const zoom = Math.max(\n Math.min(\n delta < 0 ? paper.view.zoom * factor : paper.view.zoom / factor,\n Interact.maxZoom\n ),\n Interact.minZoom\n )\n\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = paper.view.viewToProject(point)\n const touchOffset = touchPoint.subtract(paper.view.center)\n\n // Adjust center towards cursor location\n const zoomOffset = touchPoint\n .subtract(touchOffset.multiply(paper.view.zoom / zoom))\n .subtract(paper.view.center)\n\n paper.view.zoom = zoom\n paper.view.center = paper.view.center.add(zoomOffset)\n }\n\n static point (event) {\n return new Point(event.clientX, event.clientY)\n }\n\n static CacheKeys = Object.freeze({\n Down: 'down',\n Move: 'move',\n Gesture: 'gesture'\n })\n\n static GestureKeys = Object.freeze({\n Pan: 'pan',\n Pinch: 'pinch',\n Tap: 'tap'\n })\n\n static maxZoom = 2\n static minZoom = 0.5\n static vibratePattern = 25\n}\n","export class Cache {\n #cache = {}\n #hasKeys\n #keys\n\n constructor (keys = []) {\n this.#keys = keys\n this.#hasKeys = keys.length !== 0\n\n keys.forEach((key) => { this.#cache[key] = new Cache() })\n }\n\n set (key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) {\n throw new Error(`Invalid key: ${key}`)\n }\n\n this.#cache[key] = item\n }\n\n get (key) {\n return key === undefined ? this.#cache : this.#cache[key]\n }\n\n keys (key) {\n return Object.keys(this.#get(key))\n }\n\n length (key) {\n return this.keys(key).length\n }\n\n unset (key) {\n delete this.#cache[key]\n }\n\n values (key) {\n return Object.values(this.#get(key))\n }\n\n #get (key) {\n const value = this.get(key)\n return value instanceof Cache ? value.get() : value\n }\n}\n","import chroma from 'chroma-js'\nimport { deepEqual, noop } from './util'\n\nexport class Step {\n color\n colors\n connected\n direction\n done\n insertAbove\n onAdd\n onRemove\n point\n pathIndex\n segmentIndex\n state\n tile\n\n constructor (\n index,\n tile,\n colors,\n direction,\n point,\n pathIndex,\n segmentIndex,\n connected,\n insertAbove,\n done,\n state,\n onAdd,\n onRemove\n ) {\n if (state && !(state instanceof StepState)) {\n throw new Error('Step.state must be instance of StepState')\n }\n\n this.colors = colors ? (Array.isArray(colors) ? Array.from(colors) : [colors]) : []\n\n if (this.colors.length) {\n this.color = chroma.average(this.colors).hex()\n }\n\n this.connected = connected ?? true\n this.direction = direction\n this.done = done ?? false\n this.index = index\n this.insertAbove = insertAbove\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? noop\n this.onRemove = onRemove ?? noop\n this.point = point\n this.pathIndex = pathIndex\n this.segmentIndex = segmentIndex\n this.state = state ?? new StepState()\n this.tile = tile\n }\n\n copy (settings) {\n return new Step(\n settings.index ?? this.index,\n settings.tile ?? this.tile,\n settings.colors ?? settings.color ?? this.colors,\n settings.direction ?? this.direction,\n settings.point ?? this.point,\n settings.pathIndex ?? this.pathIndex,\n settings.segmentIndex ?? this.segmentIndex,\n settings.connected ?? this.connected,\n settings.insertAbove ?? this.insertAbove,\n settings.done ?? this.done,\n settings.state ?? new StepState(this.state),\n settings.onAdd ?? this.onAdd,\n settings.onRemove ?? this.onRemove\n )\n }\n\n equals (step) {\n return deepEqual(this, step)\n }\n}\n\nexport class StepState {\n #cache = {}\n\n constructor () {\n const settings = Object.assign({}, ...arguments)\n Object.keys(settings).forEach((key) => { this[key] = settings[key] })\n }\n\n copy (...settings) {\n return new StepState(...([this].concat(settings)))\n }\n\n get (Class) {\n return this.#keys(Class).map((key) => this[key]).find((value) => value)\n }\n\n has (Class) {\n return this.#keys(Class).some((key) => this[key])\n }\n\n #keys (Class) {\n return (this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, [])))\n }\n\n static Collision = class StepCollision {\n collision\n\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor (collision) {\n this.collision = collision\n }\n }\n\n static Filter = class StepFilter {\n filter = {}\n }\n\n static MergeInto = class StepMergeInto {\n mergeInto\n\n constructor (beam) {\n this.mergeInto = { beam }\n }\n }\n\n static MergeWith = class StepMergeWith {\n mergeWith\n\n constructor (mergeWith) {\n this.mergeWith = mergeWith\n }\n }\n\n static Portal = class StepPortal {\n portal\n\n constructor (entryPortal, exitPortal) {\n this.portal = { entryPortal, exitPortal }\n }\n }\n\n static Reflector = class StepReflector {\n reflector\n\n constructor (item) {\n this.reflector = { item }\n }\n }\n\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection\n\n constructor (terminus, opening) {\n this.terminusConnection = { terminus, opening }\n }\n }\n}\n","import { movable } from '../modifiers/move'\nimport { Item } from '../item'\nimport { Path, Point } from 'paper'\nimport { rotatable } from '../modifiers/rotate'\nimport { StepState } from '../step'\nimport { Puzzle } from '../puzzle'\nimport { coalesce, getOppositeDirection } from '../util'\n\nexport class Portal extends movable(rotatable(Item)) {\n #directions = {}\n\n constructor (tile, state) {\n // Only allow rotation if direction is defined\n super(tile, state, { rotatable: state.direction !== undefined })\n\n this.direction = state.direction\n\n const height = tile.parameters.circumradius / 3\n const width = tile.parameters.circumradius / 5\n\n const style = {\n fillColor: 'black',\n strokeColor: 'white',\n strokeWidth: 2\n }\n\n const children = []\n\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new Path.Ellipse({\n center: tile.center,\n radius: [width, height],\n style\n })\n\n children.push(ellipse)\n\n const ring = new Path.Ellipse({\n center: tile.center,\n radius: [width - style.strokeWidth * 2, height - style.strokeWidth * 2],\n style\n })\n\n children.push(ring)\n\n if (this.rotatable) {\n const pointer = new Path({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new Point(0, height)),\n tile.center.subtract(new Point(0, height)),\n tile.center.subtract(new Point(width * 2.5, 0))\n ],\n style: {\n fillColor: 'black'\n }\n }).subtract(ellipse)\n\n children.unshift(pointer)\n }\n\n this.group.addChildren(children)\n\n if (this.rotatable) {\n // Properly align items with hexagonal rotation\n this.rotateGroup(1)\n }\n }\n\n get (direction) {\n return this.#directions[direction]\n }\n\n onCollision ({ beam, currentStep, nextStep, puzzle }) {\n const portalState = currentStep.state.get(StepState.Portal)\n if (!portalState) {\n const stepIndex = nextStep.index\n const entryDirection = getOppositeDirection(nextStep.direction)\n const existing = coalesce(this.get(entryDirection), { stepIndex })\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(\n this.toString(),\n 'ignoring beam trying to enter through a direction which is already occupied:',\n entryDirection\n )\n return\n }\n\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: () => this.update(entryDirection, { stepIndex }),\n onRemove: () => this.update(entryDirection),\n state: nextStep.state.copy(new StepState.Portal(this))\n })\n } else if (portalState.exitPortal === this) {\n // Handle exit collision\n return nextStep.copy({ insertAbove: this })\n }\n\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [this.id, nextStep.index].join(':')\n const destinationId = beam.getState().moves?.[stateId]\n\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item) =>\n item.type === Item.Types.portal &&\n !item.equals(this) &&\n // Portal must not already have a beam occupying the desired direction\n !item.get(Portal.getExitDirection(nextStep, portalState.entryPortal, item)) &&\n (destinationId === undefined || item.id === destinationId) &&\n (\n // Entry portals without defined direction can exit from any other portal.\n this.getDirection() === undefined ||\n // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined ||\n // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()\n )\n )\n\n if (destinations.length === 0) {\n console.debug(this.toString(), 'no valid destinations found')\n // This will cause the beam to stop\n return currentStep\n }\n\n if (destinations.length === 1) {\n // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState)\n } else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal) => portal.parent)\n const mask = new Puzzle.Mask(\n {\n beam,\n id: stateId,\n onMask: () => currentStep.tile.beforeModify(),\n onTap: (puzzle, tile) => {\n const destination = destinations.find((portal) => portal.parent === tile)\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState))\n beam.updateState((state) => {\n if (!state.moves) {\n state.moves = {}\n }\n // Store this decision in beam state\n state.moves[stateId] = destination.id\n })\n puzzle.unmask()\n }\n },\n onUnmask: () => currentStep.tile.afterModify(),\n tileFilter: (tile) => {\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile) => destinationTile === tile))\n }\n }\n )\n\n puzzle.updateSelectedTile(currentStep.tile)\n puzzle.mask(mask)\n\n // This will cause the beam to stop\n return currentStep\n }\n }\n\n update (direction, data) {\n this.#directions[direction] = data\n }\n\n #getStep (beam, portal, nextStep, portalState) {\n const direction = Portal.getExitDirection(nextStep, portalState.entryPortal, portal)\n const stepIndex = nextStep.index\n return nextStep.copy({\n connected: false,\n direction,\n insertAbove: portal,\n onAdd: () => portal.update(direction, { stepIndex }),\n onRemove: () => portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new StepState.Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n })\n }\n\n static getExitDirection (step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction\n }\n}\n","import { Modifier } from '../modifier'\nimport { addDirection, coalesce } from '../util'\n\nexport class Rotate extends Modifier {\n clockwise\n title = 'Rotate'\n\n constructor (tile, state, configuration = {}) {\n super(...arguments)\n\n this.clockwise = coalesce(true, state.clockwise, configuration.clockwise)\n this.name = Rotate.Names[this.clockwise ? 'right' : 'left']\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.rotatable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter((item) => item.rotatable)\n items.forEach((item) => item.rotate(this.clockwise))\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n onToggle () {\n super.onToggle()\n\n this.clockwise = !this.clockwise\n this.updateState((state) => { state.clockwise = this.clockwise })\n this.update({ name: Rotate.Names[this.clockwise ? 'right' : 'left'] })\n }\n\n static Names = Object.freeze({ left: 'rotate_left', right: 'rotate_right ' })\n}\n\n/**\n * A mixin for Item which provides rotate behaviors.\n */\nexport const rotatable = (SuperClass) => class RotatableItem extends SuperClass {\n direction\n\n rotatable\n rotation = 0\n rotationDegrees\n\n constructor (parent, state, configuration = {}) {\n super(...arguments)\n\n this.direction = coalesce(state.direction, configuration.direction)\n this.rotatable = coalesce(true, state.rotatable, configuration.rotatable)\n this.rotationDegrees = coalesce(60, state.rotationDegrees, configuration.rotationDegrees)\n this.rotation = coalesce(0, state.rotation, configuration.rotation) % this.getMaxRotation()\n }\n\n // Get the direction of an item with rotation factored in\n getDirection (direction) {\n direction = direction ?? this.direction\n return direction === undefined\n ? direction\n : addDirection(direction, this.rotation)\n }\n\n getMaxRotation () {\n return (360 / this.rotationDegrees)\n }\n\n onInitialization () {\n super.onInitialization()\n\n this.rotateGroup(this.rotation)\n\n if (this.direction !== undefined) {\n // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction)\n }\n }\n\n rotateGroup (rotation) {\n if (this.rotatable) {\n this.group.rotate(rotation * this.rotationDegrees, this.center)\n }\n }\n\n rotate (clockwise) {\n const rotation = clockwise === false ? -1 : 1\n\n this.rotation = (rotation + this.rotation) % this.getMaxRotation()\n\n this.updateState((state) => { state.rotation = this.rotation })\n this.rotateGroup(rotation)\n }\n}\n","import chroma from 'chroma-js'\nimport { Path } from 'paper'\nimport { toggleable } from '../modifiers/toggle'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getColorElements, emitEvent, getOppositeDirection, addDirection, subtractDirection } from '../util'\nimport { Beam } from './beam'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Terminus extends movable(rotatable(toggleable(Item))) {\n sortOrder = 2\n\n #ui\n\n constructor (tile, state) {\n super(...arguments)\n\n const colors = state.openings.filter((opening) => opening?.color)\n .flatMap((opening) => Array.isArray(opening.color) ? opening.color : [opening.color])\n const color = chroma.average(\n colors.length ? colors : (Array.isArray(state.color) ? state.color : [state.color])\n ).hex()\n\n const openings = state.openings.map((state, direction) =>\n state\n ? new Terminus.#Opening(\n state.color || color,\n direction,\n state.connected,\n state.on\n )\n : state\n ).filter((opening) => opening)\n\n this.#ui = Terminus.ui(tile, color, openings)\n\n this.group.addChildren([...this.#ui.openings, this.#ui.terminus])\n\n this.color = color\n this.openings = openings\n this.radius = this.#ui.radius\n\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening) => new Beam(this, state.openings[opening.direction], opening))\n\n this.update()\n }\n\n getColorElements () {\n return getColorElements(this.openings.map((opening) => opening.color))\n }\n\n getOpening (direction) {\n return this.openings.find((opening) => opening.direction === direction)\n }\n\n onMove () {\n this.beams.forEach((beam) => beam.remove())\n }\n\n onCollision ({ beam, collisionStep, currentStep, existingNextStep, nextStep }) {\n console.debug(this.toString(), 'collision', beam.toString())\n\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), 'ignoring starting terminus collision')\n return\n }\n\n const directionFrom = getOppositeDirection(currentStep.direction)\n\n // Take rotation of terminus into account\n const opening = this.openings.find((opening) => this.getDirection(opening.direction) === directionFrom)\n if (\n opening && opening.color === nextStep.color && (\n !opening.on ||\n // When re-evaluating history of an already connected opening\n (opening.connected && existingNextStep?.state.get(StepState.TerminusConnection)?.terminus.equals(this))\n )\n ) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), 'terminus connection', this.toString(), opening)\n return nextStep.copy({\n done: true,\n onAdd: () => {\n nextStep.onAdd()\n this.onConnection(opening.direction)\n },\n onRemove: () => {\n nextStep.onRemove()\n this.onDisconnection(opening.direction)\n },\n state: nextStep.state.copy(new StepState.TerminusConnection(this, opening))\n })\n }\n\n // Otherwise, treat this as a collision\n return collisionStep\n }\n\n onConnection (direction) {\n const opening = this.getOpening(direction)\n\n if (opening.connected) {\n // Already connected\n return\n }\n\n opening.connect()\n this.update()\n\n emitEvent(Terminus.Events.Connection, { terminus: this, opening })\n }\n\n onDisconnection (direction) {\n const opening = this.getOpening(direction)\n\n if (!opening.connected) {\n // Already disconnected\n return\n }\n\n opening.disconnect()\n this.update()\n\n emitEvent(Terminus.Events.Disconnection, { terminus: this, opening })\n }\n\n onToggle () {\n this.updateState((state) => {\n this.openings.filter((opening) => !opening.connected).forEach((opening) => {\n opening.toggle()\n state.openings[opening.direction].on = opening.on\n })\n })\n this.update()\n }\n\n update () {\n this.beams.forEach((beam) => {\n const opening = beam.getOpening()\n const item = this.#ui.openings.find((item) => item.data.direction === opening.direction)\n item.opacity = opening.on ? 1 : Terminus.#openingOffOpacity\n })\n }\n\n static #openingOffOpacity = 0.3\n\n static ui (tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2\n\n const terminus = new Path.RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n })\n\n const openings = configuration.map((opening) => {\n const direction = opening.direction\n\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[subtractDirection(direction, 1)].point\n const p2 = terminus.segments[addDirection(direction, 2)].point\n\n const vector = p2.subtract(p1)\n\n vector.angle += 120\n\n const p3 = p1.subtract(vector)\n\n return new Path({\n closed: true,\n data: { collidable: false, direction },\n fillColor: opening.color,\n opacity: opening.on ? 1 : Terminus.#openingOffOpacity,\n segments: [p1, p2, p3]\n })\n })\n\n return { openings, radius, terminus }\n }\n\n static #Opening = class {\n constructor (color, direction, connected, on) {\n this.colors = Array.isArray(color) ? color : [color]\n this.color = chroma.average(this.colors).hex()\n this.direction = direction\n this.connected = connected === true\n this.on = on === true\n }\n\n connect () {\n this.connected = this.on = true\n }\n\n disconnect () {\n this.connected = this.on = false\n }\n\n toggle () {\n this.on = !this.on\n }\n }\n\n static Events = Object.freeze({\n Connection: 'terminus-connection',\n Disconnection: 'terminus-disconnection'\n })\n}\n","import { Modifier } from '../modifier'\n\nexport class Toggle extends Modifier {\n on\n title = 'Toggle'\n\n constructor (tile, { on }) {\n super(...arguments)\n\n this.on = on || false\n\n this.tile.items.forEach((item) => {\n item.toggled = this.on\n })\n }\n\n attach () {\n this.name = Toggle.Names[this.on ? 'on' : 'off']\n super.attach()\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.toggleable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n this.on = !this.on\n\n const items = this.tile.items.filter((item) => item.toggleable)\n items.forEach((item) => item.toggle(this.on))\n\n this.update({ name: Toggle.Names[this.on ? 'on' : 'off'] })\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n static Names = Object.freeze({ on: 'toggle_on', off: 'toggle_off ' })\n}\n\n/**\n * A mixin for Item which provides toggle behaviors.\n *\n * @param SuperClass\n * @returns {{new(*, *): ToggleableItem, toggled: *, prototype: ToggleableItem}}\n * @constructor\n */\nexport const toggleable = (SuperClass) => class ToggleableItem extends SuperClass {\n toggleable\n toggled\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.toggleable = configuration.toggleable !== false\n }\n\n onToggle () {}\n\n toggle (toggled) {\n this.toggled = toggled\n this.onToggle()\n }\n}\n","import chroma from 'chroma-js'\nimport { CompoundPath, Path } from 'paper'\nimport { Item } from '../item'\nimport {\n getColorElements,\n emitEvent,\n fuzzyEquals,\n getPointBetween,\n getDistance,\n getOppositeDirection,\n uniqueBy, getPointFrom\n} from '../util'\nimport { Step, StepState } from '../step'\nimport { Collision, CollisionMergeWith } from '../collision'\nimport { Cache } from '../cache'\n\nexport class Beam extends Item {\n done = false\n path = []\n sortOrder = 3\n\n #cache = new Cache(Object.values(Beam.CacheKeys))\n #direction\n #path\n #stepIndex = -1\n #steps = []\n\n constructor (terminus, state, configuration) {\n super(...arguments)\n\n this.group = null\n this.#direction = configuration.direction\n\n this.#path = {\n closed: false,\n data: { id: this.id, type: this.type },\n locked: true,\n strokeJoin: 'round',\n strokeCap: 'round',\n strokeWidth: terminus.radius / 12\n }\n }\n\n addStep (step) {\n const lastStepIndex = this.getLastStepIndex()\n\n // Can't be done if adding a new step\n this.done = false\n\n this.#path.strokeColor = step.color\n\n if (this.path.length === 0) {\n const path = new Path(this.#path)\n this.path.push(path)\n this.getLayer().insertChild(0, path)\n }\n\n const currentPath = this.path[this.path.length - 1]\n const previousStep = this.#steps[lastStepIndex]\n\n // Handles cases that require adding a new path item\n if (\n !step.connected || (\n previousStep && (\n step.color !== previousStep.color ||\n step.insertAbove !== previousStep.insertAbove\n )\n )\n ) {\n console.debug(this.toString(), 'adding new path item for step:', step, 'previous step:', previousStep)\n\n const path = new Path(this.#path)\n const points = [step.point]\n\n // If the next step is connected, we will link it with the previous step\n if (step.connected) {\n points.unshift(previousStep.point)\n }\n\n path.add(...points)\n this.path.push(path)\n\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path)\n\n // Reset the segmentIndex\n step.segmentIndex = 0\n } else {\n currentPath.add(step.point)\n step.segmentIndex = currentPath.segments.length - 1\n }\n\n step.pathIndex = this.path.length - 1\n\n this.#steps.push(step)\n\n step.index = this.#stepIndex = this.#steps.length - 1\n\n if (!step.tile.items.some((item) => item.equals(this))) {\n // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this)\n }\n\n step.onAdd(step)\n\n console.debug(this.toString(), 'added step', step)\n\n this.#onUpdate(this.#stepIndex)\n\n return step\n }\n\n getCollision () {\n return this.getStep()?.state.get(StepState.Collision)\n }\n\n getColor () {\n return this.getStep()?.color || this.getOpening().color\n }\n\n getColors () {\n return Array.from(this.getStep()?.colors || this.getOpening().colors)\n }\n\n getColorElements (tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step) => step.state.has(StepState.MergeWith))\n return step ? getColorElements(step.color) : []\n }\n\n getCompoundPath () {\n return new CompoundPath({ children: this.path.map((item) => item.clone({ insert: false })) })\n }\n\n getIndex () {\n return this.path[this.path.length - 1].index\n }\n\n getLastStepIndex () {\n return this.length() - 1\n }\n\n getLayer () {\n return this.parent.getLayer()\n }\n\n getMergeWith (beam) {\n return this.#cache.get(Beam.CacheKeys.MergeWith).get(beam.id)\n }\n\n getOpening () {\n return this.parent.getOpening(this.#direction)\n }\n\n getState () {\n return this.parent.getState().openings[this.#direction]\n }\n\n getStep (stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()]\n }\n\n getSteps (tile) {\n return tile ? this.#steps.filter((step) => step.tile === tile) : this.#steps\n }\n\n isComplete () {\n return this.isOn() && this.done\n }\n\n isConnected () {\n const step = this.getStep()\n return step?.state.has(StepState.TerminusConnection) ||\n // Consider beams which have merged into connected beams to also be connected\n step?.state.get(StepState.MergeInto)?.beam.isConnected()\n }\n\n isOn () {\n const opening = this.getOpening()\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected\n }\n\n isPending () {\n return this.isOn() && !this.done\n }\n\n length () {\n return this.#steps.length\n }\n\n onBeamUpdated (event) {\n const beam = event.detail.beam\n\n if (beam.isPending()) {\n // Wait for beam to finish before evaluating\n return\n }\n\n const beamLastStep = beam.getStep()\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n // Check for invalid collisions\n const collision = lastStep.state.get(StepState.Collision)\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get(StepState.Collision))) {\n console.debug(this.toString(), 're-evaluating collision with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(lastStep.index - 1, 0)\n return\n }\n\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get(StepState.MergeInto)\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), 're-evaluating merge into', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0)\n return\n }\n }\n\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam)\n if (mergeWith && !beamLastStep?.state.get(StepState.MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), 're-evaluating merge with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0)\n }\n }\n\n onCollision ({ beam, collision, collisionStep, currentStep, nextStep, puzzle }) {\n const isSelf = beam.equals(this)\n\n console.debug(this.toString(), 'evaluating collision with', (isSelf ? 'self' : beam.toString()))\n\n if (!beam.isOn()) {\n console.debug(this.toString(), 'ignoring collision with inactive beam', beam.toString())\n return\n }\n\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), 'ignoring collision with sibling beam', beam.toString())\n return\n }\n\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), 'ignoring collision with self while re-evaluating history')\n return\n }\n\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step) => fuzzyEquals(collision.point, step.point))\n if (stepIndex < 0) {\n // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(\n `Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`)\n }\n\n const step = this.#steps[stepIndex]\n\n if (step.state.get(StepState.MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), 'ignoring collision with merged beam', beam.toString())\n return\n }\n\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get(StepState.TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), 'ignoring collision with connected beam in parent terminus', beam.toString())\n return\n }\n\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get(StepState.Reflector) ?? currentStep.state.get(StepState.Reflector)\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = getPointFrom(step.point, 1, getOppositeDirection(step.direction))\n const nextStepPoint = getPointFrom(currentStep.point, 1, getOppositeDirection(currentStep.direction))\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), 'ignoring collision with beam on opposite side of reflector', beam.toString())\n return\n }\n }\n\n const isSameDirection = step.direction === nextStep.direction\n if (currentStep.state.get(StepState.Portal)?.exitPortal && !isSameDirection) {\n console.debug(\n this.toString(),\n 'ignoring collision with beam using same portal with different exit direction',\n beam.toString()\n )\n return\n }\n\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), 'has collided with', (isSelf ? 'self' : this.toString()), collision)\n\n if (!isSelf) {\n // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new StepState.Collision(collision.mirror()))\n })\n } else if (!isSameDirection) {\n // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay())\n }\n\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n })\n }\n\n console.debug(this.toString(), 'merging with', beam.toString())\n\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex)\n\n const mergeWith = new CollisionMergeWith(beam, step, stepIndex)\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).set(beam.id, mergeWith)\n },\n onRemove: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).unset(beam.id)\n },\n state: step.state.copy(new StepState.MergeWith(mergeWith))\n }))\n\n console.debug(beam.toString(), 'merging into', this.toString())\n\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new StepState.MergeInto(this))\n })\n }\n\n onModifierInvoked (event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), 'beam has been toggled off')\n // Also reset any state changes from user move decisions\n this.updateState((state) => { delete state.moves })\n this.remove()\n }\n return\n }\n\n const tiles = event.detail.tiles || [event.detail.tile]\n\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step) => tiles.some((tile) => tile.equals(step.tile)))\n if (stepIndex >= 0) {\n console.debug(this.toString(), 're-evaluating due to modifier being invoked in matching tile', stepIndex)\n // Re-evaluate beginning at the step before the matched one\n this.done = false\n this.#stepIndex = Math.max(stepIndex - 1, 0)\n return\n }\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n if (lastStep.state.get(StepState.Portal)?.entryPortal) {\n // Check for valid exit portal\n this.done = false\n }\n }\n }\n\n remove (stepIndex = 0) {\n this.#updateHistory(stepIndex)\n }\n\n selected (selected = true) {\n this.path.forEach((path) => { path.selected = selected })\n }\n\n startDirection () {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6\n }\n\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */\n step (puzzle) {\n if (!this.isPending()) {\n return\n }\n\n console.debug(this.toString(), 'currentStepIndex', this.#stepIndex)\n\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent\n this.addStep(new Step(0, tile, this.getColor(), this.startDirection(), tile.center))\n }\n\n const currentStepIndex = this.#stepIndex\n const currentStep = this.#steps[currentStepIndex]\n\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction\n const nextStepPoint = getPointFrom(currentStep.point, currentStep.tile.parameters.inradius, direction)\n\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile(getPointBetween(currentStep.point, nextStepPoint))\n\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), 'stopping due to out of bounds')\n\n const collision = new Collision(0, [currentStep.point], this)\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new StepState(new StepState.Collision(collision))\n })\n }\n\n const nextStepIndex = currentStepIndex + 1\n const existingNextStep = this.#steps[nextStepIndex]\n const lastPathIndex = this.path.length - 1\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1\n\n let nextStep = new Step(\n nextStepIndex,\n tile,\n currentStep.color,\n direction,\n nextStepPoint,\n existingNextStep?.pathIndex || lastPathIndex,\n existingNextStep?.segmentIndex || lastSegmentIndex\n )\n\n const items = uniqueBy(\n tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items),\n 'id'\n )\n\n console.debug(this.toString(), 'collision items:', items)\n\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle)\n .map((collision, index) => new Collision(index, collision.points, this, collision.item))\n\n if (collisions.length) {\n console.debug(this.toString(), 'collisions:', collisions)\n }\n\n let collisionStep\n for (let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++) {\n const collision = collisions[collisionIndex]\n\n console.debug(this.toString(), 'resolving collision:', collision)\n\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new StepState.Collision(collision))\n })\n\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision,\n collisions,\n collisionStep,\n currentStep,\n nextStep,\n existingNextStep,\n puzzle\n })\n\n if (collisionStep instanceof Step) {\n break\n }\n }\n\n if (collisionStep) {\n nextStep = collisionStep\n }\n\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++\n\n const lastStepIndex = this.getLastStepIndex()\n console.debug(\n this.toString(),\n 'new step is same as existing. new step index:',\n this.#stepIndex,\n 'last step index:',\n lastStepIndex\n )\n\n if (this.#stepIndex === lastStepIndex) {\n // To ensure we mark as done\n this.#onUpdate(this.#stepIndex)\n }\n\n return existingNextStep\n } else {\n console.debug(\n this.toString(),\n `is revising history at step index: ${nextStepIndex}`,\n 'existing step:',\n existingNextStep,\n 'new step:',\n nextStep\n )\n this.#updateHistory(nextStepIndex)\n }\n }\n\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), 'next step point is same as current step point, stopping.', nextStep)\n return this.updateStep(currentStepIndex, nextStep.copy({ done: true }))\n }\n\n return this.addStep(nextStep)\n }\n\n toString () {\n return `[${this.type}:${this.id}:${chroma(this.getColor()).name()}]`\n }\n\n update (stepIndex, settings = {}, timeout) {\n if (typeof settings === 'number') {\n timeout = settings\n settings = {}\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout)\n return timeout === undefined ? update() : setTimeout(update, timeout)\n }\n\n updateState (updater, dispatchEvent = true) {\n return this.parent.updateState((state) => updater(state.openings[this.#direction]), dispatchEvent)\n }\n\n updateStep (stepIndex, settings) {\n const step = this.getStep(stepIndex)\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings)\n this.#steps[stepIndex] = updatedStep\n updatedStep.onAdd(updatedStep)\n\n console.debug(this.toString(), 'updated step at index', stepIndex, 'from', step, 'to', updatedStep)\n this.#onUpdate(stepIndex)\n return updatedStep\n }\n }\n\n #getCollisions (items, currentStep, nextStep, puzzle) {\n const segments = [currentStep.point, nextStep.point]\n const path = new Path({ segments })\n const firstPoint = segments[0]\n return items\n .map((item) => {\n const points = []\n const intersections = path.getIntersections(\n item.getCompoundPath(),\n // Ignore first point from self which will always collide\n (curveLocation) => !(item === this && curveLocation.point.equals(firstPoint))\n )\n\n points.push(...new Set(intersections.map((intersection) => intersection.point)))\n\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === Item.Types.beam && item !== this) {\n points.push(\n ...item.getSteps().map((step) => step.point)\n .filter((point) => segments.some((segment) => fuzzyEquals(point, segment)))\n )\n }\n\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort(getDistance(firstPoint))\n\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint)\n points.forEach((point) => puzzle.drawDebugPoint(point, { fillColor: 'black' }))\n }\n\n return { points, item }\n })\n .filter((result) => result.points.length)\n .sort((a, b) => {\n // Sort items returned by proximity to starting point\n const distance = getDistance(firstPoint)(a.points[0], b.points[0])\n if (distance === 0) {\n // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder\n }\n\n return distance\n })\n }\n\n #getItemIndex (step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0\n }\n\n #getUpdatedStep (step, settings) {\n if (typeof settings === 'function') {\n settings = settings(step)\n }\n\n return settings instanceof Step ? settings : step.copy(settings)\n }\n\n #update (stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex)\n this.addStep(this.#getUpdatedStep(step, settings))\n } else {\n this.updateStep(stepIndex, settings)\n }\n }\n\n #onUpdate (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n stepIndex ??= lastStepIndex\n\n const step = this.getStep(stepIndex)\n\n if (stepIndex === lastStepIndex) {\n // Update beam status if last step was updated\n this.done = step?.done ?? false\n }\n\n emitEvent(Beam.Events.Update, { beam: this, state: step?.state, step, stepIndex })\n }\n\n #updateHistory (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n const step = this.#steps[stepIndex]\n\n console.debug(\n this.toString(),\n 'updateHistory',\n 'stepIndex:',\n stepIndex,\n 'lastStepIndex:',\n lastStepIndex,\n 'step:',\n step\n )\n\n if (step) {\n const currentPath = this.path[step.pathIndex]\n\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex)\n\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1)\n\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item) => item.remove())\n\n const deletedSteps = this.#steps.splice(stepIndex)\n\n console.debug(this.toString(), 'removed steps: ', deletedSteps)\n\n const tiles = [...new Set(deletedSteps.map((step) => step.tile))]\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile) => this.getSteps(tile).length === 0).forEach((tile) => tile.removeItem(this))\n\n deletedSteps.forEach((step) => step.onRemove(step))\n\n this.done = false\n this.#stepIndex = (stepIndex - 1)\n\n this.#onUpdate(this.#stepIndex)\n }\n\n return step\n }\n\n static CacheKeys = Object.freeze({\n MergeWith: 'mergeWith'\n })\n\n static Events = Object.freeze({\n Collision: 'beam-collision',\n Connection: 'beam-connection',\n Merge: 'beam-merge',\n Update: 'beam-update'\n })\n}\n","import { StepState } from './step'\n\nexport class Collision {\n constructor (index, points, beam, item) {\n const items = [beam]\n\n if (item !== undefined) {\n items.push(item)\n }\n\n this.beam = beam\n this.index = index\n\n // The item that was collided with\n this.item = item\n this.itemIds = items.map((item) => item.id)\n this.items = items\n\n // The first collision point\n this.point = points[0]\n this.points = points\n\n // Check if the collision is with self\n this.withSelf = beam.equals(item)\n }\n\n copy (settings) {\n return new Collision(\n settings.index ?? this.index,\n settings.points ?? this.points,\n settings.beam ?? this.beam,\n settings.item ?? this.item\n )\n }\n\n equals (other) {\n return other && other.point.equals(this.point) &&\n other.items.every((item) => this.has(item))\n }\n\n has (item) {\n return this.itemIds.includes(item.id)\n }\n\n mirror () {\n return this.copy({ beam: this.item, item: this.beam })\n }\n}\n\nexport class CollisionMergeWith {\n constructor (beam, step, stepIndex) {\n this.beams = [beam].concat(step.state.get(StepState.MergeWith)?.beams || [])\n this.colors = step.colors.concat(beam.getColors())\n this.stepIndex = stepIndex\n }\n}\n","import { Path, Point, Size } from 'paper'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getPointBetween, getOppositeDirection, getPosition, getReflectedDirection, getPointFrom } from '../util'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Reflector extends movable(rotatable(Item)) {\n #item\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 30 })\n\n this.color = state.color || 'black'\n this.#item = Reflector.item(tile, this.color)\n\n this.group.addChild(this.#item)\n }\n\n midLine () {\n // Two points which form a line through the mid-point of the reflector\n return [\n getPointBetween(this.#item.segments[3].point, this.#item.segments[0].point),\n getPointBetween(this.#item.segments[1].point, this.#item.segments[2].point)\n ]\n }\n\n getSide (point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return getPosition(this.midLine(), point)\n }\n\n isSameSide (pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB)\n }\n\n onCollision ({ beam, collision, collisions, collisionStep, currentStep, nextStep }) {\n const directionFrom = getOppositeDirection(currentStep.direction)\n const directionTo = getReflectedDirection(directionFrom, this.rotation)\n\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), 'stopping due to collision with non-reflective side of reflector')\n return collisionStep\n }\n\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), 'stopping due to reflection back at self')\n if (collisions.some((collision) => collision.item.type === Item.Types.beam)) {\n // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return\n } else {\n // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new StepState.Collision(collision.copy({ points: [nextStep.point] })))\n })\n }\n }\n\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has(StepState.Reflector)) {\n return nextStep.copy({ state: nextStep.state.copy(new StepState.Reflector(this)) })\n }\n\n const point = getPointFrom(currentStep.point, nextStep.tile.parameters.inradius, directionTo)\n return nextStep.copy({ direction: directionTo, point })\n }\n\n static item (tile, color) {\n const length = tile.parameters.circumradius\n const width = tile.parameters.circumradius / 12\n const topLeft = tile.center.subtract(new Point(width / 2, length / 2))\n const size = new Size(width, length)\n\n return new Path.Rectangle({\n data: { size },\n fillColor: color,\n point: topLeft,\n size\n })\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\nimport { addDirection } from '../util'\nimport { rotatable } from '../modifiers/rotate'\nimport { movable } from '../modifiers/move'\n\nexport class Wall extends movable(rotatable(Item)) {\n sortOrder = 1\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 60 })\n const walls = Wall.item(tile, state)\n this.group.addChildren(walls)\n }\n\n static item (tile, configuration) {\n const radius = tile.parameters.circumradius\n const width = radius / 12\n const fillColor = tile.styles.default.strokeColor\n\n return configuration.directions.map((direction) => {\n const firstSegment = tile.hexagon.segments[direction].point\n const nextDirection = addDirection(direction, 1)\n const lastSegment = tile.hexagon.segments[nextDirection].point\n\n return new Path({\n closed: true,\n fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt(\n (direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width\n ),\n tile.hexagon.getLocationAt(\n (nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width\n ),\n lastSegment\n ]\n })\n })\n }\n}\n","import { Immutable } from './modifiers/immutable'\nimport { Lock } from './modifiers/lock'\nimport { Move } from './modifiers/move'\nimport { Rotate } from './modifiers/rotate'\nimport { Toggle } from './modifiers/toggle'\nimport { Modifier } from './modifier'\nimport { Swap } from './modifiers/swap'\n\nexport function modifierFactory (tile, configuration) {\n let modifier\n\n switch (configuration.type) {\n case Modifier.Types.immutable:\n modifier = new Immutable(tile, configuration)\n break\n case Modifier.Types.lock:\n modifier = new Lock(tile, configuration)\n break\n case Modifier.Types.move:\n modifier = new Move(tile, configuration)\n break\n case Modifier.Types.rotate:\n modifier = new Rotate(tile, configuration)\n break\n case Modifier.Types.swap:\n modifier = new Swap(tile, configuration)\n break\n case Modifier.Types.toggle:\n modifier = new Toggle(tile, configuration)\n break\n default:\n console.error('Ignoring modifier with unknown type:', configuration.type)\n break\n }\n\n return modifier\n}\n","import { Modifier } from '../modifier'\n\nexport class Immutable extends Modifier {\n immutable = true\n name = 'block'\n title = 'Immutable'\n}\n","import { Modifier } from '../modifier'\n\nexport class Lock extends Modifier {\n immutable = true\n name = 'lock'\n title = 'Locked'\n}\n","import { Move } from './move'\nimport { Modifier } from '../modifier'\nimport { Item } from '../item'\n\nexport class Swap extends Move {\n name = 'swap_horiz'\n title = 'Swap'\n\n moveItems (tile) {\n const toItems = tile.items.filter(Move.movable)\n const fromItems = this.tile.items.filter(Move.movable)\n\n fromItems.forEach((item) => item.move(tile))\n toItems.forEach((item) => item.move(this.tile))\n\n return {\n moved: [Move.data(this.tile, tile, fromItems), Move.data(tile, this.tile, toItems)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some(Modifier.immutable) || !tile.items.filter((item) => item.type !== Item.Types.beam).length\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Mask extends Item {\n constructor (tile, style) {\n super(null, style, { locked: false, type: Item.Types.mask })\n\n const data = { type: this.type }\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({ fillColor: 'black' }, style)\n })\n\n this.center = tile.center\n this.group.addChild(item)\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Collision extends Item {\n constructor (state) {\n super(null, state, { type: Item.Types.collision })\n\n const { center, color } = state\n\n this.center = center\n this.color = color\n\n const item = new Path.Circle({\n center,\n closed: true,\n radius: 4,\n style: {\n fillColor: 'white',\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n}\n","import { Puzzles } from '../puzzles'\nimport { base64decode, base64encode, jsonDiffPatch, params, url } from './util'\n\nconst history = window.history\nconst localStorage = window.localStorage\n\nexport class State {\n #current\n #deltas\n #id\n #index\n #original\n #selectedTile\n #version\n\n constructor (id, original, deltas, deltasIndex, selectedTile, version) {\n this.#id = id\n this.#original = original\n this.#deltas = deltas || []\n this.#index = deltasIndex || this.#lastIndex()\n this.#selectedTile = selectedTile\n this.#version = version ?? original.version\n\n // Update current state\n this.#current = structuredClone(original)\n this.#deltas.filter((delta, index) => index <= this.#index).forEach((delta) => this.apply(delta))\n\n this.#updateCache(id)\n }\n\n apply (delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === 'string') {\n delta = JSON.parse(delta)\n }\n console.debug('StateManager: applying delta', delta)\n return jsonDiffPatch.patch(this.#current, delta)\n }\n\n canRedo () {\n return this.#index < this.#lastIndex()\n }\n\n canUndo () {\n return this.#index >= 0\n }\n\n encode () {\n return base64encode(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: Puzzles.has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }))\n }\n\n getCurrent () {\n return structuredClone(this.#current)\n }\n\n getId () {\n return this.#id\n }\n\n getTitle () {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : '')\n }\n\n getSelectedTile () {\n return this.#selectedTile\n }\n\n moves () {\n return this.#index + 1\n }\n\n length () {\n return this.#deltas.length\n }\n\n redo () {\n const nextIndex = this.#index + 1\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= nextIndex).forEach((delta) => this.apply(delta))\n this.#index = nextIndex\n this.#updateCache()\n }\n }\n\n reset () {\n this.#current = structuredClone(this.#original)\n this.#deltas = []\n this.#index = this.#lastIndex()\n this.#selectedTile = undefined\n\n State.clearCache(this.getId())\n\n this.#updateCache()\n }\n\n setSelectedTile (tile) {\n const id = tile?.coordinates.offset.toString()\n if (this.#selectedTile !== id) {\n this.#selectedTile = id\n this.#updateCache()\n }\n }\n\n undo () {\n const previousIndex = this.#index - 1\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= previousIndex).forEach((delta) => this.apply(delta))\n this.#index = previousIndex\n this.#updateCache()\n }\n }\n\n update (newState) {\n const delta = jsonDiffPatch.diff(this.#current, newState)\n console.debug('delta', delta)\n\n if (delta === undefined) {\n // Nothing to do\n return\n }\n\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) {\n // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1)\n }\n\n this.apply(delta)\n\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta))\n this.#index = this.#lastIndex()\n\n this.#updateCache()\n }\n\n #key (key) {\n return State.key(key, this.getId())\n }\n\n #lastIndex () {\n return this.#deltas.length - 1\n }\n\n #updateCache () {\n const id = this.getId()\n const state = this.encode()\n\n url.hash = ['', id, state].join('/')\n history.pushState({ id, state }, '', url)\n localStorage.setItem(State.CacheKeys.id, id)\n localStorage.setItem(this.#key(State.CacheKeys.state), state)\n }\n\n static clearCache (id) {\n if (!id) {\n // Clear everything\n url.hash = ''\n history.pushState({}, '', url)\n id = localStorage.getItem(State.CacheKeys.id)\n localStorage.clear()\n // Keep current puzzle ID\n localStorage.setItem(State.CacheKeys.id, id)\n } else {\n // Clear a single puzzle\n url.hash = `/${id}`\n history.pushState({ id }, '', url)\n localStorage.removeItem(State.key(State.CacheKeys.state, id))\n }\n }\n\n static fromEncoded (state) {\n state = JSON.parse(base64decode(state))\n state.original = state.original || Puzzles.get(state.id)\n state.original.version ??= 0\n return new State(\n state.id,\n state.original,\n state.deltas,\n state.deltasIndex,\n state.selectedTile,\n state.version\n )\n }\n\n static fromId (id) {\n return new State(id, Puzzles.get(id))\n }\n\n static resolve (id) {\n let state\n\n // Allow cache to be cleared via URL param\n if (params.has(State.ParamKeys.clearCache)) {\n State.clearCache(params.get(State.ParamKeys.clearCache))\n }\n\n const pathSegments = url.hash.substring(1).split('/').filter((path) => path !== '')\n\n if (!id) {\n // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path) => !Puzzles.has(path)).some((segment, index) => {\n try {\n state = State.fromEncoded(segment)\n id = state.getId()\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e)\n }\n\n return state !== undefined\n })\n }\n\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || localStorage.getItem(State.CacheKeys.id) || Puzzles.visible.firstId\n\n const localState = localStorage.getItem(State.key(State.CacheKeys.state, id))\n if (localState) {\n try {\n state = State.fromEncoded(localState)\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e)\n }\n }\n }\n\n if (state) {\n const cachedVersion = state.#version\n const originalVersion = state.#original.version\n\n if (cachedVersion !== originalVersion) {\n console.debug(\n `Invalidating cache for ID ${id} due to version mismatch. ` +\n `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`\n )\n state = undefined\n State.clearCache(id)\n }\n }\n\n if (!state) {\n // Fall back to loading state from Puzzles cache by ID\n state = State.fromId(id)\n }\n\n if (!state) {\n throw new Error(`Unable to resolve state for ID '${id}'`)\n }\n\n return state\n }\n\n static key (key, id) {\n return `${key}:${id}`\n }\n\n static CacheKeys = Object.freeze({\n center: 'center',\n id: 'id',\n state: 'state',\n zoom: 'zoom'\n })\n\n static ParamKeys = Object.freeze({\n clearCache: 'clearCache'\n })\n}\n","const puzzles = {\n '001': require('./001.json'),\n '002': require('./002.json'),\n '003': require('./003.json'),\n '004': require('./004.json'),\n '005': require('./005.json'),\n '006': require('./006.json'),\n '007': require('./007.json'),\n '008': require('./008.json'),\n '009': require('./009.json'),\n '010': require('./010.json'),\n '011': require('./011.json'),\n test_infinite_loop: require('./test/infiniteLoop.json'),\n test_layout: require('./test/layout'),\n test_portal: require('./test/portal.json'),\n test_reflector: require('./test/reflector.json')\n}\n\nfunction traverse (ids, id, amount) {\n const index = ids.indexOf(id)\n return ids[index < 0 ? index : index + amount]\n}\n\nclass PuzzleGroup {\n ids\n\n constructor (ids) {\n this.firstId = ids[0]\n this.ids = ids\n this.lastId = ids[ids.length - 1]\n }\n\n get (id) {\n if (this.has(id)) {\n // Note: deep cloning puzzles to prevent mutation\n return structuredClone(puzzles[id])\n }\n }\n\n has (id) {\n return this.ids.includes(id)\n }\n\n nextId (id) {\n return traverse(this.ids, id, 1)\n }\n\n previousId (id) {\n return traverse(this.ids, id, -1)\n }\n}\n\nexport const Puzzles = new PuzzleGroup(Object.keys(puzzles).sort())\n\nPuzzles.hidden = new PuzzleGroup(Puzzles.ids.filter((id) => id.startsWith('test_')))\nPuzzles.titles = Object.fromEntries(Puzzles.ids.map((id) => [id, puzzles[id].title || id]))\nPuzzles.visible = new PuzzleGroup(Puzzles.ids.filter((id) => !Puzzles.hidden.has(id)))\n","import { capitalize, getIconElement, getTextElement } from './util'\nimport { Terminus } from './items/terminus'\nimport { EventListeners } from './eventListeners'\nimport { Puzzle } from './puzzle'\n\nexport class Solution {\n #conditions = []\n\n constructor (state) {\n state.forEach((condition) => this.#conditionFactory(condition))\n }\n\n teardown () {\n this.#conditions.forEach((condition) => condition.teardown())\n Solution.element.replaceChildren()\n }\n\n isSolved () {\n return this.#conditions.every((condition) => condition.isMet())\n }\n\n #conditionFactory (condition) {\n switch (condition.type) {\n case SolutionCondition.Types.connections: {\n this.#conditions.push(new Connections(condition))\n break\n }\n case SolutionCondition.Types.moves: {\n this.#conditions.push(new Moves(condition))\n break\n }\n default: {\n console.warn('Ignoring condition with unknown type:', condition.type)\n break\n }\n }\n }\n\n static element = document.getElementById('solution')\n}\n\nclass SolutionCondition {\n constructor (state, elements) {\n this.state = state\n\n const li = document.createElement('li')\n li.append(...elements)\n Solution.element.append(li)\n }\n\n isMet () {}\n\n teardown () {}\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'connections',\n 'moves'\n ].map((type) => [type, capitalize(type)])))\n}\n\nclass Connections extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #connections = []\n\n constructor (state) {\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement('/'),\n required,\n getIconElement('link', 'Connections')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n\n this.#eventListeners.add([\n { type: Terminus.Events.Connection, handler: this.update },\n { type: Terminus.Events.Disconnection, handler: this.update }\n ])\n }\n\n isMet () {\n return this.#connections.length === this.state.amount\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Connections.update', event)\n\n const terminus = event.detail.terminus\n const opening = event.detail.opening\n const connectionId = `${terminus.id}:${opening.direction}`\n const connectionIndex = this.#connections.findIndex((connection) => connection === connectionId)\n\n if (opening.connected && connectionIndex < 0) {\n this.#connections.push(connectionId)\n } else if (!opening.connected && connectionIndex >= 0) {\n this.#connections.splice(connectionIndex, 1)\n }\n\n this.#completed.textContent = this.#connections.length.toString()\n }\n}\n\nclass Moves extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #moves = 0\n\n constructor (state) {\n state.operator ??= Moves.Operators.equalTo\n\n if (!Object.values(Moves.Operators).includes(state.operator)) {\n throw new Error(`Invalid moves operator: ${state.operator}`)\n }\n\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement(state.operator),\n required,\n getIconElement('stacks', 'Moves')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n this.#eventListeners.add([{ type: Puzzle.Events.Updated, handler: this.update }])\n }\n\n isMet () {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch (this.state.operator) {\n case Moves.Operators.equalTo:\n return this.#moves === this.state.amount\n case Moves.Operators.greaterThan:\n return this.#moves > this.state.amount\n case Moves.Operators.lessThan:\n return this.#moves < this.state.amount\n }\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Moves.update', event)\n this.#moves = event.detail.state.moves()\n this.#completed.textContent = this.#moves.toString()\n }\n\n static Operators = Object.freeze({\n equalTo: '=',\n greaterThan: '>',\n lessThan: '<'\n })\n}\n","const script = document.createElement('script')\nscript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS')\ndocument.head.append(script)\n\nconst dataLayer = window.dataLayer = window.dataLayer || []\nfunction gtag () { dataLayer.push(arguments) }\ngtag('js', new Date())\ngtag('config', 'G-HXLD6EE5NS')\n","const doorbellOptions = window.doorbellOptions = {\n appKey: 'o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC',\n container: document.getElementById('feedback-container'),\n hideButton: true,\n properties: {}\n}\n\nconst script = document.createElement('script')\nscript.setAttribute(\n 'src',\n 'https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0'\n)\ndocument.head.append(script)\n\ndocument.addEventListener('puzzle-updated', (event) => {\n doorbellOptions.properties.puzzleId = event.detail.state.getId()\n})\n"],"names":["$a39eeb69bf620de6$var$static_l_desc","$a39eeb69bf620de6$var$static_d_desc","$a39eeb69bf620de6$var$static_bl_desc","$a39eeb69bf620de6$var$lenfix","$a39eeb69bf620de6$var$distfix","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","self1","undefined","document","Base","hidden","array","slice","create","describe","getOwnPropertyDescriptor","define1","forEach","iter","bind","i","l","length","forIn","hasOwnProperty","assign","dst","arguments","src","key","each","obj","desc","value","inject","dest","beans","preserve","beansNames","field","name","val","substring","bean","isFunc","res","prev","base","match","toLowerCase","isPlainObject","writable","test","part","statics","prototype","extend","ctor","proto","initialize","apply","clone","constructor","define","pick","b","list","begin","end","toString","_id","_class","_name","type","push","Formatter","instance","number","join","getClassName","importJSON","json","exportJSON","options","toJSON","serialize","props","exclude","filter","_prioritize","equals","obj1","obj2","Array","isArray","keys","read","start","amount","peek","__index","readIndex","_readIndex","readNull","__read","filtered","__filtered","remain","readList","entry","readNamed","getNamed","hasValue","source","getSource","__unfiltered","readSupported","that","__source","arg","hasNamed","prioritize","handleKey","processed","isPlainValue","asString","compact","dictionary","isRoot","formatter","precision","definitions","references","add","item","ref","unshift","_serialize","_compactSerialize","deserialize","_data","_setDictionary","_isRoot","isFirst","hasDictionary","isDictionary","args","JSON","stringify","target","parse","useTarget","Item","Layer","insert","concat","INSERT","items","itemsLength","startLength","splice","index","remove","append","_index","removed","capitalize","str","replace","toUpperCase","camelize","chr","hyphenate","Emitter","on","func","types","_eventTypes","handlers","_callbacks","indexOf","install","off","uninstall","once","handler","emit","event","setTarget","currentTarget","stop","responds","attach","detach","fire","_installEvents","events","_events","isString","PaperScope","paper","settings","applyMatrix","insertItems","handleSize","hitTolerance","project","projects","tools","_scopes","support","ctx","CanvasProvider","getContext","nativeDash","nativeBlendModes","BlendMode","nativeModes","release","agent","user","navigator","userAgent","os","exec","platform","browser","v1","v2","rv","chrome","version","versionNumber","parseFloat","trident","jsdom","webkit","atom","getView","_view","getPaper","execute","PaperScript","View","updateFocus","scope","setup","element","Project","createCanvas","width","height","getCanvas","activate","clear","handleAttribute","el","attr","getAttribute","hasAttribute","PaperScopeItem","_scope","_list","_reference","isActive","CollisionDetection","findItemBoundsCollisions","items1","items2","tolerance","getBounds","bounds","rect","left","top","right","bottom","bounds1","bounds2","findBoundsCollisions","findCurveBoundsCollisions","curves1","curves2","bothAxis","curves","min","Math","max","hor","ver","boundsA","boundsB","sweepVertical","onlySweepAxisCollisions","allBounds","lengthA","lengthAll","binarySearch","indices","coord","lo","hi","mid","pri0","pri1","sec0","sec1","allIndicesByPri0","sort","i1","i2","activeIndicesByPri1","allCollisions","curIndex","curBounds","origIndex","isCurrentA","isCurrentB","curCollisions","pruneCount","j","activeIndex","curSec1","curSec0","activeBounds","isActiveA","isActiveB","curPri1","collisions","multiplier","pow","round","pair","val1","val2","separator","point","x","y","size","rectangle","Numerical","abscissas","weights","abs","sqrt","log2","log","LOG2E","clamp","getDiscriminant","c","split","D","E","ad","bd","cd","p","dp","q","dq","getNormalizationFactor","norm","EPSILON","MACHINE_EPSILON","CURVETIME_EPSILON","GEOMETRIC_EPSILON","TRIGONOMETRIC_EPSILON","ANGULAR_EPSILON","KAPPA","isZero","isMachineZero","integrate","f","w","A","B","m","sum","Ax","findRoot","df","fx","dx","nx","solveQuadratic","roots","x1","x2","Infinity","Q","R","count","boundless","minB","maxB","isFinite","solveCubic","d","b1","c2","qd","evaluate","x0","tmp","t","r","td","rd","UID","_pools","pool","Point","arg0","arg1","reading","hasY","_set","setAngle","angle","getLength","setLength","_angle","cos","sin","scale","getAngle","getAngleInRadians","PI","setAngleInRadians","getAngleInDegrees","setAngleInDegrees","atan2","div","NaN","dot","acos","getQuadrant","getDirectedAngle","cross","getDistance","squared","normalize","current","rotate","center","subtract","transform","matrix","_transformPoint","multiply","divide","modulo","negate","isInside","Rectangle","contains","isClose","isCollinear","isColinear","isOrthogonal","isNaN","isInQuadrant","point1","point2","random","y1","y2","op","LinkedPoint","owner","setter","_x","_y","_owner","_setter","_dontNotify","getX","setX","getY","setY","isSelected","_selection","_getSelection","setSelected","selected","_changeSelection","Size","hasHeight","size1","size2","LinkedSize","_width","_height","getWidth","setWidth","getHeight","setHeight","arg2","arg3","from","to","frm","next","rt","getPoint","_dontLink","setPoint","getSize","_fw","_fh","setSize","sx","_sx","sy","_sy","h","getLeft","setLeft","getTop","setTop","getRight","setRight","getBottom","setBottom","getCenterX","setCenterX","getCenterY","setCenterY","getCenter","setCenter","getArea","isEmpty","_containsRectangle","_containsPoint","intersects","epsilon","intersect","unite","include","expand","parts","xFirst","LinkedRectangle","internal","Matrix","ok","_a","_b","_c","_d","_tx","_ty","reset","tx","ty","_changed","getValues","_applyMatrix","mx","recursively","_setApplyMatrix","isIdentity","translate","shear","skew","toRadians","tan","a1","c1","d1","a2","b2","d2","tx2","ty2","prepend","tx1","ty1","appended","prepended","invert","det","inverted","concatenate","preConcatenate","chain","_shiftless","_orNullIfIdentity","isInvertible","isSingular","_transformCoordinates","_transformCorners","coords","_transformBounds","inverseTransform","_inverseTransform","decompose","degrees","asin","translation","getTranslation","rotation","scaling","skewing","getScaling","getRotation","applyToContext","prop","Line","arg4","asVector","_px","_py","_vx","_vy","getVector","line","isInfinite","getSide","getSignedDistance","p1x","p1y","v1x","v1y","p2x","p2y","v2x","v2y","dy","u1","u2","uMin","px","py","vx","vy","ccw","_children","_namedChildren","_activeLayer","_currentStyle","Style","_selectionItems","_selectionCount","_updateVersion","flags","view","_needsUpdate","_requested","_autoUpdate","requestUpdate","changes","_changes","changesById","_changesById","children","getCurrentStyle","setCurrentStyle","style","getIndex","getOptions","getLayers","getActiveLayer","getSymbolDefinitions","ids","getItems","class","SymbolItem","definition","_definition","getSymbols","getSelectedItems","selectionItems","selection","isInserted","_updateSelection","selectAll","setFullySelected","deselectAll","addLayer","layer","insertLayer","_remove","_setProject","setName","_insertItem","_created","NO_INSERT","insertChild","_getItems","getItem","removeOn","sets","_removeSets","mousedrag","other","draw","pixelRatio","save","param","offset","viewMatrix","matrices","updateMatrix","restore","strokeWidth","_drawSelection","_serializeFields","_canApplyMatrix","_canScaleStroke","_pivot","_visible","_blendMode","_opacity","_locked","_guide","_clipMask","_selectBounds","_selectChildren","pivot","visible","blendMode","opacity","locked","guide","clipMask","data","_countItemEvent","onFrame","_animateItem","onLoad","onError","_itemHandlers","_initialize","hasProps","_matrix","_parent","_style","parent","fields","fontSize","Group","_defaults","symbol","_symbol","cacheParent","_project","_bounds","_position","_decomposed","_globalMatrix","_clearBoundsCache","getId","getName","_removeNamed","_getOwner","namedChildren","getStyle","setStyle","getSelection","setSelection","flag","isFullySelected","isClipMask","setClipMask","setFillColor","setStrokeColor","getData","setData","getPosition","position","_getPositionFromBounds","setPosition","getPivot","setPivot","getStrokeBounds","stroke","getHandleBounds","handle","getInternalBounds","hasMatrix","opts","_boundsOptions","getStrokeScaling","cacheItem","_getCachedBounds","setBounds","_backup","_getBounds","_updateBoundsCache","_getBoundsCacheKey","noInternal","cacheKey","cached","nonscaling","hasStroke","_getStrokeMatrix","_item","getViewMatrix","_boundsCache","cache","_decompose","decomposed","setRotation","setScaling","getMatrix","setMatrix","getGlobalMatrix","_dontClone","parents","getApplyMatrix","setApplyMatrix","getTransformContent","setTransformContent","getProject","installEvents","getLayer","getParent","setParent","addChild","getChildren","setChildren","removeChildren","addChildren","getFirstChild","getLastChild","getNextSibling","getPreviousSibling","_equals","copy","deep","copyAttributes","copyContent","insertAbove","orig","excludeMatrix","rasterize","resolution","raster","Raster","getResolution","topLeft","getTopLeft","floor","boundsSize","bottomRight","getBottomRight","ceil","rasterSize","_contains","_asPathItem","Path","getIntersections","hitTest","_hitTest","HitResult","hitTestAll","all","hitTestChildren","_exclude","child","_hitTestChildren","parentViewMatrix","guides","tolerancePadding","_tolerancePadding","_getStrokePadding","checkSelf","hit","checkPoint","pt","checkPosition","checkCenter","checkBounds","points","_hitTestSelf","fill","hasFill","matches","compare","matchObject","firstOnly","overlapping","inside","recursive","path","childMatrix","insertChildren","inserted","notifySelf","_insertAt","insertBelow","sendToBack","bringToFront","appendTop","appendBottom","moveAbove","moveBelow","addTo","copyTo","reduce","namedArray","notifyParent","_dispose","replaceWith","reverseChildren","reverse","numChildren","isEditable","hasShadow","_getOrder","getList","list1","list2","hasChildren","isAbove","isBelow","isParent","isChild","isDescendant","isAncestor","isSibling","isGroupedWith","_applyRecursively","transformMatrix","fillColor","getFillColor","strokeColor","getStrokeColor","_transformContent","decomp","applyRecursively","globalToLocal","localToGlobal","parentToLocal","localToParent","fitBounds","itemRatio","rectRatio","newBounds","_setStyles","fillStyle","toCanvasStyle","strokeStyle","lineWidth","getStrokeWidth","strokeJoin","getStrokeJoin","strokeCap","getStrokeCap","miterLimit","getMiterLimit","lineJoin","lineCap","dashArray","getDashArray","dashOffset","getDashOffset","setLineDash","lineDashOffset","mozDash","mozDashOffset","blur","getShadowBlur","getShadowOffset","shadowColor","getShadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","parentStrokeMatrix","globalMatrix","mainCtx","itemOffset","prevOffset","normalBlend","nativeBlend","direct","dontStart","clip","_canComposite","pop","strokeMatrix","clipItem","globalAlpha","globalCompositeOperation","setTransform","_draw","dontFinish","getFillRule","process","_isUpdated","updateVersion","CompoundPath","updated","itemSelected","boundsSelected","positionSelected","_drawSelected","color","getSelectedColor","half","pos","beginPath","arc","deltas","delta","moveTo","lineTo","closePath","fillRect","hash","tween","easing","duration","Tween","_handleFrame","time","running","tweenTo","tweenFrom","_clipItem","_getClipItem","isClipped","setClipped","clipped","Shape","radius","_type","_size","_radius","setType","setRadius","getType","getShape","setShape","getRadius","rad","toPath","toShape","dontPaint","untransformed","isCircle","rx","ry","cx","cy","bezierCurveTo","getCornerCenter","halfSize","dir","corner","quadrant","isOnEllipseStroke","padding","vector","hitStroke","hitFill","strokeRadius","strokePadding","outer","inner","createShape","Circle","Ellipse","ellipse","_readEllipse","crossOrigin","_smoothing","image","object","getElementById","naturalHeight","setImage","setSource","_loaded","_image","canvas","_canvas","_setImage","copyCanvas","drawImage","_crossOrigin","_clear","getElement","getLoaded","u","getPpi","getImage","Event","setTimeout","DomEvent","load","error","complete","naturalWidth","_context","setCanvas","_change","setContext","context","toDataURL","Image","getCrossOrigin","setCrossOrigin","getSmoothing","setSmoothing","smoothing","getSubCanvas","getSubRaster","getAverageColor","PathItem","_sampleContext","clearRect","sampleSize","pixels","getImageData","channels","total","alpha","Color","getPixel","setPixel","components","_convert","_alpha","imageData","createImageData","putImageData","setImageData","disabled","DomElement","setPrefixed","setDefinition","SymbolDefinition","getDefinition","getSymbol","setSymbol","dontCenter","setItem","_dontCenter","place","values","segments","handles","ends","Segment","arg5","handleIn","handleOut","SegmentPoint","_point","hasHandles","_handleIn","_handleOut","_path","curve","_curves","_closed","getHandleIn","setHandleIn","getHandleOut","setHandleOut","isSmooth","clearHandles","oldSelection","getPath","getCurve","_segments","getCurves","getLocation","CurveLocation","_segment1","getNext","smooth","_first","_last","factor","getPrevious","p0","p1","p2","k","d1_a","d1_2a","d2_a","d2_2a","N","isLast","reversed","removeSegment","segment","interpolate","handleIn1","handleIn2","handleOut2","handleOut1","change","Curve","arg6","arg7","seg1","seg2","handle1","handle2","segment1","segment2","_segment2","getPoint1","getHandle1","getHandle2","getPoint2","_length","classify","setPoint1","setPoint2","setHandle1","setHandle2","getSegment1","getSegment2","getPoints","getLine","getPart","getPartLength","divideAt","location","divideAtTime","getTimeAt","_setHandles","subdivide","setHandles","splitAt","splitAtTime","getLocationAtTime","isTime","straight","h1","h2","y0","x3","y3","x4","y4","x5","y5","x6","y6","x7","y7","x8","y8","x9","y9","getMonoCurves","io","o0","o1","o2","o3","isStraight","v0","v3","getTimeOf","p3","getNearestTime","minDist","minT","refine","dist","step","flip","isFlatEnough","flatness","ux","uy","_addBounds","minPad","maxPad","s1","s2","isLinear","third","hasLength","isHorizontal","getTangentAtTime","isVertical","getLocationAt","_isTime","getParameterAt","getTimesWithTangent","tangent","getOffsetAtTime","getLocationOf","getOffsetOf","loc","getOffset","getParameterOf","getNearestLocation","getNearestPoint","methods","_evaluateMethods","getLengthIntegrand","ax","bx","ay","by","getIterations","normalized","len","d3","serpentine","t1","t2","hasRoots","t1Ok","t2Ok","f1","f2","ds","forward","rangeLength","diff","guess","getTangent","getWeightedTangent","getNormal","getWeightedNormal","getCurvature","getPeaks","addLocation","locations","overlap","excludeStart","excludeEnd","loc1","loc2","_intersection","clipConvexHull","hullTop","hullBottom","dMin","dMax","clipConvexHullPart","threshold","qx","qy","getCurveLineIntersections","getCurveIntersections","overlaps","getOverlaps","straight1","straight2","before","addCurveIntersections","recursion","calls","tMin","tMax","uMax","tMinClip","tMaxClip","q0x","q0y","q3x","q3y","dp0","dp1","dp2","dp3","hull","getConvexHull","dq0","dq1","dq2","dq3","dist1","dist2","distRatio","tMinNew","tMaxNew","uDiff","getSelfIntersection","info","getSquaredLineLength","straightBoth","l1","l2","pairs","matrix1","matrix2","_returnFirst","length1","length2","values1","values2","boundsCollisions","index1","curve1","collisions1","index2","curve2","den","times","t0","_overlap","_distance","_setCurve","_time","getPointAtTime","_next","_previous","_setPath","_version","_curve","_segment","_setSegment","getSegment","getTime","trySegment","_offset","_curveOffset","getParameter","getCurveOffset","getIntersection","getLastSegment","_ignoreOther","isTouching","inter","isCrossing","t1Inside","t2Inside","c4","c3","offsets","addOffsets","isInRange","getPointAt","v4","a3","a4","hasOverlap","merge","search","found","path1","path2","expanded","pathData","compound","first","isClockwise","setClockwise","clockwise","setPathData","previous","control","relative","getCoord","command","lower","move","cubicCurveTo","quadraticCurveTo","arcTo","winding","_getWinding","onPath","windingL","windingR","getCrossings","minLoc","isPath","itemsFrom","itemsTo","setClosed","paths1","paths2","matched","boundsOverlaps","pathBoundsOverlaps","closed","setSegments","_segmentSelection","_area","getSegments","fullySelected","last","_add","getFirstSegment","_countCurves","getFirstCurve","getLastCurve","isClosed","getPathData","_precision","curX","curY","prevX","prevY","inX","inY","outX","outY","addSegment","skipLine","segs","_adjustCurves","insertSegment","addSegments","insertSegments","removeSegments","_includeCurves","area","_selectSegments","newSelection","last1","last2","first2","first1","simplify","flatten","flattener","PathFlattener","PathFitter","fit","_default","loop","asymmetric","paddingLeft","paddingRight","knots","n_1","rf","hx","hy","seg3","topCenter","seg4","isArc","pt1","pt2","shape","pos2","end2","pos1","end1","start2","cap","numSegments","hitCurves","isCloseEnough","checkSegmentPoint","seg","anchor","checkSegmentPoints","addToArea","checkSegmentStroke","isJoin","_addBevelJoin","_addSquareCap","getOffsetsWithTangent","curveStart","curveTimes","drawSegments","drawSegment","dashLength","drawPart","drawHandles","pX","pY","miniSize","miniHalf","drawHandle","hX","hY","getCurrentSegment","moveBy","curveTo","through","extent","middle","large","rxSq","rySq","xSq","ySq","throughSide","centerSide","ext","inc","z","out","_in","lineBy","curveBy","parameter","cubicCurveBy","quadraticCurveBy","arcBy","prevCoords","processSegment","joinBounds","addPoint","addRound","addJoin","addCap","phi","isArea","normal1","getNormalAtTime","normal2","normal","joinPadding","joinRadius","SQRT2","paddingX","paddingY","xn","xx","yn","yx","ellipseSegments","createPath","createEllipse","bl","getBottomLeft","tl","tr","getTopRight","br","RoundRectangle","Oval","Arc","RegularPolygon","sides","three","Star","radius1","radius2","paths","getCurrentPath","check","operators","getPaths","preparePath","resolve","resolveCrossings","reorient","createResult","result","filterIntersection","traceBoolean","operation","trace","splitBoolean","_path1","_path2","operator","crossings","divideLocations","collectPaths","_overlapsOnly","curvesValues","curveCollisions","curveCollisionsMap","map","propagateWinding","_winding","tracePaths","reorientPaths","added","addPath","linkIntersections","clearCurveHandles","lookup","container","sorted","entry1","containerWinding","getInteriorPoint","entry2","clearLater","renormalizeLocs","prevCurve","prevTime","results","clearCurves","clearLookup","origTime","newCurve","getWinding","dontFlip","vPrev","vClose","curvesList","ia","pv","pa","po","paL","paR","pathWindingL","pathWindingR","onAnyPath","quality","handleCurve","a0","monoCurves","addWinding","windingPrev","a3Prev","totalLength","curveLength","operand","SQRT1_2","wind","pathWinding","otherPath","starts","isValid","_visited","isStart","visitPath","inter1","inter2","over1","over2","branch","visited","valid","finished","branches","getCrossingSegments","collectStarts","collect","nextInter","shift","hasOverlaps","hasCrossings","intersections","nonZero","intercepts","mv","mo0","mo3","maxRecursion","ignoreStraight","minSpan","addCurve","computeParts","halves","tMid","_get","fitCubic","tan1","tan2","uPrime","chordLengthParameterize","maxError","parametersInOrder","generateBezier","findMaxError","reparameterize","tanCenter","C","X","b0","b3","alpha1","alpha2","detC0C1","detC0X","detXC1","c0","segLength","eps","degree","maxDist","P","TextItem","content","_content","_lines","setContent","getContent","getCharacterStyle","setCharacterStyle","getParagraphStyle","setParagraphStyle","PointText","lines","leading","getLeading","font","getFontStyle","textAlign","getJustification","fillText","strokeText","numLines","justification","getTextWidth","colorCtx","gray","rgb","hsb","hsl","gradient","componentParsers","namedColors","transparent","hsbIndices","converters","g","achromatic","t3s","t3","properties","parser","_components","Gradient","_removeOwner","_addOwner","_properties","argType","converted","fromCSS","string","parseInt","trim","isHSL","component","turn","grad","willReadFrequently","parsers","stops","radial","getComponents","_canvasStyle","converter","convert","getAlpha","setAlpha","hasAlpha","col","isGradient","toCSS","hex","canvasGradient","_stops","origin","destination","highlight","inverse","_radial","createRadialGradient","createLinearGradient","addColorStop","_color","_types","_setOwner","components1","components2","setStops","setRadial","_owners","getStops","GradientStop","getRadial","stops1","stops2","rampPoint","setColor","setOffset","getRampPoint","setRampPoint","getColor","itemDefaults","fillRule","strokeScaling","shadowOffset","selectedColor","groupDefaults","fontFamily","fontWeight","textDefaults","_values","isColor","isPoint","applyToChildren","old","_dontMerge","childValue","Font","WindingRule","isStyle","style1","style2","secondary","defaults2","value1","value2","getFontSize","getFontWeight","getFontFamily","getFont","setFont","getPixelSize","handlePrefix","prefixes","suffix","prefix","getStyles","doc","nodeType","ownerDocument","defaultView","getComputedStyle","viewport","body","html","documentElement","getBoundingClientRect","clientLeft","clientTop","pageXOffset","scrollLeft","pageYOffset","scrollTop","getViewportBounds","innerWidth","clientWidth","innerHeight","clientHeight","isInvisible","isInView","getPrefixed","passive","addEventListener","removeEventListener","targetTouches","changedTouches","pageX","clientX","pageY","clientY","getTarget","srcElement","getRelatedTarget","relatedTarget","toElement","requestAnimationFrame","timer","nativeRequest","requested","callbacks","handleCallbacks","functions","callback","setInterval","getCanvasSize","setAttribute","_viewEvents","none","userDrag","userSelect","touchCallout","contentZooming","tapHighlightColor","_windowEvents","resize","setViewSize","Stats","_stats","stats","domElement","appendChild","_element","_pixelRatio","devicePixelRatio","_setElementSize","_viewSize","_views","_viewsById","_focused","_frameItems","_frameItemCount","_itemEvents","native","virtual","node","_animate","play","pause","_count","getAutoUpdate","setAutoUpdate","autoUpdate","update","now","Date","animate","_handleFrameItems","getPixelRatio","getViewSize","isVisible","parentNode","temp","createElement","removeChild","getZoom","setZoom","zoom","scrollBy","projectToView","viewToProject","getEventPoint","CanvasView","prevFocus","tempFocus","mousedown","mousemove","mouseup","dragging","mouseDown","pointerEnabled","msPointerEnabled","viewEvents","docEvents","mouseout","nodeName","handleMouseMove","scroll","_handleMouseEvent","downPoint","lastPoint","downItem","overItem","dragItem","clickItem","clickTime","dblClick","called","prevented","fallbacks","doubleclick","wasInView","itemEventsMap","click","mouseenter","mouseleave","itemEvents","hitItems","nativeMove","tool","inView","hitItem","mouse","substr","emitMouseEvent","drag","emitMouseEvents","down","up","cancelable","preventDefault","_handleKeyEvent","character","keyEvent","KeyEvent","sign","_resetState","prevPoint","stopItem","mouseEvent","stopped","MouseEvent","fallback","HTMLCanvasElement","deviceRatio","backingStoreRatio","firefox","prevFont","measureText","stopPropagation","getTimeStamp","timeStamp","getModifiers","Key","modifiers","metaFixMap","downKey","keyLookup","charLookup","keyMap","charMap","alt","meta","capsLock","space","option","mac","getKey","keyIdentifier","String","fromCharCode","keyCode","keydown","altKey","metaKey","ctrlKey","keypress","charCode","keyup","isDown","ToolEvent","_choosePoint","toolPoint","getLastPoint","_lastPoint","setLastPoint","getDownPoint","_downPoint","setDownPoint","getMiddlePoint","_middlePoint","setMiddlePoint","middlePoint","getDelta","_delta","setDelta","getCount","setCount","Tool","_moveCount","_downCount","getMinDistance","_minDistance","setMinDistance","minDistance","_maxDistance","getMaxDistance","setMaxDistance","maxDistance","getFixedDistance","setFixedDistance","distance","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","isFunction","_then","_startTime","state","_keys","_parsedKeys","_parseKeys","_from","_getState","_to","then","progress","getValue","__add","__subtract","__multiply","_setProperty","onUpdate","startTime","_getProperty","resolved","_resolveValue","_calculate","parsed","calculateBinary","Http","request","xhr","XMLHttpRequest","open","method","url","async","mimeType","overrideMimeType","onload","status","responseText","onerror","message","send","canvases","sr","sg","sb","sa","bg","bb","ba","dr","dg","db","getLum","setLum","mn","lmn","ln","mxl","getSat","setSat","md","modes","screen","overlay","darken","lighten","difference","exclusion","hue","saturation","luminosity","average","negation","mode","srcContext","dstContext","srcCanvas","dstData","SvgElement","svg","xmlns","xlink","attributeNamespace","href","attributes","namespace","setAttributeNS","tag","createElementNS","getAttributeNS","SvgStyles","true","false","property","attribute","toSVG","fromSVG","exportFilter","getTransform","coordinates","attrs","trans","exportGroup","childNode","exportSVG","exportShape","exporters","embedImages","matchShapes","definitionItem","viewBox","overflow","textContent","svgs","__id","typeId","exportDefinitions","defs","insertBefore","firstChild","XMLSerializer","serializeToString","exporter","onExport","exportGradient","gradientNode","getGradient","getOrigin","getDestination","getHighlight","fy","gradientUnits","stopColor","visibility","setOptions","rootSize","allowNull","allowPercent","defaultValue","defaultX","defaultY","convertValue","importGroup","nodes","childNodes","isClip","isDefs","currentStyle","applyAttributes","querySelectorAll","importNode","importPoly","importGradient","scaleToBounds","_scaleToBounds","importers","clippath","polygon","polyline","lineargradient","radialgradient","use","circle","text","switch","applyTransform","transforms","applyOpacity","gradientTransform","setVisible","display","percent","styles","group","tagName","isElement","nextSibling","importer","onImport","expandShapes","importSVG","DOMParser","parseFromString","File","reader","FileReader","readAsText","mod","acorn","inpt","inputLen","input","initTokenState","parseTopLevel","program","lastStart","lastEnd","tokPos","lastEndLoc","line_loc_t","inFunction","strict","labels","readToken","startNode","tokType","_eof","stmt","parseStatement","isUseStrict","setStrict","finishNode","sourceFile","tokStart","tokEnd","tokStartLoc","tokEndLoc","tokVal","tokRegexpAllowed","tokCurLine","tokLineStart","containsEsc","defaultOptions","ecmaVersion","strictSemicolons","allowTrailingCommas","forbidReserved","allowReturnOutsideFunction","onComment","ranges","directSourceFile","opt","getLineInfo","cur","lineBreak","lastIndex","column","raise","SyntaxError","raisedAt","tokenize","getToken","forceRegexp","startLoc","endLoc","jumpTo","reAllowed","skipSpace","empty","_num","_regexp","_string","_break","keyword","_case","beforeExpr","_catch","_continue","_debugger","_do","isLoop","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_while","_with","_new","_this","_null","atomValue","_true","_false","binop","keywordTypes","_bracketL","_bracketR","_braceL","_braceR","_parenL","_parenR","_comma","_semi","_colon","_dot","_question","_slash","_eq","isAssign","_assign","_incDec","postfix","isUpdate","_prefix","_logicalOR","_logicalAND","_bitwiseOR","_bitwiseXOR","_bitwiseAND","_equality","_relational","_bitShift","_plusMin","_multiplyModulo","kw","tokTypes","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","question","slash","eq","eof","num","regexp","makePredicate","words","cats","compareTo","arr","cat","Function","isReservedWord3","isReservedWord5","isStrictReservedWord","isStrictBadIdWord","isKeyword","nonASCIIwhitespace","nonASCIIidentifierStartChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","newline","isIdentifierStart","isIdentifierChar","finishToken","skipLineComment","ch","charCodeAt","skipBlockComment","readRegexp","readWord","tok","getTokenFromCode","readNumber","readInt","readString","quote","octal","readHexChar","finishOp","escaped","inClass","charAt","mods","readWord1","radix","startsWithDot","isFloat","word","esc","escStr","strct","lastIndexOf","node_t","node_loc_t","range","startNodeFrom","expression","eat","canInsertSemicolon","semicolon","unexpected","expect","checkLVal","expr","loopLabel","kind","switchLabel","sawDefault","starttype","isBreak","label","parseIdent","lab","parseParenExpression","parseFor","parseVar","declarations","parseForIn","parseExpression","parseFunction","consequent","alternate","argument","discriminant","cases","isCase","block","parseBlock","clause","guard","guardedHandlers","finalizer","maybeName","allowStrict","oldStrict","noIn","decl","noComma","parseMaybeAssign","expressions","parseMaybeConditional","parseExprOp","minPrec","prec","parseMaybeUnary","parseSubscripts","parseExprAtom","noCalls","computed","callee","parseExprList","raw","tokStartLoc1","tokStart1","elements","parseObj","sawGetSet","parsePropertyName","isGetSet","conflict","isStatement","params","oldInFunc","oldLabels","close","allowTrailingComma","allowEmpty","elts","liberal","binaryOperators","unaryOperators","__self","__$__","$__","compile","insertions","insertion","getCode","replaceCode","sourceMaps","paperFeatures","offsetCode","lineBreaks","getElementsByTagName","innerHTML","mappings","encodeVLQ","base64","safari","file","names","sourceRoot","sources","sourcesContent","operatorOverloading","moduleExports","walkAST","handleOverloading","between","parentType","exp","handleExports","declaration","specifiers","dec","specifier","preserveParens","sourceType","btoa","unescape","encodeURIComponent","toolHandlers","expose","compiled","script","head","createTextNode","__paperscript__","onResize","setOnResize","setOnFrame","loadScript","canvasId","scopeAttribute","baseURI","loadAll","readyState","calculateUnary","Symbol","PlacedSymbol","amd","$ebef8a20963d596b$export$56b48cc5d7560ffb","$ebef8a20963d596b$export$332f4d7bee38db93","$ebef8a20963d596b$export$f435f793048e7a0f","$ebef8a20963d596b$export$d53f8326294b31d8","$ebef8a20963d596b$export$b54c7ea7aabba5c8","$ebef8a20963d596b$export$a1aa2dd4ad0d3f6","$ebef8a20963d596b$export$866e20207bbc41f2","$ebef8a20963d596b$export$2c19a3e3b4008fff","$ebef8a20963d596b$export$268622f0f1cbc82b","$ebef8a20963d596b$export$13807d9ee5a34a42","$ebef8a20963d596b$export$7387db7caf96fcdb","$ebef8a20963d596b$export$7af82191547c5ff7","$ebef8a20963d596b$export$ba43bf67f3d48107","$ebef8a20963d596b$export$7acfa6ed01010e37","$ebef8a20963d596b$export$68e7b4c4d99215d9","$ebef8a20963d596b$export$2b5f701edfbd6f00","$ebef8a20963d596b$export$85c928794f8d04d4","$ebef8a20963d596b$export$50792b0e93539fde","$ebef8a20963d596b$export$83d89fbfd8236492","$ebef8a20963d596b$export$98e6a39c04603d36","$ebef8a20963d596b$export$61f24eb03dd7ce92","$ebef8a20963d596b$export$5f8c09e3ae6f64e1","$ebef8a20963d596b$var$astralIdentifierCodes","$ebef8a20963d596b$var$astralIdentifierStartCodes","$ebef8a20963d596b$var$nonASCIIidentifierStartChars","$ebef8a20963d596b$var$reservedWords","strictBind","$ebef8a20963d596b$var$ecma5AndLessKeywords","$ebef8a20963d596b$var$keywords$1","$ebef8a20963d596b$var$keywordRelationalOperator","$ebef8a20963d596b$var$nonASCIIidentifierStart","$ebef8a20963d596b$var$nonASCIIidentifier","$ebef8a20963d596b$var$isInAstralSet","astral","conf","startsExpr","updateContext","$ebef8a20963d596b$var$binop","$ebef8a20963d596b$var$beforeExpr","$ebef8a20963d596b$var$startsExpr","$ebef8a20963d596b$var$kw","privateId","questionDot","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","star","starstar","coalesce","_const","_super","_extends","_export","_import","_instanceof","_typeof","_void","_delete","$ebef8a20963d596b$var$nextLineBreak","$ebef8a20963d596b$var$skipWhiteSpace","$ebef8a20963d596b$var$ref","$ebef8a20963d596b$var$hasOwnProperty","$ebef8a20963d596b$var$toString","$ebef8a20963d596b$var$hasOwn","hasOwn","propName","$ebef8a20963d596b$var$isArray","$ebef8a20963d596b$var$wordsRegexp","$ebef8a20963d596b$var$codePointToString","$ebef8a20963d596b$var$loneSurrogate","nextBreak","onInsertedSemicolon","onTrailingComma","allowReserved","allowImportExportEverywhere","allowAwaitOutsideFunction","allowSuperOutsideMethod","allowHashBang","checkPrivateFields","onToken","$ebef8a20963d596b$var$warnedAboutEcmaVersion","$ebef8a20963d596b$var$functionFlags","generator","$ebef8a20963d596b$var$SCOPE_FUNCTION","startPos","$ebef8a20963d596b$var$getOptions","console","warn","tokens","token","comment","keywords","reserved","reservedWords","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","lineStart","curLine","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","potentialArrowInForAwait","yieldPos","awaitPos","awaitIdentPos","undefinedExports","scopeStack","enterScope","regexpState","privateNameStack","$ebef8a20963d596b$var$prototypeAccessors","inGenerator","inAsync","canAwait","allowSuper","allowDirectSuper","treatFunctionsAsVar","allowNewDotTarget","inClassStaticBlock","nextToken","currentVarScope","inClassFieldInit","currentThisScope","treatFunctionsAsVarInScope","currentScope","plugins","cls","parseExpressionAt","tokenizer","defineProperties","$ebef8a20963d596b$var$pp$9","$ebef8a20963d596b$var$literal","spaceAfter","isContextual","eatContextual","expectContextual","insertSemicolon","afterTrailingComma","notNext","$ebef8a20963d596b$var$DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","$ebef8a20963d596b$var$pp$8","adaptDirectivePrologue","$ebef8a20963d596b$var$loopLabel","$ebef8a20963d596b$var$switchLabel","isLet","skip","nextCh","ident","isAsyncFunction","after","topLevel","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","parseExpressionStatement","parseImport","parseExport","parseLabeledStatement","awaitAt","init$1","await","startsWithLet","isForOf","toAssignable","checkLValPattern","isAsync","declarationPosition","$ebef8a20963d596b$var$FUNC_STATEMENT","$ebef8a20963d596b$var$FUNC_HANGING_STATEMENT","exitScope","$ebef8a20963d596b$var$empty$1","parseCatchClauseParam","parseBindingAtom","simple","allowMissingInitializer","i$1","label$1","statementStart","createNewLexicalScope","exitStrict","isForIn","isFor","parseVarId","$ebef8a20963d596b$var$checkKeyName","statement","allowExpressionBody","forInit","initFunction","checkLValSimple","oldYieldPos","oldAwaitPos","oldAwaitIdentPos","parseFunctionParams","parseFunctionBody","parseBindingList","parseClassId","parseClassSuper","privateNameMap","enterClassBody","classBody","hadConstructor","parseClassElement","superClass","$ebef8a20963d596b$var$isPrivateNameConflicted","curr","static","exitClassBody","constructorAllowsSuper","keyName","isGenerator","isStatic","parseClassStaticBlock","isClassElementNameStart","lastValue","startNodeAt","parseClassElementName","isConstructor","parseClassMethod","parseClassField","parsePrivateIdent","allowsDirectSuper","parseMethod","$ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK","parseExprSubscripts","declared","used","parseExportAllDeclaration","exported","parseModuleExportName","checkExport","parseExportDefaultDeclaration","shouldParseExportStatement","parseExportDeclaration","checkVariableExport","parseExportSpecifiers","spec","checkUnreserved","local","checkLocalExport","fNode","cNode","checkPatternExport","pat","list$1","elt","decls","parseExportSpecifier","parseImportSpecifiers","parseImportSpecifier","imported","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","stringLiteral","parseLiteral","statements","isDirectiveCandidate","directive","$ebef8a20963d596b$var$pp$7","isBinding","toAssignableList","exprList","parseSpread","parseRestBinding","allowModifiers","rest","parseBindingListItem","parseAssignableListItem","elem","parseMaybeDefault","bindingType","checkClashes","isBind","declareName","checkLValInnerPattern","isExpr","preserveSpace","override","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","$ebef8a20963d596b$var$pp$6","curContext","braceIsBlock","prevType","inGeneratorContext","overrideContext","tokenCtx","statementParens","allowed","$ebef8a20963d596b$var$pp$5","checkPropClash","propHash","shorthand","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldDoubleProto","parseExprOps","leftStartPos","leftStartLoc","logical","buildBinary","sawUnary","parseAwait","$ebef8a20963d596b$var$isPrivateFieldAccess","node$1","maybeAsyncArrow","optionalChained","parseSubscript","optional","chainNode","shouldParseAsyncArrow","parseSubscriptAsyncArrow","parseArrowExpression","optionalSupported","node$2","quasi","parseTemplate","isTagged","forNew","canBeArrow","regex","pattern","parseParenAndDistinguishExpression","parseNew","parseExprImport","parseExprAtomDefault","parseImportMeta","parseDynamicImport","errorPos","bigint","shouldParseArrow","spreadStart","innerStartPos","innerStartLoc","lastIsComma","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","$ebef8a20963d596b$var$empty","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","parseGetterSetter","paramCount","copyNode","isArrowFunction","isMethod","isExpression","useStrict","checkParams","nonSimple","isSimpleParamList","allowDuplicates","nameHash","re","parseIdentNode","delegate","$ebef8a20963d596b$var$pp$4","$ebef8a20963d596b$var$pp$3","$ebef8a20963d596b$var$Scope","var","lexical","redeclared","scope$1","scope$2","scope$3","$ebef8a20963d596b$var$SCOPE_TOP","$ebef8a20963d596b$var$pp$2","$ebef8a20963d596b$var$finishNodeAt","newNode","$ebef8a20963d596b$var$ecma9BinaryProperties","$ebef8a20963d596b$var$ecma10BinaryProperties","$ebef8a20963d596b$var$ecma12BinaryProperties","$ebef8a20963d596b$var$ecma11BinaryProperties","$ebef8a20963d596b$var$unicodeBinaryProperties","$ebef8a20963d596b$var$unicodeBinaryPropertiesOfStrings","$ebef8a20963d596b$var$unicodeGeneralCategoryValues","$ebef8a20963d596b$var$ecma9ScriptValues","$ebef8a20963d596b$var$ecma10ScriptValues","$ebef8a20963d596b$var$ecma11ScriptValues","$ebef8a20963d596b$var$ecma12ScriptValues","$ebef8a20963d596b$var$ecma13ScriptValues","$ebef8a20963d596b$var$unicodeScriptValues","$ebef8a20963d596b$var$data","$ebef8a20963d596b$var$i","$ebef8a20963d596b$var$list","$ebef8a20963d596b$var$buildUnicodeData","binary","binaryOfStrings","nonBinary","General_Category","Script","Script_Extensions","gc","sc","scx","$ebef8a20963d596b$var$pp$1","$ebef8a20963d596b$var$RegExpValidationState","validFlags","unicodeProperties","switchU","switchV","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","$ebef8a20963d596b$var$isSyntaxCharacter","$ebef8a20963d596b$var$isControlLetter","$ebef8a20963d596b$var$isUnicodePropertyNameCharacter","$ebef8a20963d596b$var$isDecimalDigit","$ebef8a20963d596b$var$isHexDigit","$ebef8a20963d596b$var$hexToInt","$ebef8a20963d596b$var$isOctalDigit","unicodeSets","unicode","at","forceU","nextIndex","lookahead","advance","eatChars","chs","validateRegExpFlags","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","regexp_classContents","regexp_classSetExpression","regexp_nonEmptyClassRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","regexp_eatClassControlLetter","subResult","regexp_eatClassSetRange","regexp_eatClassSetOperand","regexp_eatClassSetCharacter","regexp_eatClassStringDisjunction","regexp_eatNestedClass","result$1","regexp_classStringDisjunctionContents","regexp_classString","regexp_eatClassSetReservedPunctuator","regexp_eatOctalDigit","n1","n2","$ebef8a20963d596b$var$pp","$ebef8a20963d596b$var$stringToBigInt","BigInt","ignoreEscapeSequenceInKeyword","iterator","this$1$1","done","fullCharCodeAtPos","startSkip","readToken_dot","next2","readToken_slash","readToken_mult_modulo_exp","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readToken_question","next2$1","readToken_numberSign","readRadixNumber","flagsStart","maybeLegacyOctalNumericLiteral","allowSeparators","isLegacyOctalNumericLiteral","lastCode","val$1","readCodePoint","codePos","invalidStringToken","chunkStart","readEscapedChar","$ebef8a20963d596b$var$INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","inTemplate","octalStr","escStart","Parser","Position","SourceLocation","Node","TokenType","TokContext","tokContexts","Token","isNewLine","lineBreakG","$c8d2247b1550fb46$export$2e2bcd8739ae039","layout","tiles","$c8d2247b1550fb46$var$layout","solution","$939de03a128aab09$var$container","$939de03a128aab09$var$dialog","$939de03a128aab09$var$help","showModal","scrollIntoView","$f9704a9315db2cf5$export$2e2bcd8739ae039","selfOptions","pipes","pipe","pipeArg","processor","lastPipe","nextPipe","nextAfterChildren","hasResult","$db70c9b12a6f8bc7$export$2e2bcd8739ae039","filters","debug","filterName","exiting","resultCheck","msg","shouldHaveResult","should","noResult","$3edc4ef7a3d3a79b$export$2e2bcd8739ae039","setResult","exit","childName","root","$d440259d33c9db26$export$2e2bcd8739ae039","$d440259d33c9db26$var$cloneRegExp","regexMatch","cloned","$48416cc6139cbfbf$export$2e2bcd8739ae039","cloneDiffValues","$e645679292d8fd1a$export$2e2bcd8739ae039","$844ff08f78aab5df$export$2e2bcd8739ae039","$71e2687afe4daedd$export$32e2de1ca8818233","leftType","rightType","leftIsArray","rightIsArray","$71e2687afe4daedd$export$b17cd1eea2ef8348","nested","nonNestedDelta","regexArgs","$71e2687afe4daedd$export$9d101d90be8482a0","$7267f6eb1402e2a0$export$3b212405c262fd6e","_t","$7267f6eb1402e2a0$export$81d88d7d212bb18e","propertyFilter","$7267f6eb1402e2a0$export$b17cd1eea2ef8348","nestedDelta","objectDelta","$7267f6eb1402e2a0$export$575f4633982343e8","deltaWithChildren","$7267f6eb1402e2a0$export$9d101d90be8482a0","$7267f6eb1402e2a0$export$84a677efe7258d3b","$abe215c5cb589d56$var$defaultMatch","array1","array2","$abe215c5cb589d56$var$lengthMatrix","len1","len2","$abe215c5cb589d56$var$backtrack","subsequence","sequence","indices1","indices2","valueAtMatrixAbove","$abe215c5cb589d56$export$2e2bcd8739ae039","innerContext","$b7d0574ca28909b0$var$matchItems","objectHash","matchByPosition","hashCache1","hash1","hashCache2","hash2","$b7d0574ca28909b0$export$32e2de1ca8818233","matchContext","commonHead","commonTail","$b7d0574ca28909b0$var$arraysHaveMatchByRef","trimmed1","trimmed2","seq","removedItems","detectMove","arrays","includeValueOnMove","removedItemsLength","indexOnArray2","isMove","removeItemIndex1","$b7d0574ca28909b0$var$compare","numerically","numericallyBy","$b7d0574ca28909b0$export$b17cd1eea2ef8348","toRemove","toInsert","toModify","removedOrMovedIndex","numberIndex","indexDiff","removedValue","toInsertLength","toModifyLength","modification","$b7d0574ca28909b0$export$575f4633982343e8","$b7d0574ca28909b0$export$9d101d90be8482a0","newName","arrayMoveDelta","arrayDelta","$b7d0574ca28909b0$var$reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","$b7d0574ca28909b0$export$84a677efe7258d3b","$dcc7ee756dde640c$export$32e2de1ca8818233","$020c031f57b856e2$var$cachedDiffPatch","$020c031f57b856e2$var$getDiffMatchPatch","required","textDiff","diffMatchPatch","diff_match_patch_not_found","txt1","txt2","patch_toText","patch_make","patch","patch_apply","patch_fromText","textPatchFailed","$020c031f57b856e2$export$32e2de1ca8818233","minLength","$020c031f57b856e2$export$b17cd1eea2ef8348","textDiffDelta","$020c031f57b856e2$var$textDeltaReverse","lineTmp","header","headerRegex","$020c031f57b856e2$export$9d101d90be8482a0","$6a493659b38be18b$export$2e2bcd8739ae039","unpatch","$a39eeb69bf620de6$var$zero$1","buf","$a39eeb69bf620de6$var$extra_lbits","Uint8Array","$a39eeb69bf620de6$var$extra_dbits","$a39eeb69bf620de6$var$extra_blbits","$a39eeb69bf620de6$var$bl_order","$a39eeb69bf620de6$var$static_ltree","$a39eeb69bf620de6$var$static_dtree","$a39eeb69bf620de6$var$D_CODES$1","$a39eeb69bf620de6$var$_dist_code","$a39eeb69bf620de6$var$_length_code","$a39eeb69bf620de6$var$MAX_MATCH$1","$a39eeb69bf620de6$var$base_length","$a39eeb69bf620de6$var$base_dist","$a39eeb69bf620de6$var$StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","$a39eeb69bf620de6$var$TreeDesc","dyn_tree","stat_desc","max_code","$a39eeb69bf620de6$var$d_code","$a39eeb69bf620de6$var$put_short","pending_buf","pending","$a39eeb69bf620de6$var$send_bits","bi_valid","$a39eeb69bf620de6$var$Buf_size","bi_buf","$a39eeb69bf620de6$var$send_code","tree","$a39eeb69bf620de6$var$bi_reverse","$a39eeb69bf620de6$var$bi_flush","$a39eeb69bf620de6$var$gen_bitlen","bits","xbits","stree","extra","bl_count","heap","heap_max","opt_len","static_len","$a39eeb69bf620de6$var$gen_codes","next_code","$a39eeb69bf620de6$var$MAX_BITS$1","$a39eeb69bf620de6$var$tr_static_init","$a39eeb69bf620de6$var$LENGTH_CODES$1","$a39eeb69bf620de6$var$L_CODES$1","$a39eeb69bf620de6$var$LITERALS$1","$a39eeb69bf620de6$var$init_block","dyn_ltree","dyn_dtree","bl_tree","$a39eeb69bf620de6$var$END_BLOCK","sym_next","$a39eeb69bf620de6$var$bi_windup","$a39eeb69bf620de6$var$smaller","depth","_n2","_m2","$a39eeb69bf620de6$var$pqdownheap","heap_len","$a39eeb69bf620de6$var$compress_block","ltree","dtree","lc","sym_buf","$a39eeb69bf620de6$var$build_tree","$a39eeb69bf620de6$var$scan_tree","curlen","prevlen","nextlen","max_count","min_count","$a39eeb69bf620de6$var$REP_3_6","$a39eeb69bf620de6$var$REPZ_3_10","$a39eeb69bf620de6$var$REPZ_11_138","$a39eeb69bf620de6$var$send_tree","$a39eeb69bf620de6$var$build_bl_tree","max_blindex","l_desc","d_desc","bl_desc","$a39eeb69bf620de6$var$BL_CODES$1","$a39eeb69bf620de6$var$send_all_trees","lcodes","dcodes","blcodes","rank","$a39eeb69bf620de6$var$detect_data_type","block_mask","$a39eeb69bf620de6$var$static_init_done","$a39eeb69bf620de6$var$_tr_stored_block$1","stored_len","$a39eeb69bf620de6$var$STORED_BLOCK","subarray","$a39eeb69bf620de6$var$trees","_tr_init","_tr_stored_block","_tr_flush_block","opt_lenb","static_lenb","level","strm","data_type","strategy","$a39eeb69bf620de6$var$STATIC_TREES","$a39eeb69bf620de6$var$DYN_TREES","_tr_tally","sym_end","_tr_align","$a39eeb69bf620de6$var$adler32_1","adler","$a39eeb69bf620de6$var$crcTable","Uint32Array","$a39eeb69bf620de6$var$makeTable","table","$a39eeb69bf620de6$var$crc32_1","crc","$a39eeb69bf620de6$var$messages","$a39eeb69bf620de6$var$constants$2","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","$a39eeb69bf620de6$var$_tr_init","$a39eeb69bf620de6$var$_tr_stored_block","$a39eeb69bf620de6$var$_tr_flush_block","$a39eeb69bf620de6$var$_tr_tally","$a39eeb69bf620de6$var$_tr_align","$a39eeb69bf620de6$var$Z_NO_FLUSH$2","$a39eeb69bf620de6$var$Z_PARTIAL_FLUSH","$a39eeb69bf620de6$var$Z_FULL_FLUSH$1","$a39eeb69bf620de6$var$Z_FINISH$3","$a39eeb69bf620de6$var$Z_BLOCK$1","$a39eeb69bf620de6$var$Z_OK$3","$a39eeb69bf620de6$var$Z_STREAM_END$3","$a39eeb69bf620de6$var$Z_STREAM_ERROR$2","$a39eeb69bf620de6$var$Z_DATA_ERROR$2","$a39eeb69bf620de6$var$Z_BUF_ERROR$1","$a39eeb69bf620de6$var$Z_DEFAULT_COMPRESSION$1","$a39eeb69bf620de6$var$Z_FILTERED","$a39eeb69bf620de6$var$Z_HUFFMAN_ONLY","$a39eeb69bf620de6$var$Z_RLE","$a39eeb69bf620de6$var$Z_FIXED","$a39eeb69bf620de6$var$Z_DEFAULT_STRATEGY$1","$a39eeb69bf620de6$var$Z_UNKNOWN","$a39eeb69bf620de6$var$Z_DEFLATED$2","$a39eeb69bf620de6$var$err","errorCode","$a39eeb69bf620de6$var$rank","$a39eeb69bf620de6$var$zero","$a39eeb69bf620de6$var$slide_hash","wsize","w_size","hash_size","$a39eeb69bf620de6$var$HASH","hash_shift","hash_mask","$a39eeb69bf620de6$var$flush_pending","avail_out","output","pending_out","next_out","total_out","$a39eeb69bf620de6$var$flush_block_only","block_start","strstart","$a39eeb69bf620de6$var$put_byte","$a39eeb69bf620de6$var$putShortMSB","$a39eeb69bf620de6$var$read_buf","avail_in","next_in","wrap","total_in","$a39eeb69bf620de6$var$longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","$a39eeb69bf620de6$var$MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","match_start","$a39eeb69bf620de6$var$fill_window","more","_w_size","window_size","ins_h","$a39eeb69bf620de6$var$deflate_stored","flush","min_block","pending_buf_size","have","high_water","$a39eeb69bf620de6$var$deflate_fast","hash_head","bflush","match_length","max_lazy_match","$a39eeb69bf620de6$var$MIN_MATCH","$a39eeb69bf620de6$var$deflate_slow","max_insert","prev_match","match_available","$a39eeb69bf620de6$var$deflate_rle","$a39eeb69bf620de6$var$deflate_huff","$a39eeb69bf620de6$var$Config","good_length","max_lazy","nice_length","max_chain","$a39eeb69bf620de6$var$configuration_table","$a39eeb69bf620de6$var$lm_init","$a39eeb69bf620de6$var$DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","Uint16Array","$a39eeb69bf620de6$var$HEAP_SIZE","$a39eeb69bf620de6$var$MAX_BITS","lit_bufsize","$a39eeb69bf620de6$var$deflateStateCheck","$a39eeb69bf620de6$var$deflateResetKeep","$a39eeb69bf620de6$var$deflateReset","ret","$a39eeb69bf620de6$var$deflateInit2","windowBits","memLevel","$a39eeb69bf620de6$var$deflate_1$2","deflateInit","deflateInit2","deflateReset","deflateResetKeep","deflateSetHeader","deflate","old_flush","level_flags","hcrc","beg","gzhead_extra","bstate","deflateEnd","deflateSetDictionary","dictLength","tmpDict","avail","deflateInfo","$a39eeb69bf620de6$var$_has","$a39eeb69bf620de6$var$common","TypeError","flattenChunks","chunks","chunk","$a39eeb69bf620de6$var$STR_APPLY_UIA_OK","__","$a39eeb69bf620de6$var$_utf8len","$a39eeb69bf620de6$var$buf2binstring","$a39eeb69bf620de6$var$strings","string2buf","TextEncoder","encode","m_pos","str_len","buf_len","buf2string","TextDecoder","decode","utf16buf","c_len","utf8border","$a39eeb69bf620de6$var$zstream","$a39eeb69bf620de6$var$toString$1","$a39eeb69bf620de6$var$Z_NO_FLUSH$1","$a39eeb69bf620de6$var$Z_SYNC_FLUSH","$a39eeb69bf620de6$var$Z_FULL_FLUSH","$a39eeb69bf620de6$var$Z_FINISH$2","$a39eeb69bf620de6$var$Z_OK$2","$a39eeb69bf620de6$var$Z_STREAM_END$2","$a39eeb69bf620de6$var$Z_DEFAULT_COMPRESSION","$a39eeb69bf620de6$var$Z_DEFAULT_STRATEGY","$a39eeb69bf620de6$var$Z_DEFLATED$1","$a39eeb69bf620de6$var$Deflate$1","chunkSize","gzip","ended","dict","_dict_set","$a39eeb69bf620de6$var$deflate$1","deflator","flush_mode","_flush_mode","onData","onEnd","$a39eeb69bf620de6$var$inffast","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","from_source","lencode","distcode","lenbits","distbits","sane","$a39eeb69bf620de6$var$lbase","$a39eeb69bf620de6$var$lext","$a39eeb69bf620de6$var$dbase","$a39eeb69bf620de6$var$dext","$a39eeb69bf620de6$var$inftrees","lens","lens_index","codes","table_index","work","incr","low","mask","here_bits","here_op","here_val","sym","drop","huff","$a39eeb69bf620de6$var$MAXBITS","offs","$a39eeb69bf620de6$var$Z_FINISH$1","$a39eeb69bf620de6$var$Z_BLOCK","$a39eeb69bf620de6$var$Z_TREES","$a39eeb69bf620de6$var$Z_OK$1","$a39eeb69bf620de6$var$Z_STREAM_END$1","$a39eeb69bf620de6$var$Z_NEED_DICT$1","$a39eeb69bf620de6$var$Z_STREAM_ERROR$1","$a39eeb69bf620de6$var$Z_DATA_ERROR$1","$a39eeb69bf620de6$var$Z_MEM_ERROR$1","$a39eeb69bf620de6$var$Z_BUF_ERROR","$a39eeb69bf620de6$var$Z_DEFLATED","$a39eeb69bf620de6$var$zswap32","$a39eeb69bf620de6$var$InflateState","havedict","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","$a39eeb69bf620de6$var$inflateStateCheck","$a39eeb69bf620de6$var$inflateResetKeep","Int32Array","$a39eeb69bf620de6$var$inflateReset","$a39eeb69bf620de6$var$inflateReset2","$a39eeb69bf620de6$var$inflateInit2","$a39eeb69bf620de6$var$virgin","$a39eeb69bf620de6$var$fixedtables","$a39eeb69bf620de6$var$updatewindow","$a39eeb69bf620de6$var$inflate_1$2","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInit2","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflateInfo","$a39eeb69bf620de6$var$gzheader","$a39eeb69bf620de6$var$toString","$a39eeb69bf620de6$var$Z_NO_FLUSH","$a39eeb69bf620de6$var$Z_FINISH","$a39eeb69bf620de6$var$Z_OK","$a39eeb69bf620de6$var$Z_STREAM_END","$a39eeb69bf620de6$var$Z_NEED_DICT","$a39eeb69bf620de6$var$Z_STREAM_ERROR","$a39eeb69bf620de6$var$Z_DATA_ERROR","$a39eeb69bf620de6$var$Z_MEM_ERROR","$a39eeb69bf620de6$var$Inflate$1","$a39eeb69bf620de6$var$inflate$1","inflator","last_avail_out","next_out_utf8","utf8str","Deflate","$a39eeb69bf620de6$var$Deflate","$a39eeb69bf620de6$var$deflate","deflateRaw","$a39eeb69bf620de6$var$deflateRaw","$a39eeb69bf620de6$var$gzip","constants","Inflate","$a39eeb69bf620de6$var$Inflate","$a39eeb69bf620de6$var$inflate","inflateRaw","$a39eeb69bf620de6$var$inflateRaw","ungzip","$a39eeb69bf620de6$var$ungzip","$a39eeb69bf620de6$export$2e2bcd8739ae039","$389f2dcfbe95c865$exports","factory","limit$2","classToType","type$p","PI$2","utils","clip_rgb","_clipped","_unclipped","limit$1","unpack","keyOrder","type$o","type$n","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","input$h","format","autodetect","last$3","clip_rgb$2","type$m","Color$D","_input","chk","me","_rgb","chroma$k","unpack$A","max$2","unpack$z","unpack$y","type$l","rgb2cmyk","Color$C","cmyk","chroma$j","input$g","unpack$x","last$2","rnd","unpack$w","rgb2hsl_1","Number","unpack$v","last$1","hsl2css","hsla","round$6","unpack$u","round$5","hsl2rgb_1","h_","RE_RGB","RE_RGBA","RE_RGB_PCT","RE_RGBA_PCT","RE_HSL","RE_HSLA","round$4","css2rgb$1","css","input$f","named","rgb$1","rgb$2","i$2","rgb$3","i$3","rgb$4","hsl2rgb","hsl$1","rgb$5","type$k","rgb2css","rgba","rgb2hsl$2","Color$B","chroma$i","input$e","css2rgb","unpack$t","input$d","gl","chroma$h","Color$A","unpack$s","unpack$r","floor$3","unpack$q","type$j","rgb2hcg","Color$z","hcg","chroma$g","input$c","assign$1","assign$2","assign$3","assign$4","assign$5","_g","unpack$p","round$3","rgb2hex_1","hxa","RE_HEX","RE_HEXA","hex2rgb_1","u$1","type$i","Color$y","rgb2hex$1","chroma$f","input$b","unpack$o","TWOPI$2","min$2","sqrt$4","unpack$n","TWOPI$1","cos$4","unpack$m","type$h","rgb2hsi","min_","Color$x","hsi","chroma$e","input$a","unpack$l","type$g","Color$w","rgb2hsl$1","chroma$d","input$9","unpack$k","min$1","max$1","unpack$j","floor$2","unpack$i","type$f","rgb2hsv","max_","Color$v","hsv","chroma$c","input$8","labConstants","Kn","Xn","Yn","Zn","unpack$h","pow$a","rgb_xyz","xyz_lab","LAB_CONSTANTS$3","rgb2lab_1","ref$1","unpack$g","pow$9","xyz_rgb","lab_xyz","LAB_CONSTANTS$2","lab2rgb_1","unpack$f","type$e","Color$u","rgb2lab$1","chroma$b","input$7","unpack$e","sqrt$3","atan2$2","round$2","lab2lch_1","unpack$d","unpack$c","sin$3","cos$3","lch2lab_1","unpack$b","lch2rgb_1","lch2lab$1","lab2rgb","unpack$a","unpack$9","type$d","rgb2lch","rgb2lab","lab2lch$1","Color$t","lch","hcl","chroma$a","input$6","lch2rgb","w3cx11_1","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflower","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","laserlemon","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrod","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","maroon2","maroon3","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","purple2","purple3","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","type$c","Color$s","rgb2hex","w3cx11","input$5","hex2rgb","unpack$8","type$b","type$a","rgb2num","Color$r","chroma$9","input$4","unpack$7","type$9","round$1","Color$q","chroma$8","input$3","log$1","temperature2rgb_1","kelvin","unpack$6","rgb2temperature","minTemp","maxTemp","temperature2rgb","Color$p","temperature","chroma$7","input$2","unpack$5","cbrt","pow$8","sign$1","rgb2oklab_1","rgb2lrgb","lr","lg","lb","unpack$4","pow$7","oklab2rgb_1","L","lrgb2rgb","unpack$3","type$8","Color$o","oklab","rgb2oklab$1","chroma$6","input$1","unpack$2","unpack$1","type$7","rgb2oklch","rgb2oklab","lab2lch","Color$n","oklch","chroma$5","lch2lab","oklab2rgb","type$6","Color$m","mutate","Color$l","Color$k","LAB_CONSTANTS$1","brighten","darker","brighter","Color$j","mc","channel","type$5","pow$6","Color$i","luminance","lum","cur_lum","max_iter","high","lm","rgb2luminance","luminance_x","interpolator$1","type$4","mix$1","col1","col2","interpolator","Color$g","mix","Color$f","premultiply","Color$e","saturate","LAB_CONSTANTS","desaturate","type$3","Color$d","xyz0","xyz1","sqrt$2","pow$5","lrgb","z1","z2","_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","lbv","dh","interpolate_hsx$5","interpolate_hsx$4","interpolate_hsx$3","interpolate_hsx$2","interpolate_hsx$1","interpolate_hsx","clip_rgb$1","pow$4","sqrt$1","PI$1","cos$2","sin$2","atan2$1","_average_lrgb","colors","xyz","type$2","pow$3","scale$2","_mode","_nacol","chroma$4","_spread","_domain","_pos","_padding","_classes","_colors","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","c$1","resetCache","getClass","tMapLightness","tMapDomain","bypassMap","classes","analyze","limits","domain","tOut","tBreaks","every","_m","_o","spread","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","numColors","dm","dd","__range__","inclusive","ascending","samples","asc","gamma","nodata","binom_row","row","newrow","bezier","I","lab0","lab1","lab2","lab3","labs","RangeError","blend","blend_f","chroma$3","dodge","burn","type$1","pow$2","sin$1","cos$1","floor$1","pow$1","abs$1","MAX_VALUE","min_log","LOG10E","max_log","pb","pr","cluster","assignments","clusterSizes","repeat","nb_iters","centroids","i$4","mindist","best","j$1","newCentroids","j$2","i$5","j$3","j$4","kClusters","j$5","i$6","tmpKMeansBreaks","j$6","i$7","analyze_1","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","chroma","cnt","ci","xyz2","A$1","scale$1","cubehelix","rotations","lightness","dl","fract","amp","cos_a","sin_a","chroma$2","digits","contrast","deltaE","Kl","Kc","Kh","rad2deg","deg2rad","deg","L2","avgL","avgC","C1","G","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","T","deltaHp","deltaCp","sl","sh","deltaTheta","Rt","deltaL","sum_sq","scales","cool","chroma$1","hot","$hvNIE","$3e2f0fa58ba587b4$var$location","$3e2f0fa58ba587b4$export$281ad3752a540efe","URLSearchParams","$3e2f0fa58ba587b4$export$128fa18b7194ef","URL","$3e2f0fa58ba587b4$export$1bb10639a2cd4297","$3e2f0fa58ba587b4$export$9cb4719e2e525b7a","$3e2f0fa58ba587b4$export$afb15ede80c42aab","binString","atob","codePointAt","$3e2f0fa58ba587b4$export$4e633de97d65d1c8","fromCodePoint","$3e2f0fa58ba587b4$export$9a00dee1beb8f576","$3e2f0fa58ba587b4$export$6e5538615c060df7","findLast","xv","yv","$3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1","detail","dispatchEvent","CustomEvent","$3e2f0fa58ba587b4$export$c23f9d3341b5fd07","pointA","pointB","maxDiff","$3e2f0fa58ba587b4$export$3cb91a81090b9eee","span","classList","backgroundColor","title","$3e2f0fa58ba587b4$export$6d3741128bd5bb7d","some","maxColorIndex","plus","$3e2f0fa58ba587b4$export$79376507b09a66f","$3e2f0fa58ba587b4$export$f6292fcace2a1886","$3e2f0fa58ba587b4$export$78da85ac75754159","$3e2f0fa58ba587b4$export$bd58da2e19cd17da","direction","$3e2f0fa58ba587b4$export$c43d7a950587702b","$3e2f0fa58ba587b4$export$35d6177dfa7903b5","toPaperJs","$3e2f0fa58ba587b4$export$43941667eccc070","$3e2f0fa58ba587b4$export$8793edee2d425525","base64decode","base64encode","$f1fc5431671d3192$var$console","$f1fc5431671d3192$var$consoleDebug","$f1fc5431671d3192$export$1c9f709888824e05","has","$ca914ef976dd611b$export$2e382909194b1aab","toAxialCoordinates","$fe48dca2d228a457$export$c56d3ccff2456440","isNeighbor","neighbor","directions","toOffsetCoordinates","axial","$ca3880ece69ea231$export$654f18991713c8c4","setState","getState","structuredClone","updateState","updater","Events","Update","freeze","$4b738c6f333de3e1$export$6d08773d2e66f8f2","uniqueId","sortOrder","configuration","otherItem","getColorElements","getCompoundPath","collidable","onTap","onCollision","collisionStep","onDeselected","onInitialization","onSelected","Types","fromEntries","$8ee30938c07750df$export$b20b719ec758a20f","$97686966a3fec53f$export$94affb487e701bf2","hasKeys","includes","unset","$4f41d74d72b0a295$export$b0d759d807f751d4","CacheKeys","eventListener","onPointerUp","onPointerDown","onPointerMove","onMouseWheel","offsetX","offsetY","deltaY","onPan","pan","getGesture","GestureKeys","Pan","setGesture","onPinch","pointer0","pointer1","point0","pinch","Pinch","Down","pointerId","Move","Gesture","Tap","maxZoom","minZoom","touchPoint","touchOffset","zoomOffset","vibratePattern","$890ebaa4ee6ae241$var$modifiersImmutable","$890ebaa4ee6ae241$var$modifiersMutable","$890ebaa4ee6ae241$var$navigator","$890ebaa4ee6ae241$var$uniqueId","$890ebaa4ee6ae241$export$5acd5e6efc9671b7","selectionTime","timeoutId","immutable","tile","li","deselect","modifier","addModifier","moveFilter","afterModify","Deselected","button","onToggle","lock","clearTimeout","vibrate","$b65a2f5625db2a92$export$a9753b1ffc289935","Mask","onMask","beforeModify","maskOnTap","tileFilter","removeModifier","toggle","puzzle","fromTile","updateSelectedTile","unmask","Moved","selectedModifier","querySelector","Invoked","$6b5ed925b0615466$export$e49a5ad3dd6df925","movable","onUnmask","moveItems","moved","beam","toTile","$6b5ed925b0615466$export$1288a4f7eae890b0","SuperClass","removeItem","addItem","onMove","$0b4b4185562e5b04$export$fd55ce593607084a","connected","onAdd","onRemove","pathIndex","segmentIndex","$0b4b4185562e5b04$export$81262d6ca0162a3","Class","find","Reflect","construct","Collision","collision","Filter","MergeInto","mergeInto","MergeWith","mergeWith","Portal","portal","entryPortal","exitPortal","Reflector","reflector","TerminusConnection","terminusConnection","terminus","opening","$b9391c61de18417d$export$ec91da630f36d5ea","parameters","circumradius","currentStep","nextStep","$94a7df60cff9f28b$export$152db69a76b6b79e","Names","rotatable","$94a7df60cff9f28b$export$781de49a9284d537","rotationDegrees","getMaxRotation","getDirection","rotateGroup","$9a8fa6fd25778435$export$602eac185826482c","ring","pointer","portalState","stepIndex","entryDirection","existing","stateId","destinationId","moves","destinations","getExitDirection","getStep","destinationTiles","addStep","destinationTile","$90288bbda8776a08$export$bea8ebba691c5813","toggled","toggleable","$90288bbda8776a08$export$cdb1ce8c4b8a5afe","$74097bbf14237549$export$88c9f72b40fcdd85","itemIds","withSelf","mirror","$74097bbf14237549$export$20aab196240bbdf2","beams","getColors","$5625a4a7d65ce9b8$export$693b33588b3dd9d8","steps","lastStepIndex","getLastStepIndex","currentPath","previousStep","getItemIndex","getCollision","getOpening","getSteps","getMergeWith","openings","isComplete","isOn","isConnected","isPending","onBeamUpdated","beamLastStep","lastStep","isSelf","findLastIndex","stepPoint","nextStepPoint","isSameSide","isSameDirection","getBeamsUpdateDelay","updateHistory","onModifierInvoked","findIndex","startDirection","currentStepIndex","inradius","getTile","updateStep","nextStepIndex","existingNextStep","lastPathIndex","lastSegmentIndex","getCollisions","collisionIndex","timeout","updatedStep","getUpdatedStep","firstPoint","curveLocation","Set","intersection","drawDebugPoint","spliceIndex","deletedSteps","Connection","Merge","$7a376349f5a360a3$export$3ad31a823e05e6fb","ui","flatMap","Opening","directionFrom","onConnection","onDisconnection","connect","disconnect","Disconnection","openingOffOpacity","$833b17827b418a5b$export$edf083caefbff926","midLine","directionTo","beamDirection","reflectorDirection","beamAngle","$3e2f0fa58ba587b4$export$1a23559e655dacdd","original","reflectorAngle","$62983545fa7e5cd3$export$cb4338d67ffa8a1d","walls","firstSegment","hexagon","nextDirection","lastSegment","$1f91e29af141027d$export$4b0ab9e4fad38dea","$7b23092ccd74af51$export$5b9db7ce80343746","$7e06163ac6e6af1b$export$bdb5f0a1b77546f4","toItems","fromItems","$644ce6e6cc7a5abb$export$235cb65c20ad2b7","indicator","wall","swap","selectedTile","deselectedTile","teardown","startingOffsetX","startingOffsetY","dashWidth","Styles","edit","Selected","$941a4b5ec82b485b$export$c84671f46d6a1ca","tilesByAxial","tilesByOffset","layers","tileSize","oddR","widestRow","isOffsetRow","rowByAxial","rowByOffset","rowOffset","getTileByAxial","getTileByOffset","getNeighboringTile","evenR","$4029f0d6ba5141b4$export$991dcf7284de63d","$729c2b05fa2dedeb$export$88c9f72b40fcdd85","$df74fd5b33098157$var$puzzles","test_infinite_loop","test_layout","test_portal","test_reflector","$df74fd5b33098157$var$traverse","$df74fd5b33098157$var$PuzzleGroup","firstId","lastId","nextId","previousId","$df74fd5b33098157$export$f68871ba002ca835","startsWith","titles","$0ca0e02f0a4bc377$var$history","history","$0ca0e02f0a4bc377$var$localStorage","localStorage","$0ca0e02f0a4bc377$export$7254cc27399e90bd","deltasIndex","updateCache","canRedo","canUndo","getCurrent","getTitle","getSelectedTile","redo","clearCache","setSelectedTile","undo","previousIndex","newState","pushState","fromEncoded","fromId","ParamKeys","pathSegments","localState","cachedVersion","originalVersion","$8010a1f4ac1afb69$export$a337a674d761bdc2","conditions","condition","conditionFactory","replaceChildren","isSolved","isMet","$8010a1f4ac1afb69$var$SolutionCondition","connections","$8010a1f4ac1afb69$var$Connections","$8010a1f4ac1afb69$var$Moves","completed","eventListeners","connectionId","connectionIndex","connection","Operators","equalTo","Updated","greaterThan","lessThan","$b65a2f5625db2a92$var$elements","main","puzzleId","solved","beamsUpdateDelay","interact","isUpdatingBeams","maskQueue","termini","onBeamUpdate","onSelect","onKeyup","delay","onStateUpdate","updateDropdown","select","centerOnTile","clearDebugPoints","reload","updateMessage","updateBeams","previouslySelectedTile","updateActions","addLayers","collisionId","addBeam","otherBeam","cause","onSolved","solvedMask","Solved","removeLayers","viewSize","Loaded","selectedTileId","className","disable","innerText","colorElements","rounded","connectedBeams","$250751c5950a3842$var$script","$250751c5950a3842$var$dataLayer","dataLayer","$250751c5950a3842$var$gtag","$e22b5ab31fbd25da$var$doorbellOptions","doorbellOptions","appKey","hideButton","$e22b5ab31fbd25da$var$script","$2fd5a75c703b0f49$var$puzzle","$2fd5a75c703b0f49$var$beaming","beaming"],"version":3,"file":"index.9b656316.js.map"} \ No newline at end of file diff --git a/index.ae5e88e1.js.map b/index.ae5e88e1.js.map deleted file mode 100644 index 1c343e5..0000000 --- a/index.ae5e88e1.js.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"IuBkLI,EACA,EACA,EAkyJA,EAAQ,E,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,S,E,C,E,O,G,E,U,C,E,O,C,C,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,C,E,Q,S,C,C,C,EtBt9JZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,EAEW,AAAA,CAAA,SAAS,CAAI,CAAE,CAAS,EAGpC,IAAI,EAAS,AADb,CAAA,EAAO,GAAP,EAAA,QAAA,EACkB,MAAM,CACvB,EAAW,EAAK,QAAQ,CAErB,EAAO,IAAI,WACd,IAAI,EAAS,wCACZ,EAAQ,EAAE,CACV,EAAQ,EAAM,KAAK,CACnB,EAAS,OAAO,MAAM,CACtB,EAAW,OAAO,wBAAwB,CAC1C,EAAS,OAAO,cAAc,CAE9B,EAAU,EAAM,OAAO,EAAI,SAAS,CAAI,CAAE,CAAI,EAC7C,IAAK,IAAI,EAAI,EAAG,EAAI,IAAI,CAAC,MAAM,CAAE,EAAI,EAAG,IACvC,EAAK,IAAI,CAAC,EAAM,IAAI,CAAC,EAAE,CAAE,EAAG,IAAI,CAElC,EAEA,EAAQ,SAAS,CAAI,CAAE,CAAI,EAC1B,IAAK,IAAI,KAAK,IAAI,CACb,IAAI,CAAC,cAAc,CAAC,IACvB,EAAK,IAAI,CAAC,EAAM,IAAI,CAAC,EAAE,CAAE,EAAG,IAAI,CAEnC,EAEA,EAAM,OAAO,MAAM,EAAI,SAAS,CAAG,EAClC,IAAK,IAAI,EAAI,EAAG,EAAI,UAAU,MAAM,CAAE,EAAI,EAAG,IAAK,CACjD,IAAI,EAAM,SAAS,CAAC,EAAE,CACtB,IAAK,IAAI,KAAO,EACX,EAAI,cAAc,CAAC,IACtB,CAAA,CAAG,CAAC,EAAI,CAAG,CAAG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E,EAAO,EAAO,OAAO,EAEhD,EAAO,YAAY,CAAC,oBAAqB,QAClC,CACR,CACD,CAEA,SAAS,IACR,EAAK,IAAI,CAAC,GAAY,EAAS,oBAAoB,CAAC,UAClD,EACH,QApYA,EAAM,MAAM,CAAC,GACb,EAAK,MAAM,CAAC,GACZ,EAAM,MAAM,CAAC,GAwYT,IACC,AAAwB,aAAxB,EAAS,UAAU,CACtB,WAAW,GAEX,EAAS,GAAG,CAAC,EAAQ,CAAE,KAAM,CAAQ,IAIhC,CACN,QAAS,EACT,QAAS,EACT,KAfD,SAAc,CAAM,EACnB,OAAO,EAAS,EAAW,GAAU,GACtC,EAcC,MAAO,EACP,gBAAiB,EACjB,eAAgB,CACjB,CAED,CAAA,EAAE,IAAI,CAAC,IAAI,EAEX,IAAI,GAAQ,GAAK,CAAA,EAAW,MAAM,CAAC,EAAK,OAAO,CAAE,CAChD,KAAM,EACN,UAAW,EACX,IAAK,EACL,SAAU,EACV,WAAY,EACZ,SAAU,EACV,OAAQ,EACR,OAAQ,EACR,aAAc,CACf,EAAA,EAYA,OAVI,GAAM,KAAK,CAAC,IAAI,EACnB,AAAA,EAAA,SAA4B,IAGzB,AAAkB,YAAlB,OAAO,QAAyB,OAAO,GAAG,CAC7C,OAAO,QAAS,IACwB,GACxC,CAAA,EAAO,OAAO,CAAG,EADX,EAIA,EACP,CAAA,EAAE,IAAI,CAAC,IAAI,CAAE,AAAgB,UAAhB,OAAO,KAAoB,KAAO,K,G,E,Q,S,C,C,C,E,G,E,Q,S,C,C,C,E,E,E,O,C,oB,W,O,C,G,E,E,O,C,mB,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,e,W,O,C,G,E,E,O,C,W,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,a,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,qB,W,O,C,G,E,E,O,C,W,W,O,C,G,E,E,O,C,iB,W,O,C,G,E,E,O,C,c,W,O,C,G,E,E,O,C,iB,W,O,C,G,E,E,O,C,S,W,O,C,G,E,E,O,C,a,W,O,E,G,E,E,O,C,c,W,O,E,G,E,E,O,C,O,W,O,E,G,E,E,O,C,Q,W,O,E,G,E,E,O,C,U,W,O,E,G,E,E,O,C,Q,W,O,E,G,E,E,O,C,oB,W,O,E,G,E,E,O,C,Y,W,O,E,GE9jiB/C,IAAI,EAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,MAAO,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,MAAO,EAAG,KAAM,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,KAAM,EAAG,OAAQ,IAAI,CAGxhC,EAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,GAAI,GAAI,KAAM,GAAI,EAAG,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAA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,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EACf,CAAE,UAAW,CAAA,EAAO,KAAM,QAAS,EACpC,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EAChB,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,ELnDE,MM1Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,SAAU,CACR,KACA,KACA,KACA,CAAE,MAAO,MAAO,KAAM,MAAO,EAC7B,KACA,CAAE,MAAO,OAAQ,GAAI,CAAA,EAAM,KAAM,MAAO,EACzC,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,CACR,CAAE,MAAO,OAAQ,KAAM,MAAO,EAC9B,KACA,CAAE,MAAO,MAAO,GAAI,CAAA,EAAM,KAAM,MAAO,EACvC,KACA,KACA,KACD,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,EN7EE,MO3Ba,C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CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,KACA,CACE,MAAO,CACL,CACE,MAAO,QACP,SAAU,CAAC,KAAM,KAAM,KAAM,CAAE,KAAM,MAAO,EAAG,KAAM,KAAK,CAC1D,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,WAAY,EACrB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,KACA,KACA,CACE,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EAChB,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,ET9DE,MU9Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EACf,KACA,KACA,CACE,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EAChB,CACD,CACE,CACE,MAAO,CACL,CACE,MAAO,QACP,SAAU,CAAC,KAAM,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAG,KAAM,KAAM,KAAM,KAAK,CACpE,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EACf,KACA,CACE,MAAO,CACL,CACE,MAAO,QACP,SAAU,CAAC,KAAM,KAAM,KAAM,CAAE,KAAM,MAAO,EAAG,KAAM,KAAK,CAC1D,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,WAAY,EACrB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,KACA,KACA,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EAChB,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,EV3DE,MW/Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,MAAO,CACL,CACE,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,SAAU,CACR,KACA,KACA,CAAE,MAAO,OAAQ,GAAI,CAAA,EAAM,KAAM,MAAO,EACxC,KACA,KACA,KACD,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,QAAS,EAClB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,CACR,KACA,KACA,KACA,KACA,KACA,CAAE,MAAO,OAAQ,KAAM,MAAO,EAC/B,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,CACD,QAAS,CACX,EXjFE,mBehCa,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,MAAO,CACL,CACE,MAAO,MACP,SAAU,CAAC,KAAM,KAAM,KAAM,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAG,KAAM,KAAK,CACpE,KAAM,UACR,EACD,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,MAAO,MACP,SAAU,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAE,CACpE,KAAM,UACR,EACD,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACD,CACD,CACE,KACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,MAAO,OACP,SAAU,CAAC,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAG,KAAM,KAAM,KAAM,KAAM,KAAK,CACpE,KAAM,UACR,EACD,CACD,KAAM,MACR,EACD,CACF,AACH,EACA,SAAU,CACR,CAAE,OAAQ,IAAK,KAAM,aAAc,EACpC,AACH,EfnDE,YYzBa,CACb,OAAQ,CACN,MAAO,AAVI,CACb,CAAC,IAAK,IAAK,IAAK,IAAI,CACpB,CAAC,IAAK,IAAK,IAAK,IAAI,CACpB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAI,CACzB,CAAC,IAAK,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","sources":["","node_modules/paper/dist/paper-full.js","node_modules/@parcel/node-resolver-core/lib/_empty.js","node_modules/acorn/dist/acorn.mjs","src/index.js","src/info.js","src/components/debug.js","src/components/util.js","node_modules/jsondiffpatch/lib/index.js","node_modules/jsondiffpatch/lib/diffpatcher.js","node_modules/jsondiffpatch/lib/processor.js","node_modules/jsondiffpatch/lib/pipe.js","node_modules/jsondiffpatch/lib/contexts/diff.js","node_modules/jsondiffpatch/lib/contexts/context.js","node_modules/jsondiffpatch/lib/clone.js","node_modules/jsondiffpatch/lib/contexts/patch.js","node_modules/jsondiffpatch/lib/contexts/reverse.js","node_modules/jsondiffpatch/lib/filters/trivial.js","node_modules/jsondiffpatch/lib/filters/nested.js","node_modules/jsondiffpatch/lib/filters/arrays.js","node_modules/jsondiffpatch/lib/filters/lcs.js","node_modules/jsondiffpatch/lib/filters/dates.js","node_modules/jsondiffpatch/lib/filters/texts.js","node_modules/pako/dist/pako.esm.mjs","node_modules/chroma-js/chroma.js","src/components/puzzle.js","src/components/layout.js","src/components/coordinates/cube.js","src/components/coordinates/offset.js","src/components/items/tile.js","src/components/item.js","src/components/stateful.js","src/components/itemFactory.js","src/components/items/filter.js","src/components/modifiers/move.js","src/components/modifier.js","src/components/eventListeners.js","src/components/interact.js","src/components/cache.js","src/components/step.js","src/components/items/portal.js","src/components/modifiers/rotate.js","src/components/items/terminus.js","src/components/modifiers/toggle.js","src/components/items/beam.js","src/components/collision.js","src/components/items/reflector.js","src/components/items/wall.js","src/components/modifierFactory.js","src/components/modifiers/immutable.js","src/components/modifiers/lock.js","src/components/modifiers/swap.js","src/components/items/mask.js","src/components/items/collision.js","src/components/state.js","src/puzzles/index.js","src/puzzles/001.js","src/puzzles/002.js","src/puzzles/003.js","src/puzzles/004.js","src/puzzles/005.js","src/puzzles/006.js","src/puzzles/007.js","src/puzzles/008.js","src/puzzles/009.js","src/puzzles/010.js","src/puzzles/011.js","src/puzzles/testLayout.js","src/puzzles/testPortal.js","src/puzzles/testReflector.js","src/puzzles/testInfiniteLoop.js","src/components/solution.js","src/analytics.js","src/feedback.js"],"sourcesContent":["\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequiref3c5\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequiref3c5\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"hFpCu\", function(module, exports) {\n/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */ \n\n\nvar paper = (function(self1, undefined) {\n self1 = self1 || (parcelRequire(\"gFNhN\"));\n var window = self1.window, document = self1.document;\n var Base = new function() {\n var hidden = /^(statics|enumerable|beans|preserve)$/, array = [], slice = array.slice, create = Object.create, describe = Object.getOwnPropertyDescriptor, define1 = Object.defineProperty, forEach = array.forEach || function(iter, bind) {\n for(var i = 0, l = this.length; i < l; i++)iter.call(bind, this[i], i, this);\n }, forIn = function(iter, bind) {\n for(var i in this)if (this.hasOwnProperty(i)) iter.call(bind, this[i], i, this);\n }, set = Object.assign || function(dst) {\n for(var i = 1, l = arguments.length; i < l; i++){\n var src = arguments[i];\n for(var key in src)if (src.hasOwnProperty(key)) dst[key] = src[key];\n }\n return dst;\n }, each = function(obj, iter, bind) {\n if (obj) {\n var desc = describe(obj, \"length\");\n (desc && typeof desc.value === \"number\" ? forEach : forIn).call(obj, iter, bind = bind || obj);\n }\n return bind;\n };\n function inject(dest, src, enumerable, beans, preserve) {\n var beansNames = {};\n function field(name, val) {\n val = val || (val = describe(src, name)) && (val.get ? val : val.value);\n if (typeof val === \"string\" && val[0] === \"#\") val = dest[val.substring(1)] || val;\n var isFunc = typeof val === \"function\", res = val, prev = preserve || isFunc && !val.base ? val && val.get ? name in dest : dest[name] : null, bean;\n if (!preserve || !prev) {\n if (isFunc && prev) val.base = prev;\n if (isFunc && beans !== false && (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/))) beansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n if (!res || isFunc || !res.get || typeof res.get !== \"function\" || !Base.isPlainObject(res)) res = {\n value: res,\n writable: true\n };\n if ((describe(dest, name) || {\n configurable: true\n }).configurable) {\n res.configurable = true;\n res.enumerable = enumerable != null ? enumerable : !bean;\n }\n define1(dest, name, res);\n }\n }\n if (src) {\n for(var name in src)if (src.hasOwnProperty(name) && !hidden.test(name)) field(name);\n for(var name in beansNames){\n var part = beansNames[name], set = dest[\"set\" + part], get = dest[\"get\" + part] || set && dest[\"is\" + part];\n if (get && (beans === true || get.length === 0)) field(name, {\n get: get,\n set: set\n });\n }\n }\n return dest;\n }\n function Base() {\n for(var i = 0, l = arguments.length; i < l; i++){\n var src = arguments[i];\n if (src) set(this, src);\n }\n return this;\n }\n return inject(Base, {\n inject: function(src) {\n if (src) {\n var statics = src.statics === true ? src : src.statics, beans = src.beans, preserve = src.preserve;\n if (statics !== src) inject(this.prototype, src, src.enumerable, beans, preserve);\n inject(this, statics, null, beans, preserve);\n }\n for(var i = 1, l = arguments.length; i < l; i++)this.inject(arguments[i]);\n return this;\n },\n extend: function() {\n var base = this, ctor, proto;\n for(var i = 0, obj, l = arguments.length; i < l && !(ctor && proto); i++){\n obj = arguments[i];\n ctor = ctor || obj.initialize;\n proto = proto || obj.prototype;\n }\n ctor = ctor || function() {\n base.apply(this, arguments);\n };\n proto = ctor.prototype = proto || create(this.prototype);\n define1(proto, \"constructor\", {\n value: ctor,\n writable: true,\n configurable: true\n });\n inject(ctor, this);\n if (arguments.length) this.inject.apply(ctor, arguments);\n ctor.base = base;\n return ctor;\n }\n }).inject({\n enumerable: false,\n initialize: Base,\n set: Base,\n inject: function() {\n for(var i = 0, l = arguments.length; i < l; i++){\n var src = arguments[i];\n if (src) inject(this, src, src.enumerable, src.beans, src.preserve);\n }\n return this;\n },\n extend: function() {\n var res = create(this);\n return res.inject.apply(res, arguments);\n },\n each: function(iter, bind) {\n return each(this, iter, bind);\n },\n clone: function() {\n return new this.constructor(this);\n },\n statics: {\n set: set,\n each: each,\n create: create,\n define: define1,\n describe: describe,\n clone: function(obj) {\n return set(new obj.constructor(), obj);\n },\n isPlainObject: function(obj) {\n var ctor = obj != null && obj.constructor;\n return ctor && (ctor === Object || ctor === Base || ctor.name === \"Object\");\n },\n pick: function(a, b) {\n return a !== undefined ? a : b;\n },\n slice: function(list, begin, end) {\n return slice.call(list, begin, end);\n }\n }\n });\n };\n module.exports = Base;\n Base.inject({\n enumerable: false,\n toString: function() {\n return this._id != null ? (this._class || \"Object\") + (this._name ? \" '\" + this._name + \"'\" : \" @\" + this._id) : \"{ \" + Base.each(this, function(value, key) {\n if (!/^_/.test(key)) {\n var type = typeof value;\n this.push(key + \": \" + (type === \"number\" ? Formatter.instance.number(value) : type === \"string\" ? \"'\" + value + \"'\" : value));\n }\n }, []).join(\", \") + \" }\";\n },\n getClassName: function() {\n return this._class || \"\";\n },\n importJSON: function(json) {\n return Base.importJSON(json, this);\n },\n exportJSON: function(options) {\n return Base.exportJSON(this, options);\n },\n toJSON: function() {\n return Base.serialize(this);\n },\n set: function(props, exclude) {\n if (props) Base.filter(this, props, exclude, this._prioritize);\n return this;\n }\n }, {\n beans: false,\n statics: {\n exports: {},\n extend: function extend() {\n var res = extend.base.apply(this, arguments), name = res.prototype._class;\n if (name && !Base.exports[name]) Base.exports[name] = res;\n return res;\n },\n equals: function(obj1, obj2) {\n if (obj1 === obj2) return true;\n if (obj1 && obj1.equals) return obj1.equals(obj2);\n if (obj2 && obj2.equals) return obj2.equals(obj1);\n if (obj1 && obj2 && typeof obj1 === \"object\" && typeof obj2 === \"object\") {\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n var length = obj1.length;\n if (length !== obj2.length) return false;\n while(length--){\n if (!Base.equals(obj1[length], obj2[length])) return false;\n }\n } else {\n var keys = Object.keys(obj1), length = keys.length;\n if (length !== Object.keys(obj2).length) return false;\n while(length--){\n var key = keys[length];\n if (!(obj2.hasOwnProperty(key) && Base.equals(obj1[key], obj2[key]))) return false;\n }\n }\n return true;\n }\n return false;\n },\n read: function(list, start, options, amount) {\n if (this === Base) {\n var value = this.peek(list, start);\n list.__index++;\n return value;\n }\n var proto = this.prototype, readIndex = proto._readIndex, begin = start || readIndex && list.__index || 0, length = list.length, obj = list[begin];\n amount = amount || length - begin;\n if (obj instanceof this || options && options.readNull && obj == null && amount <= 1) {\n if (readIndex) list.__index = begin + 1;\n return obj && options && options.clone ? obj.clone() : obj;\n }\n obj = Base.create(proto);\n if (readIndex) obj.__read = true;\n obj = obj.initialize.apply(obj, begin > 0 || begin + amount < length ? Base.slice(list, begin, begin + amount) : list) || obj;\n if (readIndex) {\n list.__index = begin + obj.__read;\n var filtered = obj.__filtered;\n if (filtered) {\n list.__filtered = filtered;\n obj.__filtered = undefined;\n }\n obj.__read = undefined;\n }\n return obj;\n },\n peek: function(list, start) {\n return list[list.__index = start || list.__index || 0];\n },\n remain: function(list) {\n return list.length - (list.__index || 0);\n },\n readList: function(list, start, options, amount) {\n var res = [], entry, begin = start || 0, end = amount ? begin + amount : list.length;\n for(var i = begin; i < end; i++)res.push(Array.isArray(entry = list[i]) ? this.read(entry, 0, options) : this.read(list, i, options, 1));\n return res;\n },\n readNamed: function(list, name, start, options, amount) {\n var value = this.getNamed(list, name), hasValue = value !== undefined;\n if (hasValue) {\n var filtered = list.__filtered;\n if (!filtered) {\n var source = this.getSource(list);\n filtered = list.__filtered = Base.create(source);\n filtered.__unfiltered = source;\n }\n filtered[name] = undefined;\n }\n return this.read(hasValue ? [\n value\n ] : list, start, options, amount);\n },\n readSupported: function(list, dest) {\n var source = this.getSource(list), that = this, read = false;\n if (source) Object.keys(source).forEach(function(key) {\n if (key in dest) {\n var value = that.readNamed(list, key);\n if (value !== undefined) dest[key] = value;\n read = true;\n }\n });\n return read;\n },\n getSource: function(list) {\n var source = list.__source;\n if (source === undefined) {\n var arg = list.length === 1 && list[0];\n source = list.__source = arg && Base.isPlainObject(arg) ? arg : null;\n }\n return source;\n },\n getNamed: function(list, name) {\n var source = this.getSource(list);\n if (source) return name ? source[name] : list.__filtered || source;\n },\n hasNamed: function(list, name) {\n return !!this.getNamed(list, name);\n },\n filter: function(dest, source, exclude, prioritize) {\n var processed;\n function handleKey(key) {\n if (!(exclude && key in exclude) && !(processed && key in processed)) {\n var value = source[key];\n if (value !== undefined) dest[key] = value;\n }\n }\n if (prioritize) {\n var keys = {};\n for(var i = 0, key, l = prioritize.length; i < l; i++)if ((key = prioritize[i]) in source) {\n handleKey(key);\n keys[key] = true;\n }\n processed = keys;\n }\n Object.keys(source.__unfiltered || source).forEach(handleKey);\n return dest;\n },\n isPlainValue: function(obj, asString) {\n return Base.isPlainObject(obj) || Array.isArray(obj) || asString && typeof obj === \"string\";\n },\n serialize: function(obj, options, compact, dictionary) {\n options = options || {};\n var isRoot = !dictionary, res;\n if (isRoot) {\n options.formatter = new Formatter(options.precision);\n dictionary = {\n length: 0,\n definitions: {},\n references: {},\n add: function(item, create) {\n var id = \"#\" + item._id, ref = this.references[id];\n if (!ref) {\n this.length++;\n var res = create.call(item), name = item._class;\n if (name && res[0] !== name) res.unshift(name);\n this.definitions[id] = res;\n ref = this.references[id] = [\n id\n ];\n }\n return ref;\n }\n };\n }\n if (obj && obj._serialize) {\n res = obj._serialize(options, dictionary);\n var name = obj._class;\n if (name && !obj._compactSerialize && (isRoot || !compact) && res[0] !== name) res.unshift(name);\n } else if (Array.isArray(obj)) {\n res = [];\n for(var i = 0, l = obj.length; i < l; i++)res[i] = Base.serialize(obj[i], options, compact, dictionary);\n } else if (Base.isPlainObject(obj)) {\n res = {};\n var keys = Object.keys(obj);\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i];\n res[key] = Base.serialize(obj[key], options, compact, dictionary);\n }\n } else if (typeof obj === \"number\") res = options.formatter.number(obj, options.precision);\n else res = obj;\n return isRoot && dictionary.length > 0 ? [\n [\n \"dictionary\",\n dictionary.definitions\n ],\n res\n ] : res;\n },\n deserialize: function(json, create, _data, _setDictionary, _isRoot) {\n var res = json, isFirst = !_data, hasDictionary = isFirst && json && json.length && json[0][0] === \"dictionary\";\n _data = _data || {};\n if (Array.isArray(json)) {\n var type = json[0], isDictionary = type === \"dictionary\";\n if (json.length == 1 && /^#/.test(type)) return _data.dictionary[type];\n type = Base.exports[type];\n res = [];\n for(var i = type ? 1 : 0, l = json.length; i < l; i++)res.push(Base.deserialize(json[i], create, _data, isDictionary, hasDictionary));\n if (type) {\n var args = res;\n if (create) res = create(type, args, isFirst || _isRoot);\n else res = new type(args);\n }\n } else if (Base.isPlainObject(json)) {\n res = {};\n if (_setDictionary) _data.dictionary = res;\n for(var key in json)res[key] = Base.deserialize(json[key], create, _data);\n }\n return hasDictionary ? res[1] : res;\n },\n exportJSON: function(obj, options) {\n var json = Base.serialize(obj, options);\n return options && options.asString == false ? json : JSON.stringify(json);\n },\n importJSON: function(json, target) {\n return Base.deserialize(typeof json === \"string\" ? JSON.parse(json) : json, function(ctor, args, isRoot) {\n var useTarget = isRoot && target && target.constructor === ctor, obj = useTarget ? target : Base.create(ctor.prototype);\n if (args.length === 1 && obj instanceof Item && (useTarget || !(obj instanceof Layer))) {\n var arg = args[0];\n if (Base.isPlainObject(arg)) {\n arg.insert = false;\n if (useTarget) args = args.concat([\n Item.INSERT\n ]);\n }\n }\n (useTarget ? obj.set : ctor).apply(obj, args);\n if (useTarget) target = null;\n return obj;\n });\n },\n push: function(list, items) {\n var itemsLength = items.length;\n if (itemsLength < 4096) list.push.apply(list, items);\n else {\n var startLength = list.length;\n list.length += itemsLength;\n for(var i = 0; i < itemsLength; i++)list[startLength + i] = items[i];\n }\n return list;\n },\n splice: function(list, items, index, remove) {\n var amount = items && items.length, append = index === undefined;\n index = append ? list.length : index;\n if (index > list.length) index = list.length;\n for(var i = 0; i < amount; i++)items[i]._index = index + i;\n if (append) {\n Base.push(list, items);\n return [];\n } else {\n var args = [\n index,\n remove\n ];\n if (items) Base.push(args, items);\n var removed = list.splice.apply(list, args);\n for(var i = 0, l = removed.length; i < l; i++)removed[i]._index = undefined;\n for(var i = index + amount, l = list.length; i < l; i++)list[i]._index = i;\n return removed;\n }\n },\n capitalize: function(str) {\n return str.replace(/\\b[a-z]/g, function(match) {\n return match.toUpperCase();\n });\n },\n camelize: function(str) {\n return str.replace(/-(.)/g, function(match, chr) {\n return chr.toUpperCase();\n });\n },\n hyphenate: function(str) {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n }\n }\n });\n var Emitter = {\n on: function(type, func) {\n if (typeof type !== \"string\") Base.each(type, function(value, key) {\n this.on(key, value);\n }, this);\n else {\n var types = this._eventTypes, entry = types && types[type], handlers = this._callbacks = this._callbacks || {};\n handlers = handlers[type] = handlers[type] || [];\n if (handlers.indexOf(func) === -1) {\n handlers.push(func);\n if (entry && entry.install && handlers.length === 1) entry.install.call(this, type);\n }\n }\n return this;\n },\n off: function(type, func) {\n if (typeof type !== \"string\") {\n Base.each(type, function(value, key) {\n this.off(key, value);\n }, this);\n return;\n }\n var types = this._eventTypes, entry = types && types[type], handlers = this._callbacks && this._callbacks[type], index;\n if (handlers) {\n if (!func || (index = handlers.indexOf(func)) !== -1 && handlers.length === 1) {\n if (entry && entry.uninstall) entry.uninstall.call(this, type);\n delete this._callbacks[type];\n } else if (index !== -1) handlers.splice(index, 1);\n }\n return this;\n },\n once: function(type, func) {\n return this.on(type, function handler() {\n func.apply(this, arguments);\n this.off(type, handler);\n });\n },\n emit: function(type, event) {\n var handlers = this._callbacks && this._callbacks[type];\n if (!handlers) return false;\n var args = Base.slice(arguments, 1), setTarget = event && event.target && !event.currentTarget;\n handlers = handlers.slice();\n if (setTarget) event.currentTarget = this;\n for(var i = 0, l = handlers.length; i < l; i++)if (handlers[i].apply(this, args) == false) {\n if (event && event.stop) event.stop();\n break;\n }\n if (setTarget) delete event.currentTarget;\n return true;\n },\n responds: function(type) {\n return !!(this._callbacks && this._callbacks[type]);\n },\n attach: \"#on\",\n detach: \"#off\",\n fire: \"#emit\",\n _installEvents: function(install) {\n var types = this._eventTypes, handlers = this._callbacks, key = install ? \"install\" : \"uninstall\";\n if (types) {\n for(var type in handlers)if (handlers[type].length > 0) {\n var entry = types[type], func = entry && entry[key];\n if (func) func.call(this, type);\n }\n }\n },\n statics: {\n inject: function inject(src) {\n var events = src._events;\n if (events) {\n var types = {};\n Base.each(events, function(entry, key) {\n var isString = typeof entry === \"string\", name = isString ? entry : key, part = Base.capitalize(name), type = name.substring(2).toLowerCase();\n types[type] = isString ? {} : entry;\n name = \"_\" + name;\n src[\"get\" + part] = function() {\n return this[name];\n };\n src[\"set\" + part] = function(func) {\n var prev = this[name];\n if (prev) this.off(type, prev);\n if (func) this.on(type, func);\n this[name] = func;\n };\n });\n src._eventTypes = types;\n }\n return inject.base.apply(this, arguments);\n }\n }\n };\n var PaperScope = Base.extend({\n _class: \"PaperScope\",\n initialize: function PaperScope() {\n paper = this;\n this.settings = new Base({\n applyMatrix: true,\n insertItems: true,\n handleSize: 4,\n hitTolerance: 0\n });\n this.project = null;\n this.projects = [];\n this.tools = [];\n this._id = PaperScope._id++;\n PaperScope._scopes[this._id] = this;\n var proto = PaperScope.prototype;\n if (!this.support) {\n var ctx = CanvasProvider.getContext(1, 1) || {};\n proto.support = {\n nativeDash: \"setLineDash\" in ctx || \"mozDash\" in ctx,\n nativeBlendModes: BlendMode.nativeModes\n };\n CanvasProvider.release(ctx);\n }\n if (!this.agent) {\n var user = self1.navigator.userAgent.toLowerCase(), os = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user) || [])[0], platform = os === \"darwin\" ? \"mac\" : os, agent = proto.agent = proto.browser = {\n platform: platform\n };\n if (platform) agent[platform] = true;\n user.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g, function(match, n, v1, v2, rv) {\n if (!agent.chrome) {\n var v = n === \"opera\" ? v2 : /^(node|trident)$/.test(n) ? rv : v1;\n agent.version = v;\n agent.versionNumber = parseFloat(v);\n n = ({\n trident: \"msie\",\n jsdom: \"node\"\n })[n] || n;\n agent.name = n;\n agent[n] = true;\n }\n });\n if (agent.chrome) delete agent.webkit;\n if (agent.atom) delete agent.chrome;\n }\n },\n version: \"0.12.17\",\n getView: function() {\n var project = this.project;\n return project && project._view;\n },\n getPaper: function() {\n return this;\n },\n execute: function(code, options) {\n var exports = paper.PaperScript.execute(code, this, options);\n View.updateFocus();\n return exports;\n },\n install: function(scope) {\n var that = this;\n Base.each([\n \"project\",\n \"view\",\n \"tool\"\n ], function(key) {\n Base.define(scope, key, {\n configurable: true,\n get: function() {\n return that[key];\n }\n });\n });\n for(var key in this)if (!/^_/.test(key) && this[key]) scope[key] = this[key];\n },\n setup: function(element) {\n paper = this;\n this.project = new Project(element);\n return this;\n },\n createCanvas: function(width, height) {\n return CanvasProvider.getCanvas(width, height);\n },\n activate: function() {\n paper = this;\n },\n clear: function() {\n var projects = this.projects, tools = this.tools;\n for(var i = projects.length - 1; i >= 0; i--)projects[i].remove();\n for(var i = tools.length - 1; i >= 0; i--)tools[i].remove();\n },\n remove: function() {\n this.clear();\n delete PaperScope._scopes[this._id];\n },\n statics: new function() {\n function handleAttribute(name) {\n name += \"Attribute\";\n return function(el, attr) {\n return el[name](attr) || el[name](\"data-paper-\" + attr);\n };\n }\n return {\n _scopes: {},\n _id: 0,\n get: function(id) {\n return this._scopes[id] || null;\n },\n getAttribute: handleAttribute(\"get\"),\n hasAttribute: handleAttribute(\"has\")\n };\n }\n });\n var PaperScopeItem = Base.extend(Emitter, {\n initialize: function(activate) {\n this._scope = paper;\n this._index = this._scope[this._list].push(this) - 1;\n if (activate || !this._scope[this._reference]) this.activate();\n },\n activate: function() {\n if (!this._scope) return false;\n var prev = this._scope[this._reference];\n if (prev && prev !== this) prev.emit(\"deactivate\");\n this._scope[this._reference] = this;\n this.emit(\"activate\", prev);\n return true;\n },\n isActive: function() {\n return this._scope[this._reference] === this;\n },\n remove: function() {\n if (this._index == null) return false;\n Base.splice(this._scope[this._list], null, this._index, 1);\n if (this._scope[this._reference] == this) this._scope[this._reference] = null;\n this._scope = null;\n return true;\n },\n getView: function() {\n return this._scope.getView();\n }\n });\n var CollisionDetection = {\n findItemBoundsCollisions: function(items1, items2, tolerance) {\n function getBounds(items) {\n var bounds = new Array(items.length);\n for(var i = 0; i < items.length; i++){\n var rect = items[i].getBounds();\n bounds[i] = [\n rect.left,\n rect.top,\n rect.right,\n rect.bottom\n ];\n }\n return bounds;\n }\n var bounds1 = getBounds(items1), bounds2 = !items2 || items2 === items1 ? bounds1 : getBounds(items2);\n return this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n },\n findCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n function getBounds(curves) {\n var min = Math.min, max = Math.max, bounds = new Array(curves.length);\n for(var i = 0; i < curves.length; i++){\n var v = curves[i];\n bounds[i] = [\n min(v[0], v[2], v[4], v[6]),\n min(v[1], v[3], v[5], v[7]),\n max(v[0], v[2], v[4], v[6]),\n max(v[1], v[3], v[5], v[7])\n ];\n }\n return bounds;\n }\n var bounds1 = getBounds(curves1), bounds2 = !curves2 || curves2 === curves1 ? bounds1 : getBounds(curves2);\n if (bothAxis) {\n var hor = this.findBoundsCollisions(bounds1, bounds2, tolerance || 0, false, true), ver = this.findBoundsCollisions(bounds1, bounds2, tolerance || 0, true, true), list = [];\n for(var i = 0, l = hor.length; i < l; i++)list[i] = {\n hor: hor[i],\n ver: ver[i]\n };\n return list;\n }\n return this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n },\n findBoundsCollisions: function(boundsA, boundsB, tolerance, sweepVertical, onlySweepAxisCollisions) {\n var self1 = !boundsB || boundsA === boundsB, allBounds = self1 ? boundsA : boundsA.concat(boundsB), lengthA = boundsA.length, lengthAll = allBounds.length;\n function binarySearch(indices, coord, value) {\n var lo = 0, hi = indices.length;\n while(lo < hi){\n var mid = hi + lo >>> 1;\n if (allBounds[indices[mid]][coord] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo - 1;\n }\n var pri0 = sweepVertical ? 1 : 0, pri1 = pri0 + 2, sec0 = sweepVertical ? 0 : 1, sec1 = sec0 + 2;\n var allIndicesByPri0 = new Array(lengthAll);\n for(var i = 0; i < lengthAll; i++)allIndicesByPri0[i] = i;\n allIndicesByPri0.sort(function(i1, i2) {\n return allBounds[i1][pri0] - allBounds[i2][pri0];\n });\n var activeIndicesByPri1 = [], allCollisions = new Array(lengthA);\n for(var i = 0; i < lengthAll; i++){\n var curIndex = allIndicesByPri0[i], curBounds = allBounds[curIndex], origIndex = self1 ? curIndex : curIndex - lengthA, isCurrentA = curIndex < lengthA, isCurrentB = self1 || !isCurrentA, curCollisions = isCurrentA ? [] : null;\n if (activeIndicesByPri1.length) {\n var pruneCount = binarySearch(activeIndicesByPri1, pri1, curBounds[pri0] - tolerance) + 1;\n activeIndicesByPri1.splice(0, pruneCount);\n if (self1 && onlySweepAxisCollisions) {\n curCollisions = curCollisions.concat(activeIndicesByPri1);\n for(var j = 0; j < activeIndicesByPri1.length; j++){\n var activeIndex = activeIndicesByPri1[j];\n allCollisions[activeIndex].push(origIndex);\n }\n } else {\n var curSec1 = curBounds[sec1], curSec0 = curBounds[sec0];\n for(var j = 0; j < activeIndicesByPri1.length; j++){\n var activeIndex = activeIndicesByPri1[j], activeBounds = allBounds[activeIndex], isActiveA = activeIndex < lengthA, isActiveB = self1 || activeIndex >= lengthA;\n if (onlySweepAxisCollisions || (isCurrentA && isActiveB || isCurrentB && isActiveA) && curSec1 >= activeBounds[sec0] - tolerance && curSec0 <= activeBounds[sec1] + tolerance) {\n if (isCurrentA && isActiveB) curCollisions.push(self1 ? activeIndex : activeIndex - lengthA);\n if (isCurrentB && isActiveA) allCollisions[activeIndex].push(origIndex);\n }\n }\n }\n }\n if (isCurrentA) {\n if (boundsA === boundsB) curCollisions.push(curIndex);\n allCollisions[curIndex] = curCollisions;\n }\n if (activeIndicesByPri1.length) {\n var curPri1 = curBounds[pri1], index = binarySearch(activeIndicesByPri1, pri1, curPri1);\n activeIndicesByPri1.splice(index + 1, 0, curIndex);\n } else activeIndicesByPri1.push(curIndex);\n }\n for(var i = 0; i < allCollisions.length; i++){\n var collisions = allCollisions[i];\n if (collisions) collisions.sort(function(i1, i2) {\n return i1 - i2;\n });\n }\n return allCollisions;\n }\n };\n var Formatter = Base.extend({\n initialize: function(precision) {\n this.precision = Base.pick(precision, 5);\n this.multiplier = Math.pow(10, this.precision);\n },\n number: function(val) {\n return this.precision < 16 ? Math.round(val * this.multiplier) / this.multiplier : val;\n },\n pair: function(val1, val2, separator) {\n return this.number(val1) + (separator || \",\") + this.number(val2);\n },\n point: function(val, separator) {\n return this.number(val.x) + (separator || \",\") + this.number(val.y);\n },\n size: function(val, separator) {\n return this.number(val.width) + (separator || \",\") + this.number(val.height);\n },\n rectangle: function(val, separator) {\n return this.point(val, separator) + (separator || \",\") + this.size(val, separator);\n }\n });\n Formatter.instance = new Formatter();\n var Numerical = new function() {\n var abscissas = [\n [\n 0.5773502691896257645091488\n ],\n [\n 0,\n 0.7745966692414833770358531\n ],\n [\n 0.3399810435848562648026658,\n 0.8611363115940525752239465\n ],\n [\n 0,\n 0.5384693101056830910363144,\n 0.9061798459386639927976269\n ],\n [\n 0.2386191860831969086305017,\n 0.6612093864662645136613996,\n 0.9324695142031520278123016\n ],\n [\n 0,\n 0.4058451513773971669066064,\n 0.7415311855993944398638648,\n 0.9491079123427585245261897\n ],\n [\n 0.1834346424956498049394761,\n 0.5255324099163289858177390,\n 0.7966664774136267395915539,\n 0.9602898564975362316835609\n ],\n [\n 0,\n 0.3242534234038089290385380,\n 0.6133714327005903973087020,\n 0.8360311073266357942994298,\n 0.9681602395076260898355762\n ],\n [\n 0.1488743389816312108848260,\n 0.4333953941292471907992659,\n 0.6794095682990244062343274,\n 0.8650633666889845107320967,\n 0.9739065285171717200779640\n ],\n [\n 0,\n 0.2695431559523449723315320,\n 0.5190961292068118159257257,\n 0.7301520055740493240934163,\n 0.8870625997680952990751578,\n 0.9782286581460569928039380\n ],\n [\n 0.1252334085114689154724414,\n 0.3678314989981801937526915,\n 0.5873179542866174472967024,\n 0.7699026741943046870368938,\n 0.9041172563704748566784659,\n 0.9815606342467192506905491\n ],\n [\n 0,\n 0.2304583159551347940655281,\n 0.4484927510364468528779129,\n 0.6423493394403402206439846,\n 0.8015780907333099127942065,\n 0.9175983992229779652065478,\n 0.9841830547185881494728294\n ],\n [\n 0.1080549487073436620662447,\n 0.3191123689278897604356718,\n 0.5152486363581540919652907,\n 0.6872929048116854701480198,\n 0.8272013150697649931897947,\n 0.9284348836635735173363911,\n 0.9862838086968123388415973\n ],\n [\n 0,\n 0.2011940939974345223006283,\n 0.3941513470775633698972074,\n 0.5709721726085388475372267,\n 0.7244177313601700474161861,\n 0.8482065834104272162006483,\n 0.9372733924007059043077589,\n 0.9879925180204854284895657\n ],\n [\n 0.0950125098376374401853193,\n 0.2816035507792589132304605,\n 0.4580167776572273863424194,\n 0.6178762444026437484466718,\n 0.7554044083550030338951012,\n 0.8656312023878317438804679,\n 0.9445750230732325760779884,\n 0.9894009349916499325961542\n ]\n ];\n var weights = [\n [\n 1\n ],\n [\n 0.8888888888888888888888889,\n 0.5555555555555555555555556\n ],\n [\n 0.6521451548625461426269361,\n 0.3478548451374538573730639\n ],\n [\n 0.5688888888888888888888889,\n 0.4786286704993664680412915,\n 0.2369268850561890875142640\n ],\n [\n 0.4679139345726910473898703,\n 0.3607615730481386075698335,\n 0.1713244923791703450402961\n ],\n [\n 0.4179591836734693877551020,\n 0.3818300505051189449503698,\n 0.2797053914892766679014678,\n 0.1294849661688696932706114\n ],\n [\n 0.3626837833783619829651504,\n 0.3137066458778872873379622,\n 0.2223810344533744705443560,\n 0.1012285362903762591525314\n ],\n [\n 0.3302393550012597631645251,\n 0.3123470770400028400686304,\n 0.2606106964029354623187429,\n 0.1806481606948574040584720,\n 0.0812743883615744119718922\n ],\n [\n 0.2955242247147528701738930,\n 0.2692667193099963550912269,\n 0.2190863625159820439955349,\n 0.1494513491505805931457763,\n 0.0666713443086881375935688\n ],\n [\n 0.2729250867779006307144835,\n 0.2628045445102466621806889,\n 0.2331937645919904799185237,\n 0.1862902109277342514260976,\n 0.1255803694649046246346943,\n 0.0556685671161736664827537\n ],\n [\n 0.2491470458134027850005624,\n 0.2334925365383548087608499,\n 0.2031674267230659217490645,\n 0.1600783285433462263346525,\n 0.1069393259953184309602547,\n 0.0471753363865118271946160\n ],\n [\n 0.2325515532308739101945895,\n 0.2262831802628972384120902,\n 0.2078160475368885023125232,\n 0.1781459807619457382800467,\n 0.1388735102197872384636018,\n 0.0921214998377284479144218,\n 0.0404840047653158795200216\n ],\n [\n 0.2152638534631577901958764,\n 0.2051984637212956039659241,\n 0.1855383974779378137417166,\n 0.1572031671581935345696019,\n 0.1215185706879031846894148,\n 0.0801580871597602098056333,\n 0.0351194603317518630318329\n ],\n [\n 0.2025782419255612728806202,\n 0.1984314853271115764561183,\n 0.1861610000155622110268006,\n 0.1662692058169939335532009,\n 0.1395706779261543144478048,\n 0.1071592204671719350118695,\n 0.0703660474881081247092674,\n 0.0307532419961172683546284\n ],\n [\n 0.1894506104550684962853967,\n 0.1826034150449235888667637,\n 0.1691565193950025381893121,\n 0.1495959888165767320815017,\n 0.1246289712555338720524763,\n 0.0951585116824927848099251,\n 0.0622535239386478928628438,\n 0.0271524594117540948517806\n ]\n ];\n var abs = Math.abs, sqrt = Math.sqrt, pow = Math.pow, log2 = Math.log2 || function(x) {\n return Math.log(x) * Math.LOG2E;\n }, EPSILON = 1e-12, MACHINE_EPSILON = 1.12e-16;\n function clamp(value, min, max) {\n return value < min ? min : value > max ? max : value;\n }\n function getDiscriminant(a, b, c) {\n function split(v) {\n var x = v * 134217729, y = v - x, hi = y + x, lo = v - hi;\n return [\n hi,\n lo\n ];\n }\n var D = b * b - a * c, E = b * b + a * c;\n if (abs(D) * 3 < E) {\n var ad = split(a), bd = split(b), cd = split(c), p = b * b, dp = bd[0] * bd[0] - p + 2 * bd[0] * bd[1] + bd[1] * bd[1], q = a * c, dq = ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0] + ad[1] * cd[1];\n D = p - q + (dp - dq);\n }\n return D;\n }\n function getNormalizationFactor() {\n var norm = Math.max.apply(Math, arguments);\n return norm && (norm < 1e-8 || norm > 1e8) ? pow(2, -Math.round(log2(norm))) : 0;\n }\n return {\n EPSILON: EPSILON,\n MACHINE_EPSILON: MACHINE_EPSILON,\n CURVETIME_EPSILON: 1e-8,\n GEOMETRIC_EPSILON: 1e-7,\n TRIGONOMETRIC_EPSILON: 1e-8,\n ANGULAR_EPSILON: 1e-5,\n KAPPA: 4 * (sqrt(2) - 1) / 3,\n isZero: function(val) {\n return val >= -EPSILON && val <= EPSILON;\n },\n isMachineZero: function(val) {\n return val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n },\n clamp: clamp,\n integrate: function(f, a, b, n) {\n var x = abscissas[n - 2], w = weights[n - 2], A = (b - a) * 0.5, B = A + a, i = 0, m = n + 1 >> 1, sum = n & 1 ? w[i++] * f(B) : 0;\n while(i < m){\n var Ax = A * x[i];\n sum += w[i++] * (f(B + Ax) + f(B - Ax));\n }\n return A * sum;\n },\n findRoot: function(f, df, x, a, b, n, tolerance) {\n for(var i = 0; i < n; i++){\n var fx = f(x), dx = fx / df(x), nx = x - dx;\n if (abs(dx) < tolerance) {\n x = nx;\n break;\n }\n if (fx > 0) {\n b = x;\n x = nx <= a ? (a + b) * 0.5 : nx;\n } else {\n a = x;\n x = nx >= b ? (a + b) * 0.5 : nx;\n }\n }\n return clamp(x, a, b);\n },\n solveQuadratic: function(a, b, c, roots, min, max) {\n var x1, x2 = Infinity;\n if (abs(a) < EPSILON) {\n if (abs(b) < EPSILON) return abs(c) < EPSILON ? -1 : 0;\n x1 = -c / b;\n } else {\n b *= -0.5;\n var D = getDiscriminant(a, b, c);\n if (D && abs(D) < MACHINE_EPSILON) {\n var f = getNormalizationFactor(abs(a), abs(b), abs(c));\n if (f) {\n a *= f;\n b *= f;\n c *= f;\n D = getDiscriminant(a, b, c);\n }\n }\n if (D >= -MACHINE_EPSILON) {\n var Q = D < 0 ? 0 : sqrt(D), R = b + (b < 0 ? -Q : Q);\n if (R === 0) {\n x1 = c / a;\n x2 = -x1;\n } else {\n x1 = R / a;\n x2 = c / R;\n }\n }\n }\n var count = 0, boundless = min == null, minB = min - EPSILON, maxB = max + EPSILON;\n if (isFinite(x1) && (boundless || x1 > minB && x1 < maxB)) roots[count++] = boundless ? x1 : clamp(x1, min, max);\n if (x2 !== x1 && isFinite(x2) && (boundless || x2 > minB && x2 < maxB)) roots[count++] = boundless ? x2 : clamp(x2, min, max);\n return count;\n },\n solveCubic: function(a, b, c, d, roots, min, max) {\n var f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)), x, b1, c2, qd, q;\n if (f) {\n a *= f;\n b *= f;\n c *= f;\n d *= f;\n }\n function evaluate(x0) {\n x = x0;\n var tmp = a * x;\n b1 = tmp + b;\n c2 = b1 * x + c;\n qd = (tmp + b1) * x + c2;\n q = c2 * x + d;\n }\n if (abs(a) < EPSILON) {\n a = b;\n b1 = c;\n c2 = d;\n x = Infinity;\n } else if (abs(d) < EPSILON) {\n b1 = b;\n c2 = c;\n x = 0;\n } else {\n evaluate(-(b / a) / 3);\n var t = q / a, r = pow(abs(t), 1 / 3), s = t < 0 ? -1 : 1, td = -qd / a, rd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r, x0 = x - s * rd;\n if (x0 !== x) {\n do {\n evaluate(x0);\n x0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n }while (s * x0 > s * x);\n if (abs(a) * x * x > abs(d / x)) {\n c2 = -d / x;\n b1 = (c2 - c) / x;\n }\n }\n }\n var count = Numerical.solveQuadratic(a, b1, c2, roots, min, max), boundless = min == null;\n if (isFinite(x) && (count === 0 || count > 0 && x !== roots[0] && x !== roots[1]) && (boundless || x > min - EPSILON && x < max + EPSILON)) roots[count++] = boundless ? x : clamp(x, min, max);\n return count;\n }\n };\n };\n var UID = {\n _id: 1,\n _pools: {},\n get: function(name) {\n if (name) {\n var pool = this._pools[name];\n if (!pool) pool = this._pools[name] = {\n _id: 1\n };\n return pool._id++;\n } else return this._id++;\n }\n };\n var Point = Base.extend({\n _class: \"Point\",\n _readIndex: true,\n initialize: function Point(arg0, arg1) {\n var type = typeof arg0, reading = this.__read, read = 0;\n if (type === \"number\") {\n var hasY = typeof arg1 === \"number\";\n this._set(arg0, hasY ? arg1 : arg0);\n if (reading) read = hasY ? 2 : 1;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0);\n if (reading) read = arg0 === null ? 1 : 0;\n } else {\n var obj = type === \"string\" ? arg0.split(/[\\s,]+/) || [] : arg0;\n read = 1;\n if (Array.isArray(obj)) this._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n else if (\"x\" in obj) this._set(obj.x || 0, obj.y || 0);\n else if (\"width\" in obj) this._set(obj.width || 0, obj.height || 0);\n else if (\"angle\" in obj) {\n this._set(obj.length || 0, 0);\n this.setAngle(obj.angle || 0);\n } else {\n this._set(0, 0);\n read = 0;\n }\n }\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n equals: function(point) {\n return this === point || point && (this.x === point.x && this.y === point.y || Array.isArray(point) && this.x === point[0] && this.y === point[1]) || false;\n },\n clone: function() {\n return new Point(this.x, this.y);\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ x: \" + f.number(this.x) + \", y: \" + f.number(this.y) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.x),\n f.number(this.y)\n ];\n },\n getLength: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n setLength: function(length) {\n if (this.isZero()) {\n var angle = this._angle || 0;\n this._set(Math.cos(angle) * length, Math.sin(angle) * length);\n } else {\n var scale = length / this.getLength();\n if (Numerical.isZero(scale)) this.getAngle();\n this._set(this.x * scale, this.y * scale);\n }\n },\n getAngle: function() {\n return this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n },\n setAngle: function(angle) {\n this.setAngleInRadians.call(this, angle * Math.PI / 180);\n },\n getAngleInDegrees: \"#getAngle\",\n setAngleInDegrees: \"#setAngle\",\n getAngleInRadians: function() {\n if (!arguments.length) return this.isZero() ? this._angle || 0 : this._angle = Math.atan2(this.y, this.x);\n else {\n var point = Point.read(arguments), div = this.getLength() * point.getLength();\n if (Numerical.isZero(div)) return NaN;\n else {\n var a = this.dot(point) / div;\n return Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n }\n }\n },\n setAngleInRadians: function(angle) {\n this._angle = angle;\n if (!this.isZero()) {\n var length = this.getLength();\n this._set(Math.cos(angle) * length, Math.sin(angle) * length);\n }\n },\n getQuadrant: function() {\n return this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n }\n }, {\n beans: false,\n getDirectedAngle: function() {\n var point = Point.read(arguments);\n return Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n },\n getDistance: function() {\n var args = arguments, point = Point.read(args), x = point.x - this.x, y = point.y - this.y, d = x * x + y * y, squared = Base.read(args);\n return squared ? d : Math.sqrt(d);\n },\n normalize: function(length) {\n if (length === undefined) length = 1;\n var current = this.getLength(), scale = current !== 0 ? length / current : 0, point = new Point(this.x * scale, this.y * scale);\n if (scale >= 0) point._angle = this._angle;\n return point;\n },\n rotate: function(angle, center) {\n if (angle === 0) return this.clone();\n angle = angle * Math.PI / 180;\n var point = center ? this.subtract(center) : this, sin = Math.sin(angle), cos = Math.cos(angle);\n point = new Point(point.x * cos - point.y * sin, point.x * sin + point.y * cos);\n return center ? point.add(center) : point;\n },\n transform: function(matrix) {\n return matrix ? matrix._transformPoint(this) : this;\n },\n add: function() {\n var point = Point.read(arguments);\n return new Point(this.x + point.x, this.y + point.y);\n },\n subtract: function() {\n var point = Point.read(arguments);\n return new Point(this.x - point.x, this.y - point.y);\n },\n multiply: function() {\n var point = Point.read(arguments);\n return new Point(this.x * point.x, this.y * point.y);\n },\n divide: function() {\n var point = Point.read(arguments);\n return new Point(this.x / point.x, this.y / point.y);\n },\n modulo: function() {\n var point = Point.read(arguments);\n return new Point(this.x % point.x, this.y % point.y);\n },\n negate: function() {\n return new Point(-this.x, -this.y);\n },\n isInside: function() {\n return Rectangle.read(arguments).contains(this);\n },\n isClose: function() {\n var args = arguments, point = Point.read(args), tolerance = Base.read(args);\n return this.getDistance(point) <= tolerance;\n },\n isCollinear: function() {\n var point = Point.read(arguments);\n return Point.isCollinear(this.x, this.y, point.x, point.y);\n },\n isColinear: \"#isCollinear\",\n isOrthogonal: function() {\n var point = Point.read(arguments);\n return Point.isOrthogonal(this.x, this.y, point.x, point.y);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this.x) && isZero(this.y);\n },\n isNaN: function() {\n return isNaN(this.x) || isNaN(this.y);\n },\n isInQuadrant: function(q) {\n return this.x * (q > 1 && q < 4 ? -1 : 1) >= 0 && this.y * (q > 2 ? -1 : 1) >= 0;\n },\n dot: function() {\n var point = Point.read(arguments);\n return this.x * point.x + this.y * point.y;\n },\n cross: function() {\n var point = Point.read(arguments);\n return this.x * point.y - this.y * point.x;\n },\n project: function() {\n var point = Point.read(arguments), scale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n return new Point(point.x * scale, point.y * scale);\n },\n statics: {\n min: function() {\n var args = arguments, point1 = Point.read(args), point2 = Point.read(args);\n return new Point(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y));\n },\n max: function() {\n var args = arguments, point1 = Point.read(args), point2 = Point.read(args);\n return new Point(Math.max(point1.x, point2.x), Math.max(point1.y, point2.y));\n },\n random: function() {\n return new Point(Math.random(), Math.random());\n },\n isCollinear: function(x1, y1, x2, y2) {\n return Math.abs(x1 * y2 - y1 * x2) <= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2)) * 1e-8;\n },\n isOrthogonal: function(x1, y1, x2, y2) {\n return Math.abs(x1 * x2 + y1 * y2) <= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2)) * 1e-8;\n }\n }\n }, Base.each([\n \"round\",\n \"ceil\",\n \"floor\",\n \"abs\"\n ], function(key) {\n var op = Math[key];\n this[key] = function() {\n return new Point(op(this.x), op(this.y));\n };\n }, {}));\n var LinkedPoint = Point.extend({\n initialize: function Point(x, y, owner, setter) {\n this._x = x;\n this._y = y;\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(x, y, _dontNotify) {\n this._x = x;\n this._y = y;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n },\n getX: function() {\n return this._x;\n },\n setX: function(x) {\n this._x = x;\n this._owner[this._setter](this);\n },\n getY: function() {\n return this._y;\n },\n setY: function(y) {\n this._y = y;\n this._owner[this._setter](this);\n },\n isSelected: function() {\n return !!(this._owner._selection & this._getSelection());\n },\n setSelected: function(selected) {\n this._owner._changeSelection(this._getSelection(), selected);\n },\n _getSelection: function() {\n return this._setter === \"setPosition\" ? 4 : 0;\n }\n });\n var Size = Base.extend({\n _class: \"Size\",\n _readIndex: true,\n initialize: function Size(arg0, arg1) {\n var type = typeof arg0, reading = this.__read, read = 0;\n if (type === \"number\") {\n var hasHeight = typeof arg1 === \"number\";\n this._set(arg0, hasHeight ? arg1 : arg0);\n if (reading) read = hasHeight ? 2 : 1;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0);\n if (reading) read = arg0 === null ? 1 : 0;\n } else {\n var obj = type === \"string\" ? arg0.split(/[\\s,]+/) || [] : arg0;\n read = 1;\n if (Array.isArray(obj)) this._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n else if (\"width\" in obj) this._set(obj.width || 0, obj.height || 0);\n else if (\"x\" in obj) this._set(obj.x || 0, obj.y || 0);\n else {\n this._set(0, 0);\n read = 0;\n }\n }\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(width, height) {\n this.width = width;\n this.height = height;\n return this;\n },\n equals: function(size) {\n return size === this || size && (this.width === size.width && this.height === size.height || Array.isArray(size) && this.width === size[0] && this.height === size[1]) || false;\n },\n clone: function() {\n return new Size(this.width, this.height);\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ width: \" + f.number(this.width) + \", height: \" + f.number(this.height) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.width),\n f.number(this.height)\n ];\n },\n add: function() {\n var size = Size.read(arguments);\n return new Size(this.width + size.width, this.height + size.height);\n },\n subtract: function() {\n var size = Size.read(arguments);\n return new Size(this.width - size.width, this.height - size.height);\n },\n multiply: function() {\n var size = Size.read(arguments);\n return new Size(this.width * size.width, this.height * size.height);\n },\n divide: function() {\n var size = Size.read(arguments);\n return new Size(this.width / size.width, this.height / size.height);\n },\n modulo: function() {\n var size = Size.read(arguments);\n return new Size(this.width % size.width, this.height % size.height);\n },\n negate: function() {\n return new Size(-this.width, -this.height);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this.width) && isZero(this.height);\n },\n isNaN: function() {\n return isNaN(this.width) || isNaN(this.height);\n },\n statics: {\n min: function(size1, size2) {\n return new Size(Math.min(size1.width, size2.width), Math.min(size1.height, size2.height));\n },\n max: function(size1, size2) {\n return new Size(Math.max(size1.width, size2.width), Math.max(size1.height, size2.height));\n },\n random: function() {\n return new Size(Math.random(), Math.random());\n }\n }\n }, Base.each([\n \"round\",\n \"ceil\",\n \"floor\",\n \"abs\"\n ], function(key) {\n var op = Math[key];\n this[key] = function() {\n return new Size(op(this.width), op(this.height));\n };\n }, {}));\n var LinkedSize = Size.extend({\n initialize: function Size(width, height, owner, setter) {\n this._width = width;\n this._height = height;\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(width, height, _dontNotify) {\n this._width = width;\n this._height = height;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n },\n getWidth: function() {\n return this._width;\n },\n setWidth: function(width) {\n this._width = width;\n this._owner[this._setter](this);\n },\n getHeight: function() {\n return this._height;\n },\n setHeight: function(height) {\n this._height = height;\n this._owner[this._setter](this);\n }\n });\n var Rectangle = Base.extend({\n _class: \"Rectangle\",\n _readIndex: true,\n beans: true,\n initialize: function Rectangle(arg0, arg1, arg2, arg3) {\n var args = arguments, type = typeof arg0, read;\n if (type === \"number\") {\n this._set(arg0, arg1, arg2, arg3);\n read = 4;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0, 0, 0);\n read = arg0 === null ? 1 : 0;\n } else if (args.length === 1) {\n if (Array.isArray(arg0)) {\n this._set.apply(this, arg0);\n read = 1;\n } else if (arg0.x !== undefined || arg0.width !== undefined) {\n this._set(arg0.x || 0, arg0.y || 0, arg0.width || 0, arg0.height || 0);\n read = 1;\n } else if (arg0.from === undefined && arg0.to === undefined) {\n this._set(0, 0, 0, 0);\n if (Base.readSupported(args, this)) read = 1;\n }\n }\n if (read === undefined) {\n var frm = Point.readNamed(args, \"from\"), next = Base.peek(args), x = frm.x, y = frm.y, width, height;\n if (next && next.x !== undefined || Base.hasNamed(args, \"to\")) {\n var to = Point.readNamed(args, \"to\");\n width = to.x - x;\n height = to.y - y;\n if (width < 0) {\n x = to.x;\n width = -width;\n }\n if (height < 0) {\n y = to.y;\n height = -height;\n }\n } else {\n var size = Size.read(args);\n width = size.width;\n height = size.height;\n }\n this._set(x, y, width, height);\n read = args.__index;\n }\n var filtered = args.__filtered;\n if (filtered) this.__filtered = filtered;\n if (this.__read) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this;\n },\n clone: function() {\n return new Rectangle(this.x, this.y, this.width, this.height);\n },\n equals: function(rect) {\n var rt = Base.isPlainValue(rect) ? Rectangle.read(arguments) : rect;\n return rt === this || rt && this.x === rt.x && this.y === rt.y && this.width === rt.width && this.height === rt.height || false;\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ x: \" + f.number(this.x) + \", y: \" + f.number(this.y) + \", width: \" + f.number(this.width) + \", height: \" + f.number(this.height) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.x),\n f.number(this.y),\n f.number(this.width),\n f.number(this.height)\n ];\n },\n getPoint: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this.x, this.y, this, \"setPoint\");\n },\n setPoint: function() {\n var point = Point.read(arguments);\n this.x = point.x;\n this.y = point.y;\n },\n getSize: function(_dontLink) {\n var ctor = _dontLink ? Size : LinkedSize;\n return new ctor(this.width, this.height, this, \"setSize\");\n },\n _fw: 1,\n _fh: 1,\n setSize: function() {\n var size = Size.read(arguments), sx = this._sx, sy = this._sy, w = size.width, h = size.height;\n if (sx) this.x += (this.width - w) * sx;\n if (sy) this.y += (this.height - h) * sy;\n this.width = w;\n this.height = h;\n this._fw = this._fh = 1;\n },\n getLeft: function() {\n return this.x;\n },\n setLeft: function(left) {\n if (!this._fw) {\n var amount = left - this.x;\n this.width -= this._sx === 0.5 ? amount * 2 : amount;\n }\n this.x = left;\n this._sx = this._fw = 0;\n },\n getTop: function() {\n return this.y;\n },\n setTop: function(top) {\n if (!this._fh) {\n var amount = top - this.y;\n this.height -= this._sy === 0.5 ? amount * 2 : amount;\n }\n this.y = top;\n this._sy = this._fh = 0;\n },\n getRight: function() {\n return this.x + this.width;\n },\n setRight: function(right) {\n if (!this._fw) {\n var amount = right - this.x;\n this.width = this._sx === 0.5 ? amount * 2 : amount;\n }\n this.x = right - this.width;\n this._sx = 1;\n this._fw = 0;\n },\n getBottom: function() {\n return this.y + this.height;\n },\n setBottom: function(bottom) {\n if (!this._fh) {\n var amount = bottom - this.y;\n this.height = this._sy === 0.5 ? amount * 2 : amount;\n }\n this.y = bottom - this.height;\n this._sy = 1;\n this._fh = 0;\n },\n getCenterX: function() {\n return this.x + this.width / 2;\n },\n setCenterX: function(x) {\n if (this._fw || this._sx === 0.5) this.x = x - this.width / 2;\n else {\n if (this._sx) this.x += (x - this.x) * 2 * this._sx;\n this.width = (x - this.x) * 2;\n }\n this._sx = 0.5;\n this._fw = 0;\n },\n getCenterY: function() {\n return this.y + this.height / 2;\n },\n setCenterY: function(y) {\n if (this._fh || this._sy === 0.5) this.y = y - this.height / 2;\n else {\n if (this._sy) this.y += (y - this.y) * 2 * this._sy;\n this.height = (y - this.y) * 2;\n }\n this._sy = 0.5;\n this._fh = 0;\n },\n getCenter: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this.getCenterX(), this.getCenterY(), this, \"setCenter\");\n },\n setCenter: function() {\n var point = Point.read(arguments);\n this.setCenterX(point.x);\n this.setCenterY(point.y);\n return this;\n },\n getArea: function() {\n return this.width * this.height;\n },\n isEmpty: function() {\n return this.width === 0 || this.height === 0;\n },\n contains: function(arg) {\n return arg && arg.width !== undefined || (Array.isArray(arg) ? arg : arguments).length === 4 ? this._containsRectangle(Rectangle.read(arguments)) : this._containsPoint(Point.read(arguments));\n },\n _containsPoint: function(point) {\n var x = point.x, y = point.y;\n return x >= this.x && y >= this.y && x <= this.x + this.width && y <= this.y + this.height;\n },\n _containsRectangle: function(rect) {\n var x = rect.x, y = rect.y;\n return x >= this.x && y >= this.y && x + rect.width <= this.x + this.width && y + rect.height <= this.y + this.height;\n },\n intersects: function() {\n var rect = Rectangle.read(arguments), epsilon = Base.read(arguments) || 0;\n return rect.x + rect.width > this.x - epsilon && rect.y + rect.height > this.y - epsilon && rect.x < this.x + this.width + epsilon && rect.y < this.y + this.height + epsilon;\n },\n intersect: function() {\n var rect = Rectangle.read(arguments), x1 = Math.max(this.x, rect.x), y1 = Math.max(this.y, rect.y), x2 = Math.min(this.x + this.width, rect.x + rect.width), y2 = Math.min(this.y + this.height, rect.y + rect.height);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n unite: function() {\n var rect = Rectangle.read(arguments), x1 = Math.min(this.x, rect.x), y1 = Math.min(this.y, rect.y), x2 = Math.max(this.x + this.width, rect.x + rect.width), y2 = Math.max(this.y + this.height, rect.y + rect.height);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n include: function() {\n var point = Point.read(arguments);\n var x1 = Math.min(this.x, point.x), y1 = Math.min(this.y, point.y), x2 = Math.max(this.x + this.width, point.x), y2 = Math.max(this.y + this.height, point.y);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n expand: function() {\n var amount = Size.read(arguments), hor = amount.width, ver = amount.height;\n return new Rectangle(this.x - hor / 2, this.y - ver / 2, this.width + hor, this.height + ver);\n },\n scale: function(hor, ver) {\n return this.expand(this.width * hor - this.width, this.height * (ver === undefined ? hor : ver) - this.height);\n }\n }, Base.each([\n [\n \"Top\",\n \"Left\"\n ],\n [\n \"Top\",\n \"Right\"\n ],\n [\n \"Bottom\",\n \"Left\"\n ],\n [\n \"Bottom\",\n \"Right\"\n ],\n [\n \"Left\",\n \"Center\"\n ],\n [\n \"Top\",\n \"Center\"\n ],\n [\n \"Right\",\n \"Center\"\n ],\n [\n \"Bottom\",\n \"Center\"\n ]\n ], function(parts, index) {\n var part = parts.join(\"\"), xFirst = /^[RL]/.test(part);\n if (index >= 4) parts[1] += xFirst ? \"Y\" : \"X\";\n var x = parts[xFirst ? 0 : 1], y = parts[xFirst ? 1 : 0], getX = \"get\" + x, getY = \"get\" + y, setX = \"set\" + x, setY = \"set\" + y, get = \"get\" + part, set = \"set\" + part;\n this[get] = function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this[getX](), this[getY](), this, set);\n };\n this[set] = function() {\n var point = Point.read(arguments);\n this[setX](point.x);\n this[setY](point.y);\n };\n }, {\n beans: true\n }));\n var LinkedRectangle = Rectangle.extend({\n initialize: function Rectangle(x, y, width, height, owner, setter) {\n this._set(x, y, width, height, true);\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(x, y, width, height, _dontNotify) {\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n }\n }, new function() {\n var proto = Rectangle.prototype;\n return Base.each([\n \"x\",\n \"y\",\n \"width\",\n \"height\"\n ], function(key) {\n var part = Base.capitalize(key), internal = \"_\" + key;\n this[\"get\" + part] = function() {\n return this[internal];\n };\n this[\"set\" + part] = function(value) {\n this[internal] = value;\n if (!this._dontNotify) this._owner[this._setter](this);\n };\n }, Base.each([\n \"Point\",\n \"Size\",\n \"Center\",\n \"Left\",\n \"Top\",\n \"Right\",\n \"Bottom\",\n \"CenterX\",\n \"CenterY\",\n \"TopLeft\",\n \"TopRight\",\n \"BottomLeft\",\n \"BottomRight\",\n \"LeftCenter\",\n \"TopCenter\",\n \"RightCenter\",\n \"BottomCenter\"\n ], function(key) {\n var name = \"set\" + key;\n this[name] = function() {\n this._dontNotify = true;\n proto[name].apply(this, arguments);\n this._dontNotify = false;\n this._owner[this._setter](this);\n };\n }, {\n isSelected: function() {\n return !!(this._owner._selection & 2);\n },\n setSelected: function(selected) {\n var owner = this._owner;\n if (owner._changeSelection) owner._changeSelection(2, selected);\n }\n }));\n });\n var Matrix = Base.extend({\n _class: \"Matrix\",\n initialize: function Matrix(arg, _dontNotify) {\n var args = arguments, count = args.length, ok = true;\n if (count >= 6) this._set.apply(this, args);\n else if (count === 1 || count === 2) {\n if (arg instanceof Matrix) this._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty, _dontNotify);\n else if (Array.isArray(arg)) this._set.apply(this, _dontNotify ? arg.concat([\n _dontNotify\n ]) : arg);\n else ok = false;\n } else if (!count) this.reset();\n else ok = false;\n if (!ok) throw new Error(\"Unsupported matrix parameters\");\n return this;\n },\n set: \"#initialize\",\n _set: function(a, b, c, d, tx, ty, _dontNotify) {\n this._a = a;\n this._b = b;\n this._c = c;\n this._d = d;\n this._tx = tx;\n this._ty = ty;\n if (!_dontNotify) this._changed();\n return this;\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this.getValues(), options, true, dictionary);\n },\n _changed: function() {\n var owner = this._owner;\n if (owner) {\n if (owner._applyMatrix) owner.transform(null, true);\n else owner._changed(25);\n }\n },\n clone: function() {\n return new Matrix(this._a, this._b, this._c, this._d, this._tx, this._ty);\n },\n equals: function(mx) {\n return mx === this || mx && this._a === mx._a && this._b === mx._b && this._c === mx._c && this._d === mx._d && this._tx === mx._tx && this._ty === mx._ty;\n },\n toString: function() {\n var f = Formatter.instance;\n return \"[[\" + [\n f.number(this._a),\n f.number(this._c),\n f.number(this._tx)\n ].join(\", \") + \"], [\" + [\n f.number(this._b),\n f.number(this._d),\n f.number(this._ty)\n ].join(\", \") + \"]]\";\n },\n reset: function(_dontNotify) {\n this._a = this._d = 1;\n this._b = this._c = this._tx = this._ty = 0;\n if (!_dontNotify) this._changed();\n return this;\n },\n apply: function(recursively, _setApplyMatrix) {\n var owner = this._owner;\n if (owner) {\n owner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n return this.isIdentity();\n }\n return false;\n },\n translate: function() {\n var point = Point.read(arguments), x = point.x, y = point.y;\n this._tx += x * this._a + y * this._c;\n this._ty += x * this._b + y * this._d;\n this._changed();\n return this;\n },\n scale: function() {\n var args = arguments, scale = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n });\n if (center) this.translate(center);\n this._a *= scale.x;\n this._b *= scale.x;\n this._c *= scale.y;\n this._d *= scale.y;\n if (center) this.translate(center.negate());\n this._changed();\n return this;\n },\n rotate: function(angle) {\n angle *= Math.PI / 180;\n var center = Point.read(arguments, 1), x = center.x, y = center.y, cos = Math.cos(angle), sin = Math.sin(angle), tx = x - x * cos + y * sin, ty = y - x * sin - y * cos, a = this._a, b = this._b, c = this._c, d = this._d;\n this._a = cos * a + sin * c;\n this._b = cos * b + sin * d;\n this._c = -sin * a + cos * c;\n this._d = -sin * b + cos * d;\n this._tx += tx * a + ty * c;\n this._ty += tx * b + ty * d;\n this._changed();\n return this;\n },\n shear: function() {\n var args = arguments, shear = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n });\n if (center) this.translate(center);\n var a = this._a, b = this._b;\n this._a += shear.y * this._c;\n this._b += shear.y * this._d;\n this._c += shear.x * a;\n this._d += shear.x * b;\n if (center) this.translate(center.negate());\n this._changed();\n return this;\n },\n skew: function() {\n var args = arguments, skew = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n }), toRadians = Math.PI / 180, shear = new Point(Math.tan(skew.x * toRadians), Math.tan(skew.y * toRadians));\n return this.shear(shear, center);\n },\n append: function(mx, _dontNotify) {\n if (mx) {\n var a1 = this._a, b1 = this._b, c1 = this._c, d1 = this._d, a2 = mx._a, b2 = mx._c, c2 = mx._b, d2 = mx._d, tx2 = mx._tx, ty2 = mx._ty;\n this._a = a2 * a1 + c2 * c1;\n this._c = b2 * a1 + d2 * c1;\n this._b = a2 * b1 + c2 * d1;\n this._d = b2 * b1 + d2 * d1;\n this._tx += tx2 * a1 + ty2 * c1;\n this._ty += tx2 * b1 + ty2 * d1;\n if (!_dontNotify) this._changed();\n }\n return this;\n },\n prepend: function(mx, _dontNotify) {\n if (mx) {\n var a1 = this._a, b1 = this._b, c1 = this._c, d1 = this._d, tx1 = this._tx, ty1 = this._ty, a2 = mx._a, b2 = mx._c, c2 = mx._b, d2 = mx._d, tx2 = mx._tx, ty2 = mx._ty;\n this._a = a2 * a1 + b2 * b1;\n this._c = a2 * c1 + b2 * d1;\n this._b = c2 * a1 + d2 * b1;\n this._d = c2 * c1 + d2 * d1;\n this._tx = a2 * tx1 + b2 * ty1 + tx2;\n this._ty = c2 * tx1 + d2 * ty1 + ty2;\n if (!_dontNotify) this._changed();\n }\n return this;\n },\n appended: function(mx) {\n return this.clone().append(mx);\n },\n prepended: function(mx) {\n return this.clone().prepend(mx);\n },\n invert: function() {\n var a = this._a, b = this._b, c = this._c, d = this._d, tx = this._tx, ty = this._ty, det = a * d - b * c, res = null;\n if (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n this._a = d / det;\n this._b = -b / det;\n this._c = -c / det;\n this._d = a / det;\n this._tx = (c * ty - d * tx) / det;\n this._ty = (b * tx - a * ty) / det;\n res = this;\n }\n return res;\n },\n inverted: function() {\n return this.clone().invert();\n },\n concatenate: \"#append\",\n preConcatenate: \"#prepend\",\n chain: \"#appended\",\n _shiftless: function() {\n return new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n },\n _orNullIfIdentity: function() {\n return this.isIdentity() ? null : this;\n },\n isIdentity: function() {\n return this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1 && this._tx === 0 && this._ty === 0;\n },\n isInvertible: function() {\n var det = this._a * this._d - this._c * this._b;\n return det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n },\n isSingular: function() {\n return !this.isInvertible();\n },\n transform: function(src, dst, count) {\n return arguments.length < 3 ? this._transformPoint(Point.read(arguments)) : this._transformCoordinates(src, dst, count);\n },\n _transformPoint: function(point, dest, _dontNotify) {\n var x = point.x, y = point.y;\n if (!dest) dest = new Point();\n return dest._set(x * this._a + y * this._c + this._tx, x * this._b + y * this._d + this._ty, _dontNotify);\n },\n _transformCoordinates: function(src, dst, count) {\n for(var i = 0, max = 2 * count; i < max; i += 2){\n var x = src[i], y = src[i + 1];\n dst[i] = x * this._a + y * this._c + this._tx;\n dst[i + 1] = x * this._b + y * this._d + this._ty;\n }\n return dst;\n },\n _transformCorners: function(rect) {\n var x1 = rect.x, y1 = rect.y, x2 = x1 + rect.width, y2 = y1 + rect.height, coords = [\n x1,\n y1,\n x2,\n y1,\n x2,\n y2,\n x1,\n y2\n ];\n return this._transformCoordinates(coords, coords, 4);\n },\n _transformBounds: function(bounds, dest, _dontNotify) {\n var coords = this._transformCorners(bounds), min = coords.slice(0, 2), max = min.slice();\n for(var i = 2; i < 8; i++){\n var val = coords[i], j = i & 1;\n if (val < min[j]) min[j] = val;\n else if (val > max[j]) max[j] = val;\n }\n if (!dest) dest = new Rectangle();\n return dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1], _dontNotify);\n },\n inverseTransform: function() {\n return this._inverseTransform(Point.read(arguments));\n },\n _inverseTransform: function(point, dest, _dontNotify) {\n var a = this._a, b = this._b, c = this._c, d = this._d, tx = this._tx, ty = this._ty, det = a * d - b * c, res = null;\n if (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n var x = point.x - this._tx, y = point.y - this._ty;\n if (!dest) dest = new Point();\n res = dest._set((x * d - y * c) / det, (y * a - x * b) / det, _dontNotify);\n }\n return res;\n },\n decompose: function() {\n var a = this._a, b = this._b, c = this._c, d = this._d, det = a * d - b * c, sqrt = Math.sqrt, atan2 = Math.atan2, degrees = 180 / Math.PI, rotate, scale, skew;\n if (a !== 0 || b !== 0) {\n var r = sqrt(a * a + b * b);\n rotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n scale = [\n r,\n det / r\n ];\n skew = [\n atan2(a * c + b * d, r * r),\n 0\n ];\n } else if (c !== 0 || d !== 0) {\n var s = sqrt(c * c + d * d);\n rotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n scale = [\n det / s,\n s\n ];\n skew = [\n 0,\n atan2(a * c + b * d, s * s)\n ];\n } else {\n rotate = 0;\n skew = scale = [\n 0,\n 0\n ];\n }\n return {\n translation: this.getTranslation(),\n rotation: rotate * degrees,\n scaling: new Point(scale),\n skewing: new Point(skew[0] * degrees, skew[1] * degrees)\n };\n },\n getValues: function() {\n return [\n this._a,\n this._b,\n this._c,\n this._d,\n this._tx,\n this._ty\n ];\n },\n getTranslation: function() {\n return new Point(this._tx, this._ty);\n },\n getScaling: function() {\n return this.decompose().scaling;\n },\n getRotation: function() {\n return this.decompose().rotation;\n },\n applyToContext: function(ctx) {\n if (!this.isIdentity()) ctx.transform(this._a, this._b, this._c, this._d, this._tx, this._ty);\n }\n }, Base.each([\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"tx\",\n \"ty\"\n ], function(key) {\n var part = Base.capitalize(key), prop = \"_\" + key;\n this[\"get\" + part] = function() {\n return this[prop];\n };\n this[\"set\" + part] = function(value) {\n this[prop] = value;\n this._changed();\n };\n }, {}));\n var Line = Base.extend({\n _class: \"Line\",\n initialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n var asVector = false;\n if (arguments.length >= 4) {\n this._px = arg0;\n this._py = arg1;\n this._vx = arg2;\n this._vy = arg3;\n asVector = arg4;\n } else {\n this._px = arg0.x;\n this._py = arg0.y;\n this._vx = arg1.x;\n this._vy = arg1.y;\n asVector = arg2;\n }\n if (!asVector) {\n this._vx -= this._px;\n this._vy -= this._py;\n }\n },\n getPoint: function() {\n return new Point(this._px, this._py);\n },\n getVector: function() {\n return new Point(this._vx, this._vy);\n },\n getLength: function() {\n return this.getVector().getLength();\n },\n intersect: function(line, isInfinite) {\n return Line.intersect(this._px, this._py, this._vx, this._vy, line._px, line._py, line._vx, line._vy, true, isInfinite);\n },\n getSide: function(point, isInfinite) {\n return Line.getSide(this._px, this._py, this._vx, this._vy, point.x, point.y, true, isInfinite);\n },\n getDistance: function(point) {\n return Math.abs(this.getSignedDistance(point));\n },\n getSignedDistance: function(point) {\n return Line.getSignedDistance(this._px, this._py, this._vx, this._vy, point.x, point.y, true);\n },\n isCollinear: function(line) {\n return Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n },\n isOrthogonal: function(line) {\n return Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n },\n statics: {\n intersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector, isInfinite) {\n if (!asVector) {\n v1x -= p1x;\n v1y -= p1y;\n v2x -= p2x;\n v2y -= p2y;\n }\n var cross = v1x * v2y - v1y * v2x;\n if (!Numerical.isMachineZero(cross)) {\n var dx = p1x - p2x, dy = p1y - p2y, u1 = (v2x * dy - v2y * dx) / cross, u2 = (v1x * dy - v1y * dx) / cross, epsilon = 1e-12, uMin = -epsilon, uMax = 1 + epsilon;\n if (isInfinite || uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n if (!isInfinite) u1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n return new Point(p1x + u1 * v1x, p1y + u1 * v1y);\n }\n }\n },\n getSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n if (!asVector) {\n vx -= px;\n vy -= py;\n }\n var v2x = x - px, v2y = y - py, ccw = v2x * vy - v2y * vx;\n if (!isInfinite && Numerical.isMachineZero(ccw)) {\n ccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n if (ccw >= 0 && ccw <= 1) ccw = 0;\n }\n return ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n },\n getSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n if (!asVector) {\n vx -= px;\n vy -= py;\n }\n return vx === 0 ? vy > 0 ? x - px : px - x : vy === 0 ? vx < 0 ? y - py : py - y : ((x - px) * vy - (y - py) * vx) / (vy > vx ? vy * Math.sqrt(1 + vx * vx / (vy * vy)) : vx * Math.sqrt(1 + vy * vy / (vx * vx)));\n },\n getDistance: function(px, py, vx, vy, x, y, asVector) {\n return Math.abs(Line.getSignedDistance(px, py, vx, vy, x, y, asVector));\n }\n }\n });\n var Project = PaperScopeItem.extend({\n _class: \"Project\",\n _list: \"projects\",\n _reference: \"project\",\n _compactSerialize: true,\n initialize: function Project(element) {\n PaperScopeItem.call(this, true);\n this._children = [];\n this._namedChildren = {};\n this._activeLayer = null;\n this._currentStyle = new Style(null, null, this);\n this._view = View.create(this, element || CanvasProvider.getCanvas(1, 1));\n this._selectionItems = {};\n this._selectionCount = 0;\n this._updateVersion = 0;\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this._children, options, true, dictionary);\n },\n _changed: function(flags, item) {\n if (flags & 1) {\n var view = this._view;\n if (view) {\n view._needsUpdate = true;\n if (!view._requested && view._autoUpdate) view.requestUpdate();\n }\n }\n var changes = this._changes;\n if (changes && item) {\n var changesById = this._changesById, id = item._id, entry = changesById[id];\n if (entry) entry.flags |= flags;\n else changes.push(changesById[id] = {\n item: item,\n flags: flags\n });\n }\n },\n clear: function() {\n var children = this._children;\n for(var i = children.length - 1; i >= 0; i--)children[i].remove();\n },\n isEmpty: function() {\n return !this._children.length;\n },\n remove: function remove() {\n if (!remove.base.call(this)) return false;\n if (this._view) this._view.remove();\n return true;\n },\n getView: function() {\n return this._view;\n },\n getCurrentStyle: function() {\n return this._currentStyle;\n },\n setCurrentStyle: function(style) {\n this._currentStyle.set(style);\n },\n getIndex: function() {\n return this._index;\n },\n getOptions: function() {\n return this._scope.settings;\n },\n getLayers: function() {\n return this._children;\n },\n getActiveLayer: function() {\n return this._activeLayer || new Layer({\n project: this,\n insert: true\n });\n },\n getSymbolDefinitions: function() {\n var definitions = [], ids = {};\n this.getItems({\n class: SymbolItem,\n match: function(item) {\n var definition = item._definition, id = definition._id;\n if (!ids[id]) {\n ids[id] = true;\n definitions.push(definition);\n }\n return false;\n }\n });\n return definitions;\n },\n getSymbols: \"getSymbolDefinitions\",\n getSelectedItems: function() {\n var selectionItems = this._selectionItems, items = [];\n for(var id in selectionItems){\n var item = selectionItems[id], selection = item._selection;\n if (selection & 1 && item.isInserted()) items.push(item);\n else if (!selection) this._updateSelection(item);\n }\n return items;\n },\n _updateSelection: function(item) {\n var id = item._id, selectionItems = this._selectionItems;\n if (item._selection) {\n if (selectionItems[id] !== item) {\n this._selectionCount++;\n selectionItems[id] = item;\n }\n } else if (selectionItems[id] === item) {\n this._selectionCount--;\n delete selectionItems[id];\n }\n },\n selectAll: function() {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setFullySelected(true);\n },\n deselectAll: function() {\n var selectionItems = this._selectionItems;\n for(var i in selectionItems)selectionItems[i].setFullySelected(false);\n },\n addLayer: function(layer) {\n return this.insertLayer(undefined, layer);\n },\n insertLayer: function(index, layer) {\n if (layer instanceof Layer) {\n layer._remove(false, true);\n Base.splice(this._children, [\n layer\n ], index, 0);\n layer._setProject(this, true);\n var name = layer._name;\n if (name) layer.setName(name);\n if (this._changes) layer._changed(5);\n if (!this._activeLayer) this._activeLayer = layer;\n } else layer = null;\n return layer;\n },\n _insertItem: function(index, item, _created) {\n item = this.insertLayer(index, item) || (this._activeLayer || this._insertItem(undefined, new Layer(Item.NO_INSERT), true)).insertChild(index, item);\n if (_created && item.activate) item.activate();\n return item;\n },\n getItems: function(options) {\n return Item._getItems(this, options);\n },\n getItem: function(options) {\n return Item._getItems(this, options, null, null, true)[0] || null;\n },\n importJSON: function(json) {\n this.activate();\n var layer = this._activeLayer;\n return Base.importJSON(json, layer && layer.isEmpty() && layer);\n },\n removeOn: function(type) {\n var sets = this._removeSets;\n if (sets) {\n if (type === \"mouseup\") sets.mousedrag = null;\n var set = sets[type];\n if (set) {\n for(var id in set){\n var item = set[id];\n for(var key in sets){\n var other = sets[key];\n if (other && other != set) delete other[item._id];\n }\n item.remove();\n }\n sets[type] = null;\n }\n }\n },\n draw: function(ctx, matrix, pixelRatio) {\n this._updateVersion++;\n ctx.save();\n matrix.applyToContext(ctx);\n var children = this._children, param = new Base({\n offset: new Point(0, 0),\n pixelRatio: pixelRatio,\n viewMatrix: matrix.isIdentity() ? null : matrix,\n matrices: [\n new Matrix()\n ],\n updateMatrix: true\n });\n for(var i = 0, l = children.length; i < l; i++)children[i].draw(ctx, param);\n ctx.restore();\n if (this._selectionCount > 0) {\n ctx.save();\n ctx.strokeWidth = 1;\n var items = this._selectionItems, size = this._scope.settings.handleSize, version = this._updateVersion;\n for(var id in items)items[id]._drawSelection(ctx, matrix, size, items, version);\n ctx.restore();\n }\n }\n });\n var Item = Base.extend(Emitter, {\n statics: {\n extend: function extend(src) {\n if (src._serializeFields) src._serializeFields = Base.set({}, this.prototype._serializeFields, src._serializeFields);\n return extend.base.apply(this, arguments);\n },\n INSERT: {\n insert: true\n },\n NO_INSERT: {\n insert: false\n }\n },\n _class: \"Item\",\n _name: null,\n _applyMatrix: true,\n _canApplyMatrix: true,\n _canScaleStroke: false,\n _pivot: null,\n _visible: true,\n _blendMode: \"normal\",\n _opacity: 1,\n _locked: false,\n _guide: false,\n _clipMask: false,\n _selection: 0,\n _selectBounds: true,\n _selectChildren: false,\n _serializeFields: {\n name: null,\n applyMatrix: null,\n matrix: new Matrix(),\n pivot: null,\n visible: true,\n blendMode: \"normal\",\n opacity: 1,\n locked: false,\n guide: false,\n clipMask: false,\n selected: false,\n data: {}\n },\n _prioritize: [\n \"applyMatrix\"\n ]\n }, new function() {\n var handlers = [\n \"onMouseDown\",\n \"onMouseUp\",\n \"onMouseDrag\",\n \"onClick\",\n \"onDoubleClick\",\n \"onMouseMove\",\n \"onMouseEnter\",\n \"onMouseLeave\"\n ];\n return Base.each(handlers, function(name) {\n this._events[name] = {\n install: function(type) {\n this.getView()._countItemEvent(type, 1);\n },\n uninstall: function(type) {\n this.getView()._countItemEvent(type, -1);\n }\n };\n }, {\n _events: {\n onFrame: {\n install: function() {\n this.getView()._animateItem(this, true);\n },\n uninstall: function() {\n this.getView()._animateItem(this, false);\n }\n },\n onLoad: {},\n onError: {}\n },\n statics: {\n _itemHandlers: handlers\n }\n });\n }, {\n initialize: function Item() {},\n _initialize: function(props, point) {\n var hasProps = props && Base.isPlainObject(props), internal = hasProps && props.internal === true, matrix = this._matrix = new Matrix(), project = hasProps && props.project || paper.project, settings = paper.settings;\n this._id = internal ? null : UID.get();\n this._parent = this._index = null;\n this._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n if (point) matrix.translate(point);\n matrix._owner = this;\n this._style = new Style(project._currentStyle, this, project);\n if (internal || hasProps && props.insert == false || !settings.insertItems && !(hasProps && props.insert == true)) this._setProject(project);\n else (hasProps && props.parent || project)._insertItem(undefined, this, true);\n if (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) this.set(props, {\n internal: true,\n insert: true,\n project: true,\n parent: true\n });\n return hasProps;\n },\n _serialize: function(options, dictionary) {\n var props = {}, that = this;\n function serialize(fields) {\n for(var key in fields){\n var value = that[key];\n if (!Base.equals(value, key === \"leading\" ? fields.fontSize * 1.2 : fields[key])) props[key] = Base.serialize(value, options, key !== \"data\", dictionary);\n }\n }\n serialize(this._serializeFields);\n if (!(this instanceof Group)) serialize(this._style._defaults);\n return [\n this._class,\n props\n ];\n },\n _changed: function(flags) {\n var symbol = this._symbol, cacheParent = this._parent || symbol, project = this._project;\n if (flags & 8) this._bounds = this._position = this._decomposed = undefined;\n if (flags & 16) this._globalMatrix = undefined;\n if (cacheParent && flags & 72) Item._clearBoundsCache(cacheParent);\n if (flags & 2) Item._clearBoundsCache(this);\n if (project) project._changed(flags, this);\n if (symbol) symbol._changed(flags);\n },\n getId: function() {\n return this._id;\n },\n getName: function() {\n return this._name;\n },\n setName: function(name) {\n if (this._name) this._removeNamed();\n if (name === +name + \"\") throw new Error(\"Names consisting only of numbers are not supported.\");\n var owner = this._getOwner();\n if (name && owner) {\n var children = owner._children, namedChildren = owner._namedChildren;\n (namedChildren[name] = namedChildren[name] || []).push(this);\n if (!(name in children)) children[name] = this;\n }\n this._name = name || undefined;\n this._changed(256);\n },\n getStyle: function() {\n return this._style;\n },\n setStyle: function(style) {\n this.getStyle().set(style);\n }\n }, Base.each([\n \"locked\",\n \"visible\",\n \"blendMode\",\n \"opacity\",\n \"guide\"\n ], function(name) {\n var part = Base.capitalize(name), key = \"_\" + name, flags = {\n locked: 256,\n visible: 265\n };\n this[\"get\" + part] = function() {\n return this[key];\n };\n this[\"set\" + part] = function(value) {\n if (value != this[key]) {\n this[key] = value;\n this._changed(flags[name] || 257);\n }\n };\n }, {}), {\n beans: true,\n getSelection: function() {\n return this._selection;\n },\n setSelection: function(selection) {\n if (selection !== this._selection) {\n this._selection = selection;\n var project = this._project;\n if (project) {\n project._updateSelection(this);\n this._changed(257);\n }\n }\n },\n _changeSelection: function(flag, selected) {\n var selection = this._selection;\n this.setSelection(selected ? selection | flag : selection & ~flag);\n },\n isSelected: function() {\n if (this._selectChildren) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)if (children[i].isSelected()) return true;\n }\n return !!(this._selection & 1);\n },\n setSelected: function(selected) {\n if (this._selectChildren) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setSelected(selected);\n }\n this._changeSelection(1, selected);\n },\n isFullySelected: function() {\n var children = this._children, selected = !!(this._selection & 1);\n if (children && selected) {\n for(var i = 0, l = children.length; i < l; i++)if (!children[i].isFullySelected()) return false;\n return true;\n }\n return selected;\n },\n setFullySelected: function(selected) {\n var children = this._children;\n if (children) for(var i = 0, l = children.length; i < l; i++)children[i].setFullySelected(selected);\n this._changeSelection(1, selected);\n },\n isClipMask: function() {\n return this._clipMask;\n },\n setClipMask: function(clipMask) {\n if (this._clipMask != (clipMask = !!clipMask)) {\n this._clipMask = clipMask;\n if (clipMask) {\n this.setFillColor(null);\n this.setStrokeColor(null);\n }\n this._changed(257);\n if (this._parent) this._parent._changed(2048);\n }\n },\n getData: function() {\n if (!this._data) this._data = {};\n return this._data;\n },\n setData: function(data) {\n this._data = data;\n },\n getPosition: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n var position = this._position || (this._position = this._getPositionFromBounds());\n return new ctor(position.x, position.y, this, \"setPosition\");\n },\n setPosition: function() {\n this.translate(Point.read(arguments).subtract(this.getPosition(true)));\n },\n _getPositionFromBounds: function(bounds) {\n return this._pivot ? this._matrix._transformPoint(this._pivot) : (bounds || this.getBounds()).getCenter(true);\n },\n getPivot: function() {\n var pivot = this._pivot;\n return pivot ? new LinkedPoint(pivot.x, pivot.y, this, \"setPivot\") : null;\n },\n setPivot: function() {\n this._pivot = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n this._position = undefined;\n }\n }, Base.each({\n getStrokeBounds: {\n stroke: true\n },\n getHandleBounds: {\n handle: true\n },\n getInternalBounds: {\n internal: true\n }\n }, function(options, key) {\n this[key] = function(matrix) {\n return this.getBounds(matrix, options);\n };\n }, {\n beans: true,\n getBounds: function(matrix, options) {\n var hasMatrix = options || matrix instanceof Matrix, opts = Base.set({}, hasMatrix ? options : matrix, this._boundsOptions);\n if (!opts.stroke || this.getStrokeScaling()) opts.cacheItem = this;\n var rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n return !arguments.length ? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height, this, \"setBounds\") : rect;\n },\n setBounds: function() {\n var rect = Rectangle.read(arguments), bounds = this.getBounds(), _matrix = this._matrix, matrix = new Matrix(), center = rect.getCenter();\n matrix.translate(center);\n if (rect.width != bounds.width || rect.height != bounds.height) {\n if (!_matrix.isInvertible()) {\n _matrix.set(_matrix._backup || new Matrix().translate(_matrix.getTranslation()));\n bounds = this.getBounds();\n }\n matrix.scale(bounds.width !== 0 ? rect.width / bounds.width : 0, bounds.height !== 0 ? rect.height / bounds.height : 0);\n }\n center = bounds.getCenter();\n matrix.translate(-center.x, -center.y);\n this.transform(matrix);\n },\n _getBounds: function(matrix, options) {\n var children = this._children;\n if (!children || !children.length) return new Rectangle();\n Item._updateBoundsCache(this, options.cacheItem);\n return Item._getBounds(children, matrix, options);\n },\n _getBoundsCacheKey: function(options, internal) {\n return [\n options.stroke ? 1 : 0,\n options.handle ? 1 : 0,\n internal ? 1 : 0\n ].join(\"\");\n },\n _getCachedBounds: function(matrix, options, noInternal) {\n matrix = matrix && matrix._orNullIfIdentity();\n var internal = options.internal && !noInternal, cacheItem = options.cacheItem, _matrix = internal ? null : this._matrix._orNullIfIdentity(), cacheKey = cacheItem && (!matrix || matrix.equals(_matrix)) && this._getBoundsCacheKey(options, internal), bounds = this._bounds;\n Item._updateBoundsCache(this._parent || this._symbol, cacheItem);\n if (cacheKey && bounds && cacheKey in bounds) {\n var cached = bounds[cacheKey];\n return {\n rect: cached.rect.clone(),\n nonscaling: cached.nonscaling\n };\n }\n var res = this._getBounds(matrix || _matrix, options), rect = res.rect || res, style = this._style, nonscaling = res.nonscaling || style.hasStroke() && !style.getStrokeScaling();\n if (cacheKey) {\n if (!bounds) this._bounds = bounds = {};\n var cached = bounds[cacheKey] = {\n rect: rect.clone(),\n nonscaling: nonscaling,\n internal: internal\n };\n }\n return {\n rect: rect,\n nonscaling: nonscaling\n };\n },\n _getStrokeMatrix: function(matrix, options) {\n var parent = this.getStrokeScaling() ? null : options && options.internal ? this : this._parent || this._symbol && this._symbol._item, mx = parent ? parent.getViewMatrix().invert() : matrix;\n return mx && mx._shiftless();\n },\n statics: {\n _updateBoundsCache: function(parent, item) {\n if (parent && item) {\n var id = item._id, ref = parent._boundsCache = parent._boundsCache || {\n ids: {},\n list: []\n };\n if (!ref.ids[id]) {\n ref.list.push(item);\n ref.ids[id] = item;\n }\n }\n },\n _clearBoundsCache: function(item) {\n var cache = item._boundsCache;\n if (cache) {\n item._bounds = item._position = item._boundsCache = undefined;\n for(var i = 0, list = cache.list, l = list.length; i < l; i++){\n var other = list[i];\n if (other !== item) {\n other._bounds = other._position = undefined;\n if (other._boundsCache) Item._clearBoundsCache(other);\n }\n }\n }\n },\n _getBounds: function(items, matrix, options) {\n var x1 = Infinity, x2 = -x1, y1 = x1, y2 = x2, nonscaling = false;\n options = options || {};\n for(var i = 0, l = items.length; i < l; i++){\n var item = items[i];\n if (item._visible && !item.isEmpty(true)) {\n var bounds = item._getCachedBounds(matrix && matrix.appended(item._matrix), options, true), rect = bounds.rect;\n x1 = Math.min(rect.x, x1);\n y1 = Math.min(rect.y, y1);\n x2 = Math.max(rect.x + rect.width, x2);\n y2 = Math.max(rect.y + rect.height, y2);\n if (bounds.nonscaling) nonscaling = true;\n }\n }\n return {\n rect: isFinite(x1) ? new Rectangle(x1, y1, x2 - x1, y2 - y1) : new Rectangle(),\n nonscaling: nonscaling\n };\n }\n }\n }), {\n beans: true,\n _decompose: function() {\n return this._applyMatrix ? null : this._decomposed || (this._decomposed = this._matrix.decompose());\n },\n getRotation: function() {\n var decomposed = this._decompose();\n return decomposed ? decomposed.rotation : 0;\n },\n setRotation: function(rotation) {\n var current = this.getRotation();\n if (current != null && rotation != null) {\n var decomposed = this._decomposed;\n this.rotate(rotation - current);\n if (decomposed) {\n decomposed.rotation = rotation;\n this._decomposed = decomposed;\n }\n }\n },\n getScaling: function() {\n var decomposed = this._decompose(), s = decomposed && decomposed.scaling;\n return new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, \"setScaling\");\n },\n setScaling: function() {\n var current = this.getScaling(), scaling = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n if (current && scaling && !current.equals(scaling)) {\n var rotation = this.getRotation(), decomposed = this._decomposed, matrix = new Matrix(), isZero = Numerical.isZero;\n if (isZero(current.x) || isZero(current.y)) {\n matrix.translate(decomposed.translation);\n if (rotation) matrix.rotate(rotation);\n matrix.scale(scaling.x, scaling.y);\n this._matrix.set(matrix);\n } else {\n var center = this.getPosition(true);\n matrix.translate(center);\n if (rotation) matrix.rotate(rotation);\n matrix.scale(scaling.x / current.x, scaling.y / current.y);\n if (rotation) matrix.rotate(-rotation);\n matrix.translate(center.negate());\n this.transform(matrix);\n }\n if (decomposed) {\n decomposed.scaling = scaling;\n this._decomposed = decomposed;\n }\n }\n },\n getMatrix: function() {\n return this._matrix;\n },\n setMatrix: function() {\n var matrix = this._matrix;\n matrix.set.apply(matrix, arguments);\n },\n getGlobalMatrix: function(_dontClone) {\n var matrix = this._globalMatrix;\n if (matrix) {\n var parent = this._parent;\n var parents = [];\n while(parent){\n if (!parent._globalMatrix) {\n matrix = null;\n for(var i = 0, l = parents.length; i < l; i++)parents[i]._globalMatrix = null;\n break;\n }\n parents.push(parent);\n parent = parent._parent;\n }\n }\n if (!matrix) {\n matrix = this._globalMatrix = this._matrix.clone();\n var parent = this._parent;\n if (parent) matrix.prepend(parent.getGlobalMatrix(true));\n }\n return _dontClone ? matrix : matrix.clone();\n },\n getViewMatrix: function() {\n return this.getGlobalMatrix().prepend(this.getView()._matrix);\n },\n getApplyMatrix: function() {\n return this._applyMatrix;\n },\n setApplyMatrix: function(apply) {\n if (this._applyMatrix = this._canApplyMatrix && !!apply) this.transform(null, true);\n },\n getTransformContent: \"#getApplyMatrix\",\n setTransformContent: \"#setApplyMatrix\"\n }, {\n getProject: function() {\n return this._project;\n },\n _setProject: function(project, installEvents) {\n if (this._project !== project) {\n if (this._project) this._installEvents(false);\n this._project = project;\n var children = this._children;\n for(var i = 0, l = children && children.length; i < l; i++)children[i]._setProject(project);\n installEvents = true;\n }\n if (installEvents) this._installEvents(true);\n },\n getView: function() {\n return this._project._view;\n },\n _installEvents: function _installEvents(install) {\n _installEvents.base.call(this, install);\n var children = this._children;\n for(var i = 0, l = children && children.length; i < l; i++)children[i]._installEvents(install);\n },\n getLayer: function() {\n var parent = this;\n while(parent = parent._parent){\n if (parent instanceof Layer) return parent;\n }\n return null;\n },\n getParent: function() {\n return this._parent;\n },\n setParent: function(item) {\n return item.addChild(this);\n },\n _getOwner: \"#getParent\",\n getChildren: function() {\n return this._children;\n },\n setChildren: function(items) {\n this.removeChildren();\n this.addChildren(items);\n },\n getFirstChild: function() {\n return this._children && this._children[0] || null;\n },\n getLastChild: function() {\n return this._children && this._children[this._children.length - 1] || null;\n },\n getNextSibling: function() {\n var owner = this._getOwner();\n return owner && owner._children[this._index + 1] || null;\n },\n getPreviousSibling: function() {\n var owner = this._getOwner();\n return owner && owner._children[this._index - 1] || null;\n },\n getIndex: function() {\n return this._index;\n },\n equals: function(item) {\n return item === this || item && this._class === item._class && this._style.equals(item._style) && this._matrix.equals(item._matrix) && this._locked === item._locked && this._visible === item._visible && this._blendMode === item._blendMode && this._opacity === item._opacity && this._clipMask === item._clipMask && this._guide === item._guide && this._equals(item) || false;\n },\n _equals: function(item) {\n return Base.equals(this._children, item._children);\n },\n clone: function(options) {\n var copy = new this.constructor(Item.NO_INSERT), children = this._children, insert = Base.pick(options ? options.insert : undefined, options === undefined || options === true), deep = Base.pick(options ? options.deep : undefined, true);\n if (children) copy.copyAttributes(this);\n if (!children || deep) copy.copyContent(this);\n if (!children) copy.copyAttributes(this);\n if (insert) copy.insertAbove(this);\n var name = this._name, parent = this._parent;\n if (name && parent) {\n var children = parent._children, orig = name, i = 1;\n while(children[name])name = orig + \" \" + i++;\n if (name !== orig) copy.setName(name);\n }\n return copy;\n },\n copyContent: function(source) {\n var children = source._children;\n for(var i = 0, l = children && children.length; i < l; i++)this.addChild(children[i].clone(false), true);\n },\n copyAttributes: function(source, excludeMatrix) {\n this.setStyle(source._style);\n var keys = [\n \"_locked\",\n \"_visible\",\n \"_blendMode\",\n \"_opacity\",\n \"_clipMask\",\n \"_guide\"\n ];\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i];\n if (source.hasOwnProperty(key)) this[key] = source[key];\n }\n if (!excludeMatrix) this._matrix.set(source._matrix, true);\n this.setApplyMatrix(source._applyMatrix);\n this.setPivot(source._pivot);\n this.setSelection(source._selection);\n var data = source._data, name = source._name;\n this._data = data ? Base.clone(data) : null;\n if (name) this.setName(name);\n },\n rasterize: function(arg0, arg1) {\n var resolution, insert, raster;\n if (Base.isPlainObject(arg0)) {\n resolution = arg0.resolution;\n insert = arg0.insert;\n raster = arg0.raster;\n } else {\n resolution = arg0;\n insert = arg1;\n }\n if (!raster) raster = new Raster(Item.NO_INSERT);\n var bounds = this.getStrokeBounds(), scale = (resolution || this.getView().getResolution()) / 72, topLeft = bounds.getTopLeft().floor(), bottomRight = bounds.getBottomRight().ceil(), boundsSize = new Size(bottomRight.subtract(topLeft)), rasterSize = boundsSize.multiply(scale);\n raster.setSize(rasterSize, true);\n if (!rasterSize.isZero()) {\n var ctx = raster.getContext(true), matrix = new Matrix().scale(scale).translate(topLeft.negate());\n ctx.save();\n matrix.applyToContext(ctx);\n this.draw(ctx, new Base({\n matrices: [\n matrix\n ]\n }));\n ctx.restore();\n }\n raster._matrix.set(new Matrix().translate(topLeft.add(boundsSize.divide(2))).scale(1 / scale));\n if (insert === undefined || insert) raster.insertAbove(this);\n return raster;\n },\n contains: function() {\n var matrix = this._matrix;\n return matrix.isInvertible() && !!this._contains(matrix._inverseTransform(Point.read(arguments)));\n },\n _contains: function(point) {\n var children = this._children;\n if (children) {\n for(var i = children.length - 1; i >= 0; i--){\n if (children[i].contains(point)) return true;\n }\n return false;\n }\n return point.isInside(this.getInternalBounds());\n },\n isInside: function() {\n return Rectangle.read(arguments).contains(this.getBounds());\n },\n _asPathItem: function() {\n return new Path.Rectangle({\n rectangle: this.getInternalBounds(),\n matrix: this._matrix,\n insert: false\n });\n },\n intersects: function(item, _matrix) {\n if (!(item instanceof Item)) return false;\n return this._asPathItem().getIntersections(item._asPathItem(), null, _matrix, true).length > 0;\n }\n }, new function() {\n function hitTest() {\n var args = arguments;\n return this._hitTest(Point.read(args), HitResult.getOptions(args));\n }\n function hitTestAll() {\n var args = arguments, point = Point.read(args), options = HitResult.getOptions(args), all = [];\n this._hitTest(point, new Base({\n all: all\n }, options));\n return all;\n }\n function hitTestChildren(point, options, viewMatrix, _exclude) {\n var children = this._children;\n if (children) for(var i = children.length - 1; i >= 0; i--){\n var child = children[i];\n var res = child !== _exclude && child._hitTest(point, options, viewMatrix);\n if (res && !options.all) return res;\n }\n return null;\n }\n Project.inject({\n hitTest: hitTest,\n hitTestAll: hitTestAll,\n _hitTest: hitTestChildren\n });\n return {\n hitTest: hitTest,\n hitTestAll: hitTestAll,\n _hitTestChildren: hitTestChildren\n };\n }, {\n _hitTest: function(point, options, parentViewMatrix) {\n if (this._locked || !this._visible || this._guide && !options.guides || this.isEmpty()) return null;\n var matrix = this._matrix, viewMatrix = parentViewMatrix ? parentViewMatrix.appended(matrix) : this.getGlobalMatrix().prepend(this.getView()._matrix), tolerance = Math.max(options.tolerance, 1e-12), tolerancePadding = options._tolerancePadding = new Size(Path._getStrokePadding(tolerance, matrix._shiftless().invert()));\n point = matrix._inverseTransform(point);\n if (!point || !this._children && !this.getBounds({\n internal: true,\n stroke: true,\n handle: true\n }).expand(tolerancePadding.multiply(2))._containsPoint(point)) return null;\n var checkSelf = !(options.guides && !this._guide || options.selected && !this.isSelected() || options.type && options.type !== Base.hyphenate(this._class) || options.class && !(this instanceof options.class)), match = options.match, that = this, bounds, res;\n function filter(hit) {\n if (hit && match && !match(hit)) hit = null;\n if (hit && options.all) options.all.push(hit);\n return hit;\n }\n function checkPoint(type, part) {\n var pt = part ? bounds[\"get\" + part]() : that.getPosition();\n if (point.subtract(pt).divide(tolerancePadding).length <= 1) return new HitResult(type, that, {\n name: part ? Base.hyphenate(part) : type,\n point: pt\n });\n }\n var checkPosition = options.position, checkCenter = options.center, checkBounds = options.bounds;\n if (checkSelf && this._parent && (checkPosition || checkCenter || checkBounds)) {\n if (checkCenter || checkBounds) bounds = this.getInternalBounds();\n res = checkPosition && checkPoint(\"position\") || checkCenter && checkPoint(\"center\", \"Center\");\n if (!res && checkBounds) {\n var points = [\n \"TopLeft\",\n \"TopRight\",\n \"BottomLeft\",\n \"BottomRight\",\n \"LeftCenter\",\n \"TopCenter\",\n \"RightCenter\",\n \"BottomCenter\"\n ];\n for(var i = 0; i < 8 && !res; i++)res = checkPoint(\"bounds\", points[i]);\n }\n res = filter(res);\n }\n if (!res) res = this._hitTestChildren(point, options, viewMatrix) || checkSelf && filter(this._hitTestSelf(point, options, viewMatrix, this.getStrokeScaling() ? null : viewMatrix._shiftless().invert())) || null;\n if (res && res.point) res.point = matrix.transform(res.point);\n return res;\n },\n _hitTestSelf: function(point, options) {\n if (options.fill && this.hasFill() && this._contains(point)) return new HitResult(\"fill\", this);\n },\n matches: function(name, compare) {\n function matchObject(obj1, obj2) {\n for(var i in obj1)if (obj1.hasOwnProperty(i)) {\n var val1 = obj1[i], val2 = obj2[i];\n if (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n if (!matchObject(val1, val2)) return false;\n } else if (!Base.equals(val1, val2)) return false;\n }\n return true;\n }\n var type = typeof name;\n if (type === \"object\") {\n for(var key in name){\n if (name.hasOwnProperty(key) && !this.matches(key, name[key])) return false;\n }\n return true;\n } else if (type === \"function\") return name(this);\n else if (name === \"match\") return compare(this);\n else {\n var value = /^(empty|editable)$/.test(name) ? this[\"is\" + Base.capitalize(name)]() : name === \"type\" ? Base.hyphenate(this._class) : this[name];\n if (name === \"class\") {\n if (typeof compare === \"function\") return this instanceof compare;\n value = this._class;\n }\n if (typeof compare === \"function\") return !!compare(value);\n else if (compare) {\n if (compare.test) return compare.test(value);\n else if (Base.isPlainObject(compare)) return matchObject(compare, value);\n }\n return Base.equals(value, compare);\n }\n },\n getItems: function(options) {\n return Item._getItems(this, options, this._matrix);\n },\n getItem: function(options) {\n return Item._getItems(this, options, this._matrix, null, true)[0] || null;\n },\n statics: {\n _getItems: function _getItems(item, options, matrix, param, firstOnly) {\n if (!param) {\n var obj = typeof options === \"object\" && options, overlapping = obj && obj.overlapping, inside = obj && obj.inside, bounds = overlapping || inside, rect = bounds && Rectangle.read([\n bounds\n ]);\n param = {\n items: [],\n recursive: obj && obj.recursive !== false,\n inside: !!inside,\n overlapping: !!overlapping,\n rect: rect,\n path: overlapping && new Path.Rectangle({\n rectangle: rect,\n insert: false\n })\n };\n if (obj) options = Base.filter({}, options, {\n recursive: true,\n inside: true,\n overlapping: true\n });\n }\n var children = item._children, items = param.items, rect = param.rect;\n matrix = rect && (matrix || new Matrix());\n for(var i = 0, l = children && children.length; i < l; i++){\n var child = children[i], childMatrix = matrix && matrix.appended(child._matrix), add = true;\n if (rect) {\n var bounds = child.getBounds(childMatrix);\n if (!rect.intersects(bounds)) continue;\n if (!(rect.contains(bounds) || param.overlapping && (bounds.contains(rect) || param.path.intersects(child, childMatrix)))) add = false;\n }\n if (add && child.matches(options)) {\n items.push(child);\n if (firstOnly) break;\n }\n if (param.recursive !== false) _getItems(child, options, childMatrix, param, firstOnly);\n if (firstOnly && items.length > 0) break;\n }\n return items;\n }\n }\n }, {\n importJSON: function(json) {\n var res = Base.importJSON(json, this);\n return res !== this ? this.addChild(res) : res;\n },\n addChild: function(item) {\n return this.insertChild(undefined, item);\n },\n insertChild: function(index, item) {\n var res = item ? this.insertChildren(index, [\n item\n ]) : null;\n return res && res[0];\n },\n addChildren: function(items) {\n return this.insertChildren(this._children.length, items);\n },\n insertChildren: function(index, items) {\n var children = this._children;\n if (children && items && items.length > 0) {\n items = Base.slice(items);\n var inserted = {};\n for(var i = items.length - 1; i >= 0; i--){\n var item = items[i], id = item && item._id;\n if (!item || inserted[id]) items.splice(i, 1);\n else {\n item._remove(false, true);\n inserted[id] = true;\n }\n }\n Base.splice(children, items, index, 0);\n var project = this._project, notifySelf = project._changes;\n for(var i = 0, l = items.length; i < l; i++){\n var item = items[i], name = item._name;\n item._parent = this;\n item._setProject(project, true);\n if (name) item.setName(name);\n if (notifySelf) item._changed(5);\n }\n this._changed(11);\n } else items = null;\n return items;\n },\n _insertItem: \"#insertChild\",\n _insertAt: function(item, offset) {\n var owner = item && item._getOwner(), res = item !== this && owner ? this : null;\n if (res) {\n res._remove(false, true);\n owner._insertItem(item._index + offset, res);\n }\n return res;\n },\n insertAbove: function(item) {\n return this._insertAt(item, 1);\n },\n insertBelow: function(item) {\n return this._insertAt(item, 0);\n },\n sendToBack: function() {\n var owner = this._getOwner();\n return owner ? owner._insertItem(0, this) : null;\n },\n bringToFront: function() {\n var owner = this._getOwner();\n return owner ? owner._insertItem(undefined, this) : null;\n },\n appendTop: \"#addChild\",\n appendBottom: function(item) {\n return this.insertChild(0, item);\n },\n moveAbove: \"#insertAbove\",\n moveBelow: \"#insertBelow\",\n addTo: function(owner) {\n return owner._insertItem(undefined, this);\n },\n copyTo: function(owner) {\n return this.clone(false).addTo(owner);\n },\n reduce: function(options) {\n var children = this._children;\n if (children && children.length === 1) {\n var child = children[0].reduce(options);\n if (this._parent) {\n child.insertAbove(this);\n this.remove();\n } else child.remove();\n return child;\n }\n return this;\n },\n _removeNamed: function() {\n var owner = this._getOwner();\n if (owner) {\n var children = owner._children, namedChildren = owner._namedChildren, name = this._name, namedArray = namedChildren[name], index = namedArray ? namedArray.indexOf(this) : -1;\n if (index !== -1) {\n if (children[name] == this) delete children[name];\n namedArray.splice(index, 1);\n if (namedArray.length) children[name] = namedArray[0];\n else delete namedChildren[name];\n }\n }\n },\n _remove: function(notifySelf, notifyParent) {\n var owner = this._getOwner(), project = this._project, index = this._index;\n if (this._style) this._style._dispose();\n if (owner) {\n if (this._name) this._removeNamed();\n if (index != null) {\n if (project._activeLayer === this) project._activeLayer = this.getNextSibling() || this.getPreviousSibling();\n Base.splice(owner._children, null, index, 1);\n }\n this._installEvents(false);\n if (notifySelf && project._changes) this._changed(5);\n if (notifyParent) owner._changed(11, this);\n this._parent = null;\n return true;\n }\n return false;\n },\n remove: function() {\n return this._remove(true, true);\n },\n replaceWith: function(item) {\n var ok = item && item.insertBelow(this);\n if (ok) this.remove();\n return ok;\n },\n removeChildren: function(start, end) {\n if (!this._children) return null;\n start = start || 0;\n end = Base.pick(end, this._children.length);\n var removed = Base.splice(this._children, null, start, end - start);\n for(var i = removed.length - 1; i >= 0; i--)removed[i]._remove(true, false);\n if (removed.length > 0) this._changed(11);\n return removed;\n },\n clear: \"#removeChildren\",\n reverseChildren: function() {\n if (this._children) {\n this._children.reverse();\n for(var i = 0, l = this._children.length; i < l; i++)this._children[i]._index = i;\n this._changed(11);\n }\n },\n isEmpty: function(recursively) {\n var children = this._children;\n var numChildren = children ? children.length : 0;\n if (recursively) {\n for(var i = 0; i < numChildren; i++){\n if (!children[i].isEmpty(recursively)) return false;\n }\n return true;\n }\n return !numChildren;\n },\n isEditable: function() {\n var item = this;\n while(item){\n if (!item._visible || item._locked) return false;\n item = item._parent;\n }\n return true;\n },\n hasFill: function() {\n return this.getStyle().hasFill();\n },\n hasStroke: function() {\n return this.getStyle().hasStroke();\n },\n hasShadow: function() {\n return this.getStyle().hasShadow();\n },\n _getOrder: function(item) {\n function getList(item) {\n var list = [];\n do list.unshift(item);\n while (item = item._parent);\n return list;\n }\n var list1 = getList(this), list2 = getList(item);\n for(var i = 0, l = Math.min(list1.length, list2.length); i < l; i++){\n if (list1[i] != list2[i]) return list1[i]._index < list2[i]._index ? 1 : -1;\n }\n return 0;\n },\n hasChildren: function() {\n return this._children && this._children.length > 0;\n },\n isInserted: function() {\n return this._parent ? this._parent.isInserted() : false;\n },\n isAbove: function(item) {\n return this._getOrder(item) === -1;\n },\n isBelow: function(item) {\n return this._getOrder(item) === 1;\n },\n isParent: function(item) {\n return this._parent === item;\n },\n isChild: function(item) {\n return item && item._parent === this;\n },\n isDescendant: function(item) {\n var parent = this;\n while(parent = parent._parent){\n if (parent === item) return true;\n }\n return false;\n },\n isAncestor: function(item) {\n return item ? item.isDescendant(this) : false;\n },\n isSibling: function(item) {\n return this._parent === item._parent;\n },\n isGroupedWith: function(item) {\n var parent = this._parent;\n while(parent){\n if (parent._parent && /^(Group|Layer|CompoundPath)$/.test(parent._class) && item.isDescendant(parent)) return true;\n parent = parent._parent;\n }\n return false;\n }\n }, Base.each([\n \"rotate\",\n \"scale\",\n \"shear\",\n \"skew\"\n ], function(key) {\n var rotate = key === \"rotate\";\n this[key] = function() {\n var args = arguments, value = (rotate ? Base : Point).read(args), center = Point.read(args, 0, {\n readNull: true\n });\n return this.transform(new Matrix()[key](value, center || this.getPosition(true)));\n };\n }, {\n translate: function() {\n var mx = new Matrix();\n return this.transform(mx.translate.apply(mx, arguments));\n },\n transform: function(matrix, _applyRecursively, _setApplyMatrix) {\n var _matrix = this._matrix, transformMatrix = matrix && !matrix.isIdentity(), applyMatrix = _setApplyMatrix && this._canApplyMatrix || this._applyMatrix && (transformMatrix || !_matrix.isIdentity() || _applyRecursively && this._children);\n if (!transformMatrix && !applyMatrix) return this;\n if (transformMatrix) {\n if (!matrix.isInvertible() && _matrix.isInvertible()) _matrix._backup = _matrix.getValues();\n _matrix.prepend(matrix, true);\n var style = this._style, fillColor = style.getFillColor(true), strokeColor = style.getStrokeColor(true);\n if (fillColor) fillColor.transform(matrix);\n if (strokeColor) strokeColor.transform(matrix);\n }\n if (applyMatrix && (applyMatrix = this._transformContent(_matrix, _applyRecursively, _setApplyMatrix))) {\n var pivot = this._pivot;\n if (pivot) _matrix._transformPoint(pivot, pivot, true);\n _matrix.reset(true);\n if (_setApplyMatrix && this._canApplyMatrix) this._applyMatrix = true;\n }\n var bounds = this._bounds, position = this._position;\n if (transformMatrix || applyMatrix) this._changed(25);\n var decomp = transformMatrix && bounds && matrix.decompose();\n if (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n for(var key in bounds){\n var cache = bounds[key];\n if (cache.nonscaling) delete bounds[key];\n else if (applyMatrix || !cache.internal) {\n var rect = cache.rect;\n matrix._transformBounds(rect, rect);\n }\n }\n this._bounds = bounds;\n var cached = bounds[this._getBoundsCacheKey(this._boundsOptions || {})];\n if (cached) this._position = this._getPositionFromBounds(cached.rect);\n } else if (transformMatrix && position && this._pivot) this._position = matrix._transformPoint(position, position);\n return this;\n },\n _transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n var children = this._children;\n if (children) {\n for(var i = 0, l = children.length; i < l; i++)children[i].transform(matrix, applyRecursively, setApplyMatrix);\n return true;\n }\n },\n globalToLocal: function() {\n return this.getGlobalMatrix(true)._inverseTransform(Point.read(arguments));\n },\n localToGlobal: function() {\n return this.getGlobalMatrix(true)._transformPoint(Point.read(arguments));\n },\n parentToLocal: function() {\n return this._matrix._inverseTransform(Point.read(arguments));\n },\n localToParent: function() {\n return this._matrix._transformPoint(Point.read(arguments));\n },\n fitBounds: function(rectangle, fill) {\n rectangle = Rectangle.read(arguments);\n var bounds = this.getBounds(), itemRatio = bounds.height / bounds.width, rectRatio = rectangle.height / rectangle.width, scale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio) ? rectangle.width / bounds.width : rectangle.height / bounds.height, newBounds = new Rectangle(new Point(), new Size(bounds.width * scale, bounds.height * scale));\n newBounds.setCenter(rectangle.getCenter());\n this.setBounds(newBounds);\n }\n }), {\n _setStyles: function(ctx, param, viewMatrix) {\n var style = this._style, matrix = this._matrix;\n if (style.hasFill()) ctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n if (style.hasStroke()) {\n ctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n ctx.lineWidth = style.getStrokeWidth();\n var strokeJoin = style.getStrokeJoin(), strokeCap = style.getStrokeCap(), miterLimit = style.getMiterLimit();\n if (strokeJoin) ctx.lineJoin = strokeJoin;\n if (strokeCap) ctx.lineCap = strokeCap;\n if (miterLimit) ctx.miterLimit = miterLimit;\n if (paper.support.nativeDash) {\n var dashArray = style.getDashArray(), dashOffset = style.getDashOffset();\n if (dashArray && dashArray.length) {\n if (\"setLineDash\" in ctx) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashOffset;\n } else {\n ctx.mozDash = dashArray;\n ctx.mozDashOffset = dashOffset;\n }\n }\n }\n }\n if (style.hasShadow()) {\n var pixelRatio = param.pixelRatio || 1, mx = viewMatrix._shiftless().prepend(new Matrix().scale(pixelRatio, pixelRatio)), blur = mx.transform(new Point(style.getShadowBlur(), 0)), offset = mx.transform(this.getShadowOffset());\n ctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n ctx.shadowBlur = blur.getLength();\n ctx.shadowOffsetX = offset.x;\n ctx.shadowOffsetY = offset.y;\n }\n },\n draw: function(ctx, param, parentStrokeMatrix) {\n var updateVersion = this._updateVersion = this._project._updateVersion;\n if (!this._visible || this._opacity === 0) return;\n var matrices = param.matrices, viewMatrix = param.viewMatrix, matrix = this._matrix, globalMatrix = matrices[matrices.length - 1].appended(matrix);\n if (!globalMatrix.isInvertible()) return;\n viewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix) : globalMatrix;\n matrices.push(globalMatrix);\n if (param.updateMatrix) this._globalMatrix = globalMatrix;\n var blendMode = this._blendMode, opacity = Numerical.clamp(this._opacity, 0, 1), normalBlend = blendMode === \"normal\", nativeBlend = BlendMode.nativeModes[blendMode], direct = normalBlend && opacity === 1 || param.dontStart || param.clip || (nativeBlend || normalBlend && opacity < 1) && this._canComposite(), pixelRatio = param.pixelRatio || 1, mainCtx, itemOffset, prevOffset;\n if (!direct) {\n var bounds = this.getStrokeBounds(viewMatrix);\n if (!bounds.width || !bounds.height) {\n matrices.pop();\n return;\n }\n prevOffset = param.offset;\n itemOffset = param.offset = bounds.getTopLeft().floor();\n mainCtx = ctx;\n ctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1).multiply(pixelRatio));\n if (pixelRatio !== 1) ctx.scale(pixelRatio, pixelRatio);\n }\n ctx.save();\n var strokeMatrix = parentStrokeMatrix ? parentStrokeMatrix.appended(matrix) : this._canScaleStroke && !this.getStrokeScaling(true) && viewMatrix, clip = !direct && param.clipItem, transform = !strokeMatrix || clip;\n if (direct) {\n ctx.globalAlpha = opacity;\n if (nativeBlend) ctx.globalCompositeOperation = blendMode;\n } else if (transform) ctx.translate(-itemOffset.x, -itemOffset.y);\n if (transform) (direct ? matrix : viewMatrix).applyToContext(ctx);\n if (clip) param.clipItem.draw(ctx, param.extend({\n clip: true\n }));\n if (strokeMatrix) {\n ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n var offset = param.offset;\n if (offset) ctx.translate(-offset.x, -offset.y);\n }\n this._draw(ctx, param, viewMatrix, strokeMatrix);\n ctx.restore();\n matrices.pop();\n if (param.clip && !param.dontFinish) ctx.clip(this.getFillRule());\n if (!direct) {\n BlendMode.process(blendMode, ctx, mainCtx, opacity, itemOffset.subtract(prevOffset).multiply(pixelRatio));\n CanvasProvider.release(ctx);\n param.offset = prevOffset;\n }\n },\n _isUpdated: function(updateVersion) {\n var parent = this._parent;\n if (parent instanceof CompoundPath) return parent._isUpdated(updateVersion);\n var updated = this._updateVersion === updateVersion;\n if (!updated && parent && parent._visible && parent._isUpdated(updateVersion)) {\n this._updateVersion = updateVersion;\n updated = true;\n }\n return updated;\n },\n _drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n var selection = this._selection, itemSelected = selection & 1, boundsSelected = selection & 2 || itemSelected && this._selectBounds, positionSelected = selection & 4;\n if (!this._drawSelected) itemSelected = false;\n if ((itemSelected || boundsSelected || positionSelected) && this._isUpdated(updateVersion)) {\n var layer, color = this.getSelectedColor(true) || (layer = this.getLayer()) && layer.getSelectedColor(true), mx = matrix.appended(this.getGlobalMatrix(true)), half = size / 2;\n ctx.strokeStyle = ctx.fillStyle = color ? color.toCanvasStyle(ctx) : \"#009dec\";\n if (itemSelected) this._drawSelected(ctx, mx, selectionItems);\n if (positionSelected) {\n var pos = this.getPosition(true), parent = this._parent, point = parent ? parent.localToGlobal(pos) : pos, x = point.x, y = point.y;\n ctx.beginPath();\n ctx.arc(x, y, half, 0, Math.PI * 2, true);\n ctx.stroke();\n var deltas = [\n [\n 0,\n -1\n ],\n [\n 1,\n 0\n ],\n [\n 0,\n 1\n ],\n [\n -1,\n 0\n ]\n ], start = half, end = size + 1;\n for(var i = 0; i < 4; i++){\n var delta = deltas[i], dx = delta[0], dy = delta[1];\n ctx.moveTo(x + dx * start, y + dy * start);\n ctx.lineTo(x + dx * end, y + dy * end);\n ctx.stroke();\n }\n }\n if (boundsSelected) {\n var coords = mx._transformCorners(this.getInternalBounds());\n ctx.beginPath();\n for(var i = 0; i < 8; i++)ctx[!i ? \"moveTo\" : \"lineTo\"](coords[i], coords[++i]);\n ctx.closePath();\n ctx.stroke();\n for(var i = 0; i < 8; i++)ctx.fillRect(coords[i] - half, coords[++i] - half, size, size);\n }\n }\n },\n _canComposite: function() {\n return false;\n }\n }, Base.each([\n \"down\",\n \"drag\",\n \"up\",\n \"move\"\n ], function(key) {\n this[\"removeOn\" + Base.capitalize(key)] = function() {\n var hash = {};\n hash[key] = true;\n return this.removeOn(hash);\n };\n }, {\n removeOn: function(obj) {\n for(var name in obj)if (obj[name]) {\n var key = \"mouse\" + name, project = this._project, sets = project._removeSets = project._removeSets || {};\n sets[key] = sets[key] || {};\n sets[key][this._id] = this;\n }\n return this;\n }\n }), {\n tween: function(from, to, options) {\n if (!options) {\n options = to;\n to = from;\n from = null;\n if (!options) {\n options = to;\n to = null;\n }\n }\n var easing = options && options.easing, start = options && options.start, duration = options != null && (typeof options === \"number\" ? options : options.duration), tween = new Tween(this, from, to, duration, easing, start);\n function onFrame(event) {\n tween._handleFrame(event.time * 1000);\n if (!tween.running) this.off(\"frame\", onFrame);\n }\n if (duration) this.on(\"frame\", onFrame);\n return tween;\n },\n tweenTo: function(to, options) {\n return this.tween(null, to, options);\n },\n tweenFrom: function(from, options) {\n return this.tween(from, null, options);\n }\n });\n var Group = Item.extend({\n _class: \"Group\",\n _selectBounds: false,\n _selectChildren: true,\n _serializeFields: {\n children: []\n },\n initialize: function Group(arg) {\n this._children = [];\n this._namedChildren = {};\n if (!this._initialize(arg)) this.addChildren(Array.isArray(arg) ? arg : arguments);\n },\n _changed: function _changed(flags) {\n _changed.base.call(this, flags);\n if (flags & 2050) this._clipItem = undefined;\n },\n _getClipItem: function() {\n var clipItem = this._clipItem;\n if (clipItem === undefined) {\n clipItem = null;\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)if (children[i]._clipMask) {\n clipItem = children[i];\n break;\n }\n this._clipItem = clipItem;\n }\n return clipItem;\n },\n isClipped: function() {\n return !!this._getClipItem();\n },\n setClipped: function(clipped) {\n var child = this.getFirstChild();\n if (child) child.setClipMask(clipped);\n },\n _getBounds: function _getBounds(matrix, options) {\n var clipItem = this._getClipItem();\n return clipItem ? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix), Base.set({}, options, {\n stroke: false\n })) : _getBounds.base.call(this, matrix, options);\n },\n _hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n var clipItem = this._getClipItem();\n return (!clipItem || clipItem.contains(point)) && _hitTestChildren.base.call(this, point, options, viewMatrix, clipItem);\n },\n _draw: function(ctx, param) {\n var clip = param.clip, clipItem = !clip && this._getClipItem();\n param = param.extend({\n clipItem: clipItem,\n clip: false\n });\n if (clip) {\n ctx.beginPath();\n param.dontStart = param.dontFinish = true;\n } else if (clipItem) clipItem.draw(ctx, param.extend({\n clip: true\n }));\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n var item = children[i];\n if (item !== clipItem) item.draw(ctx, param);\n }\n }\n });\n var Layer = Group.extend({\n _class: \"Layer\",\n initialize: function Layer() {\n Group.apply(this, arguments);\n },\n _getOwner: function() {\n return this._parent || this._index != null && this._project;\n },\n isInserted: function isInserted() {\n return this._parent ? isInserted.base.call(this) : this._index != null;\n },\n activate: function() {\n this._project._activeLayer = this;\n },\n _hitTestSelf: function() {}\n });\n var Shape = Item.extend({\n _class: \"Shape\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _canScaleStroke: true,\n _serializeFields: {\n type: null,\n size: null,\n radius: null\n },\n initialize: function Shape(props, point) {\n this._initialize(props, point);\n },\n _equals: function(item) {\n return this._type === item._type && this._size.equals(item._size) && Base.equals(this._radius, item._radius);\n },\n copyContent: function(source) {\n this.setType(source._type);\n this.setSize(source._size);\n this.setRadius(source._radius);\n },\n getType: function() {\n return this._type;\n },\n setType: function(type) {\n this._type = type;\n },\n getShape: \"#getType\",\n setShape: \"#setType\",\n getSize: function() {\n var size = this._size;\n return new LinkedSize(size.width, size.height, this, \"setSize\");\n },\n setSize: function() {\n var size = Size.read(arguments);\n if (!this._size) this._size = size.clone();\n else if (!this._size.equals(size)) {\n var type = this._type, width = size.width, height = size.height;\n if (type === \"rectangle\") this._radius.set(Size.min(this._radius, size.divide(2).abs()));\n else if (type === \"circle\") {\n width = height = (width + height) / 2;\n this._radius = width / 2;\n } else if (type === \"ellipse\") this._radius._set(width / 2, height / 2);\n this._size._set(width, height);\n this._changed(9);\n }\n },\n getRadius: function() {\n var rad = this._radius;\n return this._type === \"circle\" ? rad : new LinkedSize(rad.width, rad.height, this, \"setRadius\");\n },\n setRadius: function(radius) {\n var type = this._type;\n if (type === \"circle\") {\n if (radius === this._radius) return;\n var size = radius * 2;\n this._radius = radius;\n this._size._set(size, size);\n } else {\n radius = Size.read(arguments);\n if (!this._radius) this._radius = radius.clone();\n else {\n if (this._radius.equals(radius)) return;\n this._radius.set(radius);\n if (type === \"rectangle\") {\n var size = Size.max(this._size, radius.multiply(2));\n this._size.set(size);\n } else if (type === \"ellipse\") this._size._set(radius.width * 2, radius.height * 2);\n }\n }\n this._changed(9);\n },\n isEmpty: function() {\n return false;\n },\n toPath: function(insert) {\n var path = new Path[Base.capitalize(this._type)]({\n center: new Point(),\n size: this._size,\n radius: this._radius,\n insert: false\n });\n path.copyAttributes(this);\n if (paper.settings.applyMatrix) path.setApplyMatrix(true);\n if (insert === undefined || insert) path.insertAbove(this);\n return path;\n },\n toShape: \"#clone\",\n _asPathItem: function() {\n return this.toPath(false);\n },\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var style = this._style, hasFill = style.hasFill(), hasStroke = style.hasStroke(), dontPaint = param.dontFinish || param.clip, untransformed = !strokeMatrix;\n if (hasFill || hasStroke || dontPaint) {\n var type = this._type, radius = this._radius, isCircle = type === \"circle\";\n if (!param.dontStart) ctx.beginPath();\n if (untransformed && isCircle) ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n else {\n var rx = isCircle ? radius : radius.width, ry = isCircle ? radius : radius.height, size = this._size, width = size.width, height = size.height;\n if (untransformed && type === \"rectangle\" && rx === 0 && ry === 0) ctx.rect(-width / 2, -height / 2, width, height);\n else {\n var x = width / 2, y = height / 2, kappa = 0.44771525016920644, cx = rx * kappa, cy = ry * kappa, c = [\n -x,\n -y + ry,\n -x,\n -y + cy,\n -x + cx,\n -y,\n -x + rx,\n -y,\n x - rx,\n -y,\n x - cx,\n -y,\n x,\n -y + cy,\n x,\n -y + ry,\n x,\n y - ry,\n x,\n y - cy,\n x - cx,\n y,\n x - rx,\n y,\n -x + rx,\n y,\n -x + cx,\n y,\n -x,\n y - cy,\n -x,\n y - ry\n ];\n if (strokeMatrix) strokeMatrix.transform(c, c, 32);\n ctx.moveTo(c[0], c[1]);\n ctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n if (x !== rx) ctx.lineTo(c[8], c[9]);\n ctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n if (y !== ry) ctx.lineTo(c[16], c[17]);\n ctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n if (x !== rx) ctx.lineTo(c[24], c[25]);\n ctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n }\n }\n ctx.closePath();\n }\n if (!dontPaint && (hasFill || hasStroke)) {\n this._setStyles(ctx, param, viewMatrix);\n if (hasFill) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) ctx.stroke();\n }\n },\n _canComposite: function() {\n return !(this.hasFill() && this.hasStroke());\n },\n _getBounds: function(matrix, options) {\n var rect = new Rectangle(this._size).setCenter(0, 0), style = this._style, strokeWidth = options.stroke && style.hasStroke() && style.getStrokeWidth();\n if (matrix) rect = matrix._transformBounds(rect);\n return strokeWidth ? rect.expand(Path._getStrokePadding(strokeWidth, this._getStrokeMatrix(matrix, options))) : rect;\n }\n }, new function() {\n function getCornerCenter(that, point, expand) {\n var radius = that._radius;\n if (!radius.isZero()) {\n var halfSize = that._size.divide(2);\n for(var q = 1; q <= 4; q++){\n var dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1), corner = dir.multiply(halfSize), center = corner.subtract(dir.multiply(radius)), rect = new Rectangle(expand ? corner.add(dir.multiply(expand)) : corner, center);\n if (rect.contains(point)) return {\n point: center,\n quadrant: q\n };\n }\n }\n }\n function isOnEllipseStroke(point, radius, padding, quadrant) {\n var vector = point.divide(radius);\n return (!quadrant || vector.isInQuadrant(quadrant)) && vector.subtract(vector.normalize()).multiply(radius).divide(padding).length <= 1;\n }\n return {\n _contains: function _contains(point) {\n if (this._type === \"rectangle\") {\n var center = getCornerCenter(this, point);\n return center ? point.subtract(center.point).divide(this._radius).getLength() <= 1 : _contains.base.call(this, point);\n } else return point.divide(this.size).getLength() <= 0.5;\n },\n _hitTestSelf: function _hitTestSelf(point, options, viewMatrix, strokeMatrix) {\n var hit = false, style = this._style, hitStroke = options.stroke && style.hasStroke(), hitFill = options.fill && style.hasFill();\n if (hitStroke || hitFill) {\n var type = this._type, radius = this._radius, strokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0, strokePadding = options._tolerancePadding.add(Path._getStrokePadding(strokeRadius, !style.getStrokeScaling() && strokeMatrix));\n if (type === \"rectangle\") {\n var padding = strokePadding.multiply(2), center = getCornerCenter(this, point, padding);\n if (center) hit = isOnEllipseStroke(point.subtract(center.point), radius, strokePadding, center.quadrant);\n else {\n var rect = new Rectangle(this._size).setCenter(0, 0), outer = rect.expand(padding), inner = rect.expand(padding.negate());\n hit = outer._containsPoint(point) && !inner._containsPoint(point);\n }\n } else hit = isOnEllipseStroke(point, radius, strokePadding);\n }\n return hit ? new HitResult(hitStroke ? \"stroke\" : \"fill\", this) : _hitTestSelf.base.apply(this, arguments);\n }\n };\n }, {\n statics: new function() {\n function createShape(type, point, size, radius, args) {\n var item = Base.create(Shape.prototype);\n item._type = type;\n item._size = size;\n item._radius = radius;\n item._initialize(Base.getNamed(args), point);\n return item;\n }\n return {\n Circle: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), radius = Base.readNamed(args, \"radius\");\n return createShape(\"circle\", center, new Size(radius * 2), radius, args);\n },\n Rectangle: function() {\n var args = arguments, rect = Rectangle.readNamed(args, \"rectangle\"), radius = Size.min(Size.readNamed(args, \"radius\"), rect.getSize(true).divide(2));\n return createShape(\"rectangle\", rect.getCenter(true), rect.getSize(true), radius, args);\n },\n Ellipse: function() {\n var args = arguments, ellipse = Shape._readEllipse(args), radius = ellipse.radius;\n return createShape(\"ellipse\", ellipse.center, radius.multiply(2), radius, args);\n },\n _readEllipse: function(args) {\n var center, radius;\n if (Base.hasNamed(args, \"radius\")) {\n center = Point.readNamed(args, \"center\");\n radius = Size.readNamed(args, \"radius\");\n } else {\n var rect = Rectangle.readNamed(args, \"rectangle\");\n center = rect.getCenter(true);\n radius = rect.getSize(true).divide(2);\n }\n return {\n center: center,\n radius: radius\n };\n }\n };\n }\n });\n var Raster = Item.extend({\n _class: \"Raster\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _boundsOptions: {\n stroke: false,\n handle: false\n },\n _serializeFields: {\n crossOrigin: null,\n source: null\n },\n _prioritize: [\n \"crossOrigin\"\n ],\n _smoothing: \"low\",\n beans: true,\n initialize: function Raster(source, position) {\n if (!this._initialize(source, position !== undefined && Point.read(arguments))) {\n var image, type = typeof source, object = type === \"string\" ? document.getElementById(source) : type === \"object\" ? source : null;\n if (object && object !== Item.NO_INSERT) {\n if (object.getContext || object.naturalHeight != null) image = object;\n else if (object) {\n var size = Size.read(arguments);\n if (!size.isZero()) image = CanvasProvider.getCanvas(size);\n }\n }\n if (image) this.setImage(image);\n else this.setSource(source);\n }\n if (!this._size) {\n this._size = new Size();\n this._loaded = false;\n }\n },\n _equals: function(item) {\n return this.getSource() === item.getSource();\n },\n copyContent: function(source) {\n var image = source._image, canvas = source._canvas;\n if (image) this._setImage(image);\n else if (canvas) {\n var copyCanvas = CanvasProvider.getCanvas(source._size);\n copyCanvas.getContext(\"2d\").drawImage(canvas, 0, 0);\n this._setImage(copyCanvas);\n }\n this._crossOrigin = source._crossOrigin;\n },\n getSize: function() {\n var size = this._size;\n return new LinkedSize(size ? size.width : 0, size ? size.height : 0, this, \"setSize\");\n },\n setSize: function(_size, _clear) {\n var size = Size.read(arguments);\n if (!size.equals(this._size)) {\n if (size.width > 0 && size.height > 0) {\n var element = !_clear && this.getElement();\n this._setImage(CanvasProvider.getCanvas(size));\n if (element) this.getContext(true).drawImage(element, 0, 0, size.width, size.height);\n } else {\n if (this._canvas) CanvasProvider.release(this._canvas);\n this._size = size.clone();\n }\n } else if (_clear) this.clear();\n },\n getWidth: function() {\n return this._size ? this._size.width : 0;\n },\n setWidth: function(width) {\n this.setSize(width, this.getHeight());\n },\n getHeight: function() {\n return this._size ? this._size.height : 0;\n },\n setHeight: function(height) {\n this.setSize(this.getWidth(), height);\n },\n getLoaded: function() {\n return this._loaded;\n },\n isEmpty: function() {\n var size = this._size;\n return !size || size.width === 0 && size.height === 0;\n },\n getResolution: function() {\n var matrix = this._matrix, orig = new Point(0, 0).transform(matrix), u = new Point(1, 0).transform(matrix).subtract(orig), v = new Point(0, 1).transform(matrix).subtract(orig);\n return new Size(72 / u.getLength(), 72 / v.getLength());\n },\n getPpi: \"#getResolution\",\n getImage: function() {\n return this._image;\n },\n setImage: function(image) {\n var that = this;\n function emit(event) {\n var view = that.getView(), type = event && event.type || \"load\";\n if (view && that.responds(type)) {\n paper = view._scope;\n that.emit(type, new Event(event));\n }\n }\n this._setImage(image);\n if (this._loaded) setTimeout(emit, 0);\n else if (image) DomEvent.add(image, {\n load: function(event) {\n that._setImage(image);\n emit(event);\n },\n error: emit\n });\n },\n _setImage: function(image) {\n if (this._canvas) CanvasProvider.release(this._canvas);\n if (image && image.getContext) {\n this._image = null;\n this._canvas = image;\n this._loaded = true;\n } else {\n this._image = image;\n this._canvas = null;\n this._loaded = !!(image && image.src && image.complete);\n }\n this._size = new Size(image ? image.naturalWidth || image.width : 0, image ? image.naturalHeight || image.height : 0);\n this._context = null;\n this._changed(1033);\n },\n getCanvas: function() {\n if (!this._canvas) {\n var ctx = CanvasProvider.getContext(this._size);\n try {\n if (this._image) ctx.drawImage(this._image, 0, 0);\n this._canvas = ctx.canvas;\n } catch (e) {\n CanvasProvider.release(ctx);\n }\n }\n return this._canvas;\n },\n setCanvas: \"#setImage\",\n getContext: function(_change) {\n if (!this._context) this._context = this.getCanvas().getContext(\"2d\");\n if (_change) {\n this._image = null;\n this._changed(1025);\n }\n return this._context;\n },\n setContext: function(context) {\n this._context = context;\n },\n getSource: function() {\n var image = this._image;\n return image && image.src || this.toDataURL();\n },\n setSource: function(src) {\n var image = new self1.Image(), crossOrigin = this._crossOrigin;\n if (crossOrigin) image.crossOrigin = crossOrigin;\n if (src) image.src = src;\n this.setImage(image);\n },\n getCrossOrigin: function() {\n var image = this._image;\n return image && image.crossOrigin || this._crossOrigin || \"\";\n },\n setCrossOrigin: function(crossOrigin) {\n this._crossOrigin = crossOrigin;\n var image = this._image;\n if (image) image.crossOrigin = crossOrigin;\n },\n getSmoothing: function() {\n return this._smoothing;\n },\n setSmoothing: function(smoothing) {\n this._smoothing = typeof smoothing === \"string\" ? smoothing : smoothing ? \"low\" : \"off\";\n this._changed(257);\n },\n getElement: function() {\n return this._canvas || this._loaded && this._image;\n }\n }, {\n beans: false,\n getSubCanvas: function() {\n var rect = Rectangle.read(arguments), ctx = CanvasProvider.getContext(rect.getSize());\n ctx.drawImage(this.getCanvas(), rect.x, rect.y, rect.width, rect.height, 0, 0, rect.width, rect.height);\n return ctx.canvas;\n },\n getSubRaster: function() {\n var rect = Rectangle.read(arguments), raster = new Raster(Item.NO_INSERT);\n raster._setImage(this.getSubCanvas(rect));\n raster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n raster._matrix.prepend(this._matrix);\n raster.insertAbove(this);\n return raster;\n },\n toDataURL: function() {\n var image = this._image, src = image && image.src;\n if (/^data:/.test(src)) return src;\n var canvas = this.getCanvas();\n return canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n },\n drawImage: function(image) {\n var point = Point.read(arguments, 1);\n this.getContext(true).drawImage(image, point.x, point.y);\n },\n getAverageColor: function(object) {\n var bounds, path;\n if (!object) bounds = this.getBounds();\n else if (object instanceof PathItem) {\n path = object;\n bounds = object.getBounds();\n } else if (typeof object === \"object\") {\n if (\"width\" in object) bounds = new Rectangle(object);\n else if (\"x\" in object) bounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n }\n if (!bounds) return null;\n var sampleSize = 32, width = Math.min(bounds.width, sampleSize), height = Math.min(bounds.height, sampleSize);\n var ctx = Raster._sampleContext;\n if (!ctx) ctx = Raster._sampleContext = CanvasProvider.getContext(new Size(sampleSize));\n else ctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n ctx.save();\n var matrix = new Matrix().scale(width / bounds.width, height / bounds.height).translate(-bounds.x, -bounds.y);\n matrix.applyToContext(ctx);\n if (path) path.draw(ctx, new Base({\n clip: true,\n matrices: [\n matrix\n ]\n }));\n this._matrix.applyToContext(ctx);\n var element = this.getElement(), size = this._size;\n if (element) ctx.drawImage(element, -size.width / 2, -size.height / 2);\n ctx.restore();\n var pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width), Math.ceil(height)).data, channels = [\n 0,\n 0,\n 0\n ], total = 0;\n for(var i = 0, l = pixels.length; i < l; i += 4){\n var alpha = pixels[i + 3];\n total += alpha;\n alpha /= 255;\n channels[0] += pixels[i] * alpha;\n channels[1] += pixels[i + 1] * alpha;\n channels[2] += pixels[i + 2] * alpha;\n }\n for(var i = 0; i < 3; i++)channels[i] /= total;\n return total ? Color.read(channels) : null;\n },\n getPixel: function() {\n var point = Point.read(arguments);\n var data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n return new Color(\"rgb\", [\n data[0] / 255,\n data[1] / 255,\n data[2] / 255\n ], data[3] / 255);\n },\n setPixel: function() {\n var args = arguments, point = Point.read(args), color = Color.read(args), components = color._convert(\"rgb\"), alpha = color._alpha, ctx = this.getContext(true), imageData = ctx.createImageData(1, 1), data = imageData.data;\n data[0] = components[0] * 255;\n data[1] = components[1] * 255;\n data[2] = components[2] * 255;\n data[3] = alpha != null ? alpha * 255 : 255;\n ctx.putImageData(imageData, point.x, point.y);\n },\n clear: function() {\n var size = this._size;\n this.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n },\n createImageData: function() {\n var size = Size.read(arguments);\n return this.getContext().createImageData(size.width, size.height);\n },\n getImageData: function() {\n var rect = Rectangle.read(arguments);\n if (rect.isEmpty()) rect = new Rectangle(this._size);\n return this.getContext().getImageData(rect.x, rect.y, rect.width, rect.height);\n },\n putImageData: function(data) {\n var point = Point.read(arguments, 1);\n this.getContext(true).putImageData(data, point.x, point.y);\n },\n setImageData: function(data) {\n this.setSize(data);\n this.getContext(true).putImageData(data, 0, 0);\n },\n _getBounds: function(matrix, options) {\n var rect = new Rectangle(this._size).setCenter(0, 0);\n return matrix ? matrix._transformBounds(rect) : rect;\n },\n _hitTestSelf: function(point) {\n if (this._contains(point)) {\n var that = this;\n return new HitResult(\"pixel\", that, {\n offset: point.add(that._size.divide(2)).round(),\n color: {\n get: function() {\n return that.getPixel(this.offset);\n }\n }\n });\n }\n },\n _draw: function(ctx, param, viewMatrix) {\n var element = this.getElement();\n if (element && element.width > 0 && element.height > 0) {\n ctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n this._setStyles(ctx, param, viewMatrix);\n var smoothing = this._smoothing, disabled = smoothing === \"off\";\n DomElement.setPrefixed(ctx, disabled ? \"imageSmoothingEnabled\" : \"imageSmoothingQuality\", disabled ? false : smoothing);\n ctx.drawImage(element, -this._size.width / 2, -this._size.height / 2);\n }\n },\n _canComposite: function() {\n return true;\n }\n });\n var SymbolItem = Item.extend({\n _class: \"SymbolItem\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _boundsOptions: {\n stroke: true\n },\n _serializeFields: {\n symbol: null\n },\n initialize: function SymbolItem(arg0, arg1) {\n if (!this._initialize(arg0, arg1 !== undefined && Point.read(arguments, 1))) this.setDefinition(arg0 instanceof SymbolDefinition ? arg0 : new SymbolDefinition(arg0));\n },\n _equals: function(item) {\n return this._definition === item._definition;\n },\n copyContent: function(source) {\n this.setDefinition(source._definition);\n },\n getDefinition: function() {\n return this._definition;\n },\n setDefinition: function(definition) {\n this._definition = definition;\n this._changed(9);\n },\n getSymbol: \"#getDefinition\",\n setSymbol: \"#setDefinition\",\n isEmpty: function() {\n return this._definition._item.isEmpty();\n },\n _getBounds: function(matrix, options) {\n var item = this._definition._item;\n return item._getCachedBounds(item._matrix.prepended(matrix), options);\n },\n _hitTestSelf: function(point, options, viewMatrix) {\n var opts = options.extend({\n all: false\n });\n var res = this._definition._item._hitTest(point, opts, viewMatrix);\n if (res) res.item = this;\n return res;\n },\n _draw: function(ctx, param) {\n this._definition._item.draw(ctx, param);\n }\n });\n var SymbolDefinition = Base.extend({\n _class: \"SymbolDefinition\",\n initialize: function SymbolDefinition(item, dontCenter) {\n this._id = UID.get();\n this.project = paper.project;\n if (item) this.setItem(item, dontCenter);\n },\n _serialize: function(options, dictionary) {\n return dictionary.add(this, function() {\n return Base.serialize([\n this._class,\n this._item\n ], options, false, dictionary);\n });\n },\n _changed: function(flags) {\n if (flags & 8) Item._clearBoundsCache(this);\n if (flags & 1) this.project._changed(flags);\n },\n getItem: function() {\n return this._item;\n },\n setItem: function(item, _dontCenter) {\n if (item._symbol) item = item.clone();\n if (this._item) this._item._symbol = null;\n this._item = item;\n item.remove();\n item.setSelected(false);\n if (!_dontCenter) item.setPosition(new Point());\n item._symbol = this;\n this._changed(9);\n },\n getDefinition: \"#getItem\",\n setDefinition: \"#setItem\",\n place: function(position) {\n return new SymbolItem(this, position);\n },\n clone: function() {\n return new SymbolDefinition(this._item.clone(false));\n },\n equals: function(symbol) {\n return symbol === this || symbol && this._item.equals(symbol._item) || false;\n }\n });\n var HitResult = Base.extend({\n _class: \"HitResult\",\n initialize: function HitResult(type, item, values) {\n this.type = type;\n this.item = item;\n if (values) this.inject(values);\n },\n statics: {\n getOptions: function(args) {\n var options = args && Base.read(args);\n return new Base({\n type: null,\n tolerance: paper.settings.hitTolerance,\n fill: !options,\n stroke: !options,\n segments: !options,\n handles: false,\n ends: false,\n position: false,\n center: false,\n bounds: false,\n guides: false,\n selected: false\n }, options);\n }\n }\n });\n var Segment = Base.extend({\n _class: \"Segment\",\n beans: true,\n _selection: 0,\n initialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n var count = arguments.length, point, handleIn, handleOut, selection;\n if (count > 0) {\n if (arg0 == null || typeof arg0 === \"object\") {\n if (count === 1 && arg0 && \"point\" in arg0) {\n point = arg0.point;\n handleIn = arg0.handleIn;\n handleOut = arg0.handleOut;\n selection = arg0.selection;\n } else {\n point = arg0;\n handleIn = arg1;\n handleOut = arg2;\n selection = arg3;\n }\n } else {\n point = [\n arg0,\n arg1\n ];\n handleIn = arg2 !== undefined ? [\n arg2,\n arg3\n ] : null;\n handleOut = arg4 !== undefined ? [\n arg4,\n arg5\n ] : null;\n }\n }\n new SegmentPoint(point, this, \"_point\");\n new SegmentPoint(handleIn, this, \"_handleIn\");\n new SegmentPoint(handleOut, this, \"_handleOut\");\n if (selection) this.setSelection(selection);\n },\n _serialize: function(options, dictionary) {\n var point = this._point, selection = this._selection, obj = selection || this.hasHandles() ? [\n point,\n this._handleIn,\n this._handleOut\n ] : point;\n if (selection) obj.push(selection);\n return Base.serialize(obj, options, true, dictionary);\n },\n _changed: function(point) {\n var path = this._path;\n if (!path) return;\n var curves = path._curves, index = this._index, curve;\n if (curves) {\n if ((!point || point === this._point || point === this._handleIn) && (curve = index > 0 ? curves[index - 1] : path._closed ? curves[curves.length - 1] : null)) curve._changed();\n if ((!point || point === this._point || point === this._handleOut) && (curve = curves[index])) curve._changed();\n }\n path._changed(41);\n },\n getPoint: function() {\n return this._point;\n },\n setPoint: function() {\n this._point.set(Point.read(arguments));\n },\n getHandleIn: function() {\n return this._handleIn;\n },\n setHandleIn: function() {\n this._handleIn.set(Point.read(arguments));\n },\n getHandleOut: function() {\n return this._handleOut;\n },\n setHandleOut: function() {\n this._handleOut.set(Point.read(arguments));\n },\n hasHandles: function() {\n return !this._handleIn.isZero() || !this._handleOut.isZero();\n },\n isSmooth: function() {\n var handleIn = this._handleIn, handleOut = this._handleOut;\n return !handleIn.isZero() && !handleOut.isZero() && handleIn.isCollinear(handleOut);\n },\n clearHandles: function() {\n this._handleIn._set(0, 0);\n this._handleOut._set(0, 0);\n },\n getSelection: function() {\n return this._selection;\n },\n setSelection: function(selection) {\n var oldSelection = this._selection, path = this._path;\n this._selection = selection = selection || 0;\n if (path && selection !== oldSelection) {\n path._updateSelection(this, oldSelection, selection);\n path._changed(257);\n }\n },\n _changeSelection: function(flag, selected) {\n var selection = this._selection;\n this.setSelection(selected ? selection | flag : selection & ~flag);\n },\n isSelected: function() {\n return !!(this._selection & 7);\n },\n setSelected: function(selected) {\n this._changeSelection(7, selected);\n },\n getIndex: function() {\n return this._index !== undefined ? this._index : null;\n },\n getPath: function() {\n return this._path || null;\n },\n getCurve: function() {\n var path = this._path, index = this._index;\n if (path) {\n if (index > 0 && !path._closed && index === path._segments.length - 1) index--;\n return path.getCurves()[index] || null;\n }\n return null;\n },\n getLocation: function() {\n var curve = this.getCurve();\n return curve ? new CurveLocation(curve, this === curve._segment1 ? 0 : 1) : null;\n },\n getNext: function() {\n var segments = this._path && this._path._segments;\n return segments && (segments[this._index + 1] || this._path._closed && segments[0]) || null;\n },\n smooth: function(options, _first, _last) {\n var opts = options || {}, type = opts.type, factor = opts.factor, prev = this.getPrevious(), next = this.getNext(), p0 = (prev || this)._point, p1 = this._point, p2 = (next || this)._point, d1 = p0.getDistance(p1), d2 = p1.getDistance(p2);\n if (!type || type === \"catmull-rom\") {\n var a = factor === undefined ? 0.5 : factor, d1_a = Math.pow(d1, a), d1_2a = d1_a * d1_a, d2_a = Math.pow(d2, a), d2_2a = d2_a * d2_a;\n if (!_first && prev) {\n var A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a, N = 3 * d2_a * (d2_a + d1_a);\n this.setHandleIn(N !== 0 ? new Point((d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x, (d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y) : new Point());\n }\n if (!_last && next) {\n var A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a, N = 3 * d1_a * (d1_a + d2_a);\n this.setHandleOut(N !== 0 ? new Point((d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x, (d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y) : new Point());\n }\n } else if (type === \"geometric\") {\n if (prev && next) {\n var vector = p0.subtract(p2), t = factor === undefined ? 0.4 : factor, k = t * d1 / (d1 + d2);\n if (!_first) this.setHandleIn(vector.multiply(k));\n if (!_last) this.setHandleOut(vector.multiply(k - t));\n }\n } else throw new Error(\"Smoothing method '\" + type + \"' not supported.\");\n },\n getPrevious: function() {\n var segments = this._path && this._path._segments;\n return segments && (segments[this._index - 1] || this._path._closed && segments[segments.length - 1]) || null;\n },\n isFirst: function() {\n return !this._index;\n },\n isLast: function() {\n var path = this._path;\n return path && this._index === path._segments.length - 1 || false;\n },\n reverse: function() {\n var handleIn = this._handleIn, handleOut = this._handleOut, tmp = handleIn.clone();\n handleIn.set(handleOut);\n handleOut.set(tmp);\n },\n reversed: function() {\n return new Segment(this._point, this._handleOut, this._handleIn);\n },\n remove: function() {\n return this._path ? !!this._path.removeSegment(this._index) : false;\n },\n clone: function() {\n return new Segment(this._point, this._handleIn, this._handleOut);\n },\n equals: function(segment) {\n return segment === this || segment && this._class === segment._class && this._point.equals(segment._point) && this._handleIn.equals(segment._handleIn) && this._handleOut.equals(segment._handleOut) || false;\n },\n toString: function() {\n var parts = [\n \"point: \" + this._point\n ];\n if (!this._handleIn.isZero()) parts.push(\"handleIn: \" + this._handleIn);\n if (!this._handleOut.isZero()) parts.push(\"handleOut: \" + this._handleOut);\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n transform: function(matrix) {\n this._transformCoordinates(matrix, new Array(6), true);\n this._changed();\n },\n interpolate: function(from, to, factor) {\n var u = 1 - factor, v = factor, point1 = from._point, point2 = to._point, handleIn1 = from._handleIn, handleIn2 = to._handleIn, handleOut2 = to._handleOut, handleOut1 = from._handleOut;\n this._point._set(u * point1._x + v * point2._x, u * point1._y + v * point2._y, true);\n this._handleIn._set(u * handleIn1._x + v * handleIn2._x, u * handleIn1._y + v * handleIn2._y, true);\n this._handleOut._set(u * handleOut1._x + v * handleOut2._x, u * handleOut1._y + v * handleOut2._y, true);\n this._changed();\n },\n _transformCoordinates: function(matrix, coords, change) {\n var point = this._point, handleIn = !change || !this._handleIn.isZero() ? this._handleIn : null, handleOut = !change || !this._handleOut.isZero() ? this._handleOut : null, x = point._x, y = point._y, i = 2;\n coords[0] = x;\n coords[1] = y;\n if (handleIn) {\n coords[i++] = handleIn._x + x;\n coords[i++] = handleIn._y + y;\n }\n if (handleOut) {\n coords[i++] = handleOut._x + x;\n coords[i++] = handleOut._y + y;\n }\n if (matrix) {\n matrix._transformCoordinates(coords, coords, i / 2);\n x = coords[0];\n y = coords[1];\n if (change) {\n point._x = x;\n point._y = y;\n i = 2;\n if (handleIn) {\n handleIn._x = coords[i++] - x;\n handleIn._y = coords[i++] - y;\n }\n if (handleOut) {\n handleOut._x = coords[i++] - x;\n handleOut._y = coords[i++] - y;\n }\n } else {\n if (!handleIn) {\n coords[i++] = x;\n coords[i++] = y;\n }\n if (!handleOut) {\n coords[i++] = x;\n coords[i++] = y;\n }\n }\n }\n return coords;\n }\n });\n var SegmentPoint = Point.extend({\n initialize: function SegmentPoint(point, owner, key) {\n var x, y, selected;\n if (!point) x = y = 0;\n else if ((x = point[0]) !== undefined) y = point[1];\n else {\n var pt = point;\n if ((x = pt.x) === undefined) {\n pt = Point.read(arguments);\n x = pt.x;\n }\n y = pt.y;\n selected = pt.selected;\n }\n this._x = x;\n this._y = y;\n this._owner = owner;\n owner[key] = this;\n if (selected) this.setSelected(true);\n },\n _set: function(x, y) {\n this._x = x;\n this._y = y;\n this._owner._changed(this);\n return this;\n },\n getX: function() {\n return this._x;\n },\n setX: function(x) {\n this._x = x;\n this._owner._changed(this);\n },\n getY: function() {\n return this._y;\n },\n setY: function(y) {\n this._y = y;\n this._owner._changed(this);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this._x) && isZero(this._y);\n },\n isSelected: function() {\n return !!(this._owner._selection & this._getSelection());\n },\n setSelected: function(selected) {\n this._owner._changeSelection(this._getSelection(), selected);\n },\n _getSelection: function() {\n var owner = this._owner;\n return this === owner._point ? 1 : this === owner._handleIn ? 2 : this === owner._handleOut ? 4 : 0;\n }\n });\n var Curve = Base.extend({\n _class: \"Curve\",\n beans: true,\n initialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n var count = arguments.length, seg1, seg2, point1, point2, handle1, handle2;\n if (count === 3) {\n this._path = arg0;\n seg1 = arg1;\n seg2 = arg2;\n } else if (!count) {\n seg1 = new Segment();\n seg2 = new Segment();\n } else if (count === 1) {\n if (\"segment1\" in arg0) {\n seg1 = new Segment(arg0.segment1);\n seg2 = new Segment(arg0.segment2);\n } else if (\"point1\" in arg0) {\n point1 = arg0.point1;\n handle1 = arg0.handle1;\n handle2 = arg0.handle2;\n point2 = arg0.point2;\n } else if (Array.isArray(arg0)) {\n point1 = [\n arg0[0],\n arg0[1]\n ];\n point2 = [\n arg0[6],\n arg0[7]\n ];\n handle1 = [\n arg0[2] - arg0[0],\n arg0[3] - arg0[1]\n ];\n handle2 = [\n arg0[4] - arg0[6],\n arg0[5] - arg0[7]\n ];\n }\n } else if (count === 2) {\n seg1 = new Segment(arg0);\n seg2 = new Segment(arg1);\n } else if (count === 4) {\n point1 = arg0;\n handle1 = arg1;\n handle2 = arg2;\n point2 = arg3;\n } else if (count === 8) {\n point1 = [\n arg0,\n arg1\n ];\n point2 = [\n arg6,\n arg7\n ];\n handle1 = [\n arg2 - arg0,\n arg3 - arg1\n ];\n handle2 = [\n arg4 - arg6,\n arg5 - arg7\n ];\n }\n this._segment1 = seg1 || new Segment(point1, null, handle1);\n this._segment2 = seg2 || new Segment(point2, handle2, null);\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this.hasHandles() ? [\n this.getPoint1(),\n this.getHandle1(),\n this.getHandle2(),\n this.getPoint2()\n ] : [\n this.getPoint1(),\n this.getPoint2()\n ], options, true, dictionary);\n },\n _changed: function() {\n this._length = this._bounds = undefined;\n },\n clone: function() {\n return new Curve(this._segment1, this._segment2);\n },\n toString: function() {\n var parts = [\n \"point1: \" + this._segment1._point\n ];\n if (!this._segment1._handleOut.isZero()) parts.push(\"handle1: \" + this._segment1._handleOut);\n if (!this._segment2._handleIn.isZero()) parts.push(\"handle2: \" + this._segment2._handleIn);\n parts.push(\"point2: \" + this._segment2._point);\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n classify: function() {\n return Curve.classify(this.getValues());\n },\n remove: function() {\n var removed = false;\n if (this._path) {\n var segment2 = this._segment2, handleOut = segment2._handleOut;\n removed = segment2.remove();\n if (removed) this._segment1._handleOut.set(handleOut);\n }\n return removed;\n },\n getPoint1: function() {\n return this._segment1._point;\n },\n setPoint1: function() {\n this._segment1._point.set(Point.read(arguments));\n },\n getPoint2: function() {\n return this._segment2._point;\n },\n setPoint2: function() {\n this._segment2._point.set(Point.read(arguments));\n },\n getHandle1: function() {\n return this._segment1._handleOut;\n },\n setHandle1: function() {\n this._segment1._handleOut.set(Point.read(arguments));\n },\n getHandle2: function() {\n return this._segment2._handleIn;\n },\n setHandle2: function() {\n this._segment2._handleIn.set(Point.read(arguments));\n },\n getSegment1: function() {\n return this._segment1;\n },\n getSegment2: function() {\n return this._segment2;\n },\n getPath: function() {\n return this._path;\n },\n getIndex: function() {\n return this._segment1._index;\n },\n getNext: function() {\n var curves = this._path && this._path._curves;\n return curves && (curves[this._segment1._index + 1] || this._path._closed && curves[0]) || null;\n },\n getPrevious: function() {\n var curves = this._path && this._path._curves;\n return curves && (curves[this._segment1._index - 1] || this._path._closed && curves[curves.length - 1]) || null;\n },\n isFirst: function() {\n return !this._segment1._index;\n },\n isLast: function() {\n var path = this._path;\n return path && this._segment1._index === path._curves.length - 1 || false;\n },\n isSelected: function() {\n return this.getPoint1().isSelected() && this.getHandle1().isSelected() && this.getHandle2().isSelected() && this.getPoint2().isSelected();\n },\n setSelected: function(selected) {\n this.getPoint1().setSelected(selected);\n this.getHandle1().setSelected(selected);\n this.getHandle2().setSelected(selected);\n this.getPoint2().setSelected(selected);\n },\n getValues: function(matrix) {\n return Curve.getValues(this._segment1, this._segment2, matrix);\n },\n getPoints: function() {\n var coords = this.getValues(), points = [];\n for(var i = 0; i < 8; i += 2)points.push(new Point(coords[i], coords[i + 1]));\n return points;\n }\n }, {\n getLength: function() {\n if (this._length == null) this._length = Curve.getLength(this.getValues(), 0, 1);\n return this._length;\n },\n getArea: function() {\n return Curve.getArea(this.getValues());\n },\n getLine: function() {\n return new Line(this._segment1._point, this._segment2._point);\n },\n getPart: function(from, to) {\n return new Curve(Curve.getPart(this.getValues(), from, to));\n },\n getPartLength: function(from, to) {\n return Curve.getLength(this.getValues(), from, to);\n },\n divideAt: function(location) {\n return this.divideAtTime(location && location.curve === this ? location.time : this.getTimeAt(location));\n },\n divideAtTime: function(time, _setHandles) {\n var tMin = 1e-8, tMax = 1 - tMin, res = null;\n if (time >= tMin && time <= tMax) {\n var parts = Curve.subdivide(this.getValues(), time), left = parts[0], right = parts[1], setHandles = _setHandles || this.hasHandles(), seg1 = this._segment1, seg2 = this._segment2, path = this._path;\n if (setHandles) {\n seg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n seg2._handleIn._set(right[4] - right[6], right[5] - right[7]);\n }\n var x = left[6], y = left[7], segment = new Segment(new Point(x, y), setHandles && new Point(left[4] - x, left[5] - y), setHandles && new Point(right[2] - x, right[3] - y));\n if (path) {\n path.insert(seg1._index + 1, segment);\n res = this.getNext();\n } else {\n this._segment2 = segment;\n this._changed();\n res = new Curve(segment, seg2);\n }\n }\n return res;\n },\n splitAt: function(location) {\n var path = this._path;\n return path ? path.splitAt(location) : null;\n },\n splitAtTime: function(time) {\n return this.splitAt(this.getLocationAtTime(time));\n },\n divide: function(offset, isTime) {\n return this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset : this.getTimeAt(offset));\n },\n split: function(offset, isTime) {\n return this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset : this.getTimeAt(offset));\n },\n reversed: function() {\n return new Curve(this._segment2.reversed(), this._segment1.reversed());\n },\n clearHandles: function() {\n this._segment1._handleOut._set(0, 0);\n this._segment2._handleIn._set(0, 0);\n },\n statics: {\n getValues: function(segment1, segment2, matrix, straight) {\n var p1 = segment1._point, h1 = segment1._handleOut, h2 = segment2._handleIn, p2 = segment2._point, x1 = p1.x, y1 = p1.y, x2 = p2.x, y2 = p2.y, values = straight ? [\n x1,\n y1,\n x1,\n y1,\n x2,\n y2,\n x2,\n y2\n ] : [\n x1,\n y1,\n x1 + h1._x,\n y1 + h1._y,\n x2 + h2._x,\n y2 + h2._y,\n x2,\n y2\n ];\n if (matrix) matrix._transformCoordinates(values, values, 4);\n return values;\n },\n subdivide: function(v, t) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7];\n if (t === undefined) t = 0.5;\n var u = 1 - t, x4 = u * x0 + t * x1, y4 = u * y0 + t * y1, x5 = u * x1 + t * x2, y5 = u * y1 + t * y2, x6 = u * x2 + t * x3, y6 = u * y2 + t * y3, x7 = u * x4 + t * x5, y7 = u * y4 + t * y5, x8 = u * x5 + t * x6, y8 = u * y5 + t * y6, x9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n return [\n [\n x0,\n y0,\n x4,\n y4,\n x7,\n y7,\n x9,\n y9\n ],\n [\n x9,\n y9,\n x8,\n y8,\n x6,\n y6,\n x3,\n y3\n ]\n ];\n },\n getMonoCurves: function(v, dir) {\n var curves = [], io = dir ? 0 : 1, o0 = v[io + 0], o1 = v[io + 2], o2 = v[io + 4], o3 = v[io + 6];\n if (o0 >= o1 === o1 >= o2 && o1 >= o2 === o2 >= o3 || Curve.isStraight(v)) curves.push(v);\n else {\n var a = 3 * (o1 - o2) - o0 + o3, b = 2 * (o0 + o2) - 4 * o1, c = o1 - o0, tMin = 1e-8, tMax = 1 - tMin, roots = [], n = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n if (!n) curves.push(v);\n else {\n roots.sort();\n var t = roots[0], parts = Curve.subdivide(v, t);\n curves.push(parts[0]);\n if (n > 1) {\n t = (roots[1] - t) / (1 - t);\n parts = Curve.subdivide(parts[1], t);\n curves.push(parts[0]);\n }\n curves.push(parts[1]);\n }\n }\n return curves;\n },\n solveCubic: function(v, coord, val, roots, min, max) {\n var v0 = v[coord], v1 = v[coord + 2], v2 = v[coord + 4], v3 = v[coord + 6], res = 0;\n if (!(v0 < val && v3 < val && v1 < val && v2 < val || v0 > val && v3 > val && v1 > val && v2 > val)) {\n var c = 3 * (v1 - v0), b = 3 * (v2 - v1) - c, a = v3 - v0 - c - b;\n res = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n }\n return res;\n },\n getTimeOf: function(v, point) {\n var p0 = new Point(v[0], v[1]), p3 = new Point(v[6], v[7]), epsilon = 1e-12, geomEpsilon = 1e-7, t = point.isClose(p0, epsilon) ? 0 : point.isClose(p3, epsilon) ? 1 : null;\n if (t === null) {\n var coords = [\n point.x,\n point.y\n ], roots = [];\n for(var c = 0; c < 2; c++){\n var count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n for(var i = 0; i < count; i++){\n var u = roots[i];\n if (point.isClose(Curve.getPoint(v, u), geomEpsilon)) return u;\n }\n }\n }\n return point.isClose(p0, geomEpsilon) ? 0 : point.isClose(p3, geomEpsilon) ? 1 : null;\n },\n getNearestTime: function(v, point) {\n if (Curve.isStraight(v)) {\n var x0 = v[0], y0 = v[1], x3 = v[6], y3 = v[7], vx = x3 - x0, vy = y3 - y0, det = vx * vx + vy * vy;\n if (det === 0) return 0;\n var u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n return u < 1e-12 ? 0 : u > 0.999999999999 ? 1 : Curve.getTimeOf(v, new Point(x0 + u * vx, y0 + u * vy));\n }\n var count = 100, minDist = Infinity, minT = 0;\n function refine(t) {\n if (t >= 0 && t <= 1) {\n var dist = point.getDistance(Curve.getPoint(v, t), true);\n if (dist < minDist) {\n minDist = dist;\n minT = t;\n return true;\n }\n }\n }\n for(var i = 0; i <= count; i++)refine(i / count);\n var step = 1 / (count * 2);\n while(step > 1e-8)if (!refine(minT - step) && !refine(minT + step)) step /= 2;\n return minT;\n },\n getPart: function(v, from, to) {\n var flip = from > to;\n if (flip) {\n var tmp = from;\n from = to;\n to = tmp;\n }\n if (from > 0) v = Curve.subdivide(v, from)[1];\n if (to < 1) v = Curve.subdivide(v, (to - from) / (1 - from))[0];\n return flip ? [\n v[6],\n v[7],\n v[4],\n v[5],\n v[2],\n v[3],\n v[0],\n v[1]\n ] : v;\n },\n isFlatEnough: function(v, flatness) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ux = 3 * x1 - 2 * x0 - x3, uy = 3 * y1 - 2 * y0 - y3, vx = 3 * x2 - 2 * x3 - x0, vy = 3 * y2 - 2 * y3 - y0;\n return Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy) <= 16 * flatness * flatness;\n },\n getArea: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7];\n return 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2) + y1 * (x0 - x2) - x1 * (y0 - y2) + y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n },\n getBounds: function(v) {\n var min = v.slice(0, 2), max = min.slice(), roots = [\n 0,\n 0\n ];\n for(var i = 0; i < 2; i++)Curve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6], i, 0, min, max, roots);\n return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n _addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n function add(value, padding) {\n var left = value - padding, right = value + padding;\n if (left < min[coord]) min[coord] = left;\n if (right > max[coord]) max[coord] = right;\n }\n padding /= 2;\n var minPad = min[coord] + padding, maxPad = max[coord] - padding;\n if (v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad || v0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n if (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n add(v0, 0);\n add(v3, 0);\n } else {\n var a = 3 * (v1 - v2) - v0 + v3, b = 2 * (v0 + v2) - 4 * v1, c = v1 - v0, count = Numerical.solveQuadratic(a, b, c, roots), tMin = 1e-8, tMax = 1 - tMin;\n add(v3, 0);\n for(var i = 0; i < count; i++){\n var t = roots[i], u = 1 - t;\n if (tMin <= t && t <= tMax) add(u * u * u * v0 + 3 * u * u * t * v1 + 3 * u * t * t * v2 + t * t * t * v3, padding);\n }\n }\n }\n }\n }\n }, Base.each([\n \"getBounds\",\n \"getStrokeBounds\",\n \"getHandleBounds\"\n ], function(name) {\n this[name] = function() {\n if (!this._bounds) this._bounds = {};\n var bounds = this._bounds[name];\n if (!bounds) bounds = this._bounds[name] = Path[name]([\n this._segment1,\n this._segment2\n ], false, this._path);\n return bounds.clone();\n };\n }, {}), Base.each({\n isStraight: function(p1, h1, h2, p2) {\n if (h1.isZero() && h2.isZero()) return true;\n else {\n var v = p2.subtract(p1);\n if (v.isZero()) return false;\n else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n var l = new Line(p1, p2), epsilon = 1e-7;\n if (l.getDistance(p1.add(h1)) < epsilon && l.getDistance(p2.add(h2)) < epsilon) {\n var div = v.dot(v), s1 = v.dot(h1) / div, s2 = v.dot(h2) / div;\n return s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n }\n }\n }\n return false;\n },\n isLinear: function(p1, h1, h2, p2) {\n var third = p2.subtract(p1).divide(3);\n return h1.equals(third) && h2.negate().equals(third);\n }\n }, function(test, name) {\n this[name] = function(epsilon) {\n var seg1 = this._segment1, seg2 = this._segment2;\n return test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point, epsilon);\n };\n this.statics[name] = function(v, epsilon) {\n var x0 = v[0], y0 = v[1], x3 = v[6], y3 = v[7];\n return test(new Point(x0, y0), new Point(v[2] - x0, v[3] - y0), new Point(v[4] - x3, v[5] - y3), new Point(x3, y3), epsilon);\n };\n }, {\n statics: {},\n hasHandles: function() {\n return !this._segment1._handleOut.isZero() || !this._segment2._handleIn.isZero();\n },\n hasLength: function(epsilon) {\n return (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles()) && this.getLength() > (epsilon || 0);\n },\n isCollinear: function(curve) {\n return curve && this.isStraight() && curve.isStraight() && this.getLine().isCollinear(curve.getLine());\n },\n isHorizontal: function() {\n return this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y) < 1e-8;\n },\n isVertical: function() {\n return this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x) < 1e-8;\n }\n }), {\n beans: false,\n getLocationAt: function(offset, _isTime) {\n return this.getLocationAtTime(_isTime ? offset : this.getTimeAt(offset));\n },\n getLocationAtTime: function(t) {\n return t != null && t >= 0 && t <= 1 ? new CurveLocation(this, t) : null;\n },\n getTimeAt: function(offset, start) {\n return Curve.getTimeAt(this.getValues(), offset, start);\n },\n getParameterAt: \"#getTimeAt\",\n getTimesWithTangent: function() {\n var tangent = Point.read(arguments);\n return tangent.isZero() ? [] : Curve.getTimesWithTangent(this.getValues(), tangent);\n },\n getOffsetAtTime: function(t) {\n return this.getPartLength(0, t);\n },\n getLocationOf: function() {\n return this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n },\n getOffsetOf: function() {\n var loc = this.getLocationOf.apply(this, arguments);\n return loc ? loc.getOffset() : null;\n },\n getTimeOf: function() {\n return Curve.getTimeOf(this.getValues(), Point.read(arguments));\n },\n getParameterOf: \"#getTimeOf\",\n getNearestLocation: function() {\n var point = Point.read(arguments), values = this.getValues(), t = Curve.getNearestTime(values, point), pt = Curve.getPoint(values, t);\n return new CurveLocation(this, t, pt, null, point.getDistance(pt));\n },\n getNearestPoint: function() {\n var loc = this.getNearestLocation.apply(this, arguments);\n return loc ? loc.getPoint() : loc;\n }\n }, new function() {\n var methods = [\n \"getPoint\",\n \"getTangent\",\n \"getNormal\",\n \"getWeightedTangent\",\n \"getWeightedNormal\",\n \"getCurvature\"\n ];\n return Base.each(methods, function(name) {\n this[name + \"At\"] = function(location, _isTime) {\n var values = this.getValues();\n return Curve[name](values, _isTime ? location : Curve.getTimeAt(values, location));\n };\n this[name + \"AtTime\"] = function(time) {\n return Curve[name](this.getValues(), time);\n };\n }, {\n statics: {\n _evaluateMethods: methods\n }\n });\n }, new function() {\n function getLengthIntegrand(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ax = 9 * (x1 - x2) + 3 * (x3 - x0), bx = 6 * (x0 + x2) - 12 * x1, cx = 3 * (x1 - x0), ay = 9 * (y1 - y2) + 3 * (y3 - y0), by = 6 * (y0 + y2) - 12 * y1, cy = 3 * (y1 - y0);\n return function(t) {\n var dx = (ax * t + bx) * t + cx, dy = (ay * t + by) * t + cy;\n return Math.sqrt(dx * dx + dy * dy);\n };\n }\n function getIterations(a, b) {\n return Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n }\n function evaluate(v, t, type, normalized) {\n if (t == null || t < 0 || t > 1) return null;\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], isZero = Numerical.isZero;\n if (isZero(x1 - x0) && isZero(y1 - y0)) {\n x1 = x0;\n y1 = y0;\n }\n if (isZero(x2 - x3) && isZero(y2 - y3)) {\n x2 = x3;\n y2 = y3;\n }\n var cx = 3 * (x1 - x0), bx = 3 * (x2 - x1) - cx, ax = x3 - x0 - cx - bx, cy = 3 * (y1 - y0), by = 3 * (y2 - y1) - cy, ay = y3 - y0 - cy - by, x, y;\n if (type === 0) {\n x = t === 0 ? x0 : t === 1 ? x3 : ((ax * t + bx) * t + cx) * t + x0;\n y = t === 0 ? y0 : t === 1 ? y3 : ((ay * t + by) * t + cy) * t + y0;\n } else {\n var tMin = 1e-8, tMax = 1 - tMin;\n if (t < tMin) {\n x = cx;\n y = cy;\n } else if (t > tMax) {\n x = 3 * (x3 - x2);\n y = 3 * (y3 - y2);\n } else {\n x = (3 * ax * t + 2 * bx) * t + cx;\n y = (3 * ay * t + 2 * by) * t + cy;\n }\n if (normalized) {\n if (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n x = x2 - x1;\n y = y2 - y1;\n }\n var len = Math.sqrt(x * x + y * y);\n if (len) {\n x /= len;\n y /= len;\n }\n }\n if (type === 3) {\n var x2 = 6 * ax * t + 2 * bx, y2 = 6 * ay * t + 2 * by, d = Math.pow(x * x + y * y, 1.5);\n x = d !== 0 ? (x * y2 - y * x2) / d : 0;\n y = 0;\n }\n }\n return type === 2 ? new Point(y, -x) : new Point(x, y);\n }\n return {\n statics: {\n classify: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], a1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2, a2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3, a3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0, d3 = 3 * a3, d2 = d3 - a2, d1 = d2 - a2 + a1, l = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3), s = l !== 0 ? 1 / l : 0, isZero = Numerical.isZero, serpentine = \"serpentine\";\n d1 *= s;\n d2 *= s;\n d3 *= s;\n function type(type, t1, t2) {\n var hasRoots = t1 !== undefined, t1Ok = hasRoots && t1 > 0 && t1 < 1, t2Ok = hasRoots && t2 > 0 && t2 < 1;\n if (hasRoots && (!(t1Ok || t2Ok) || type === \"loop\" && !(t1Ok && t2Ok))) {\n type = \"arch\";\n t1Ok = t2Ok = false;\n }\n return {\n type: type,\n roots: t1Ok || t2Ok ? t1Ok && t2Ok ? t1 < t2 ? [\n t1,\n t2\n ] : [\n t2,\n t1\n ] : [\n t1Ok ? t1 : t2\n ] : null\n };\n }\n if (isZero(d1)) return isZero(d2) ? type(isZero(d3) ? \"line\" : \"quadratic\") : type(serpentine, d3 / (3 * d2));\n var d = 3 * d2 * d2 - 4 * d1 * d3;\n if (isZero(d)) return type(\"cusp\", d2 / (2 * d1));\n var f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d), f2 = 2 * d1;\n return type(d > 0 ? serpentine : \"loop\", (d2 + f1) / f2, (d2 - f1) / f2);\n },\n getLength: function(v, a, b, ds) {\n if (a === undefined) a = 0;\n if (b === undefined) b = 1;\n if (Curve.isStraight(v)) {\n var c = v;\n if (b < 1) {\n c = Curve.subdivide(c, b)[0];\n a /= b;\n }\n if (a > 0) c = Curve.subdivide(c, a)[1];\n var dx = c[6] - c[0], dy = c[7] - c[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n return Numerical.integrate(ds || getLengthIntegrand(v), a, b, getIterations(a, b));\n },\n getTimeAt: function(v, offset, start) {\n if (start === undefined) start = offset < 0 ? 1 : 0;\n if (offset === 0) return start;\n var abs = Math.abs, epsilon = 1e-12, forward = offset > 0, a = forward ? start : 0, b = forward ? 1 : start, ds = getLengthIntegrand(v), rangeLength = Curve.getLength(v, a, b, ds), diff = abs(offset) - rangeLength;\n if (abs(diff) < epsilon) return forward ? b : a;\n else if (diff > epsilon) return null;\n var guess = offset / rangeLength, length = 0;\n function f(t) {\n length += Numerical.integrate(ds, start, t, getIterations(start, t));\n start = t;\n return length - offset;\n }\n return Numerical.findRoot(f, ds, start + guess, a, b, 32, 1e-12);\n },\n getPoint: function(v, t) {\n return evaluate(v, t, 0, false);\n },\n getTangent: function(v, t) {\n return evaluate(v, t, 1, true);\n },\n getWeightedTangent: function(v, t) {\n return evaluate(v, t, 1, false);\n },\n getNormal: function(v, t) {\n return evaluate(v, t, 2, true);\n },\n getWeightedNormal: function(v, t) {\n return evaluate(v, t, 2, false);\n },\n getCurvature: function(v, t) {\n return evaluate(v, t, 3, false).x;\n },\n getPeaks: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ax = -x0 + 3 * x1 - 3 * x2 + x3, bx = 3 * x0 - 6 * x1 + 3 * x2, cx = -3 * x0 + 3 * x1, ay = -y0 + 3 * y1 - 3 * y2 + y3, by = 3 * y0 - 6 * y1 + 3 * y2, cy = -3 * y0 + 3 * y1, tMin = 1e-8, tMax = 1 - tMin, roots = [];\n Numerical.solveCubic(9 * (ax * ax + ay * ay), 9 * (ax * bx + by * ay), 2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay), cx * bx + by * cy, roots, tMin, tMax);\n return roots.sort();\n }\n }\n };\n }, new function() {\n function addLocation(locations, include, c1, t1, c2, t2, overlap) {\n var excludeStart = !overlap && c1.getPrevious() === c2, excludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2, tMin = 1e-8, tMax = 1 - tMin;\n if (t1 !== null && t1 >= (excludeStart ? tMin : 0) && t1 <= (excludeEnd ? tMax : 1)) {\n if (t2 !== null && t2 >= (excludeEnd ? tMin : 0) && t2 <= (excludeStart ? tMax : 1)) {\n var loc1 = new CurveLocation(c1, t1, null, overlap), loc2 = new CurveLocation(c2, t2, null, overlap);\n loc1._intersection = loc2;\n loc2._intersection = loc1;\n if (!include || include(loc1)) CurveLocation.insert(locations, loc1, true);\n }\n }\n }\n function addCurveIntersections(v1, v2, c1, c2, locations, include, flip, recursion, calls, tMin, tMax, uMin, uMax) {\n if (++calls >= 4096 || ++recursion >= 40) return calls;\n var fatLineEpsilon = 1e-9, q0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7], getSignedDistance = Line.getSignedDistance, d1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]), d2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]), factor = d1 * d2 > 0 ? 3 / 4 : 4 / 9, dMin = factor * Math.min(0, d1, d2), dMax = factor * Math.max(0, d1, d2), dp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]), dp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]), dp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]), dp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]), hull = getConvexHull(dp0, dp1, dp2, dp3), top = hull[0], bottom = hull[1], tMinClip, tMaxClip;\n if (d1 === 0 && d2 === 0 && dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0 || (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null || (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(), dMin, dMax)) == null) return calls;\n var tMinNew = tMin + (tMax - tMin) * tMinClip, tMaxNew = tMin + (tMax - tMin) * tMaxClip;\n if (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n var t = (tMinNew + tMaxNew) / 2, u = (uMin + uMax) / 2;\n addLocation(locations, include, flip ? c2 : c1, flip ? u : t, flip ? c1 : c2, flip ? t : u);\n } else {\n v1 = Curve.getPart(v1, tMinClip, tMaxClip);\n var uDiff = uMax - uMin;\n if (tMaxClip - tMinClip > 0.8) {\n if (tMaxNew - tMinNew > uDiff) {\n var parts = Curve.subdivide(v1, 0.5), t = (tMinNew + tMaxNew) / 2;\n calls = addCurveIntersections(v2, parts[0], c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, tMinNew, t);\n calls = addCurveIntersections(v2, parts[1], c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, t, tMaxNew);\n } else {\n var parts = Curve.subdivide(v2, 0.5), u = (uMin + uMax) / 2;\n calls = addCurveIntersections(parts[0], v1, c2, c1, locations, include, !flip, recursion, calls, uMin, u, tMinNew, tMaxNew);\n calls = addCurveIntersections(parts[1], v1, c2, c1, locations, include, !flip, recursion, calls, u, uMax, tMinNew, tMaxNew);\n }\n } else if (uDiff === 0 || uDiff >= fatLineEpsilon) calls = addCurveIntersections(v2, v1, c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, tMinNew, tMaxNew);\n else calls = addCurveIntersections(v1, v2, c1, c2, locations, include, flip, recursion, calls, tMinNew, tMaxNew, uMin, uMax);\n }\n return calls;\n }\n function getConvexHull(dq0, dq1, dq2, dq3) {\n var p0 = [\n 0,\n dq0\n ], p1 = [\n 1 / 3,\n dq1\n ], p2 = [\n 2 / 3,\n dq2\n ], p3 = [\n 1,\n dq3\n ], dist1 = dq1 - (2 * dq0 + dq3) / 3, dist2 = dq2 - (dq0 + 2 * dq3) / 3, hull;\n if (dist1 * dist2 < 0) hull = [\n [\n p0,\n p1,\n p3\n ],\n [\n p0,\n p2,\n p3\n ]\n ];\n else {\n var distRatio = dist1 / dist2;\n hull = [\n distRatio >= 2 ? [\n p0,\n p1,\n p3\n ] : distRatio <= 0.5 ? [\n p0,\n p2,\n p3\n ] : [\n p0,\n p1,\n p2,\n p3\n ],\n [\n p0,\n p3\n ]\n ];\n }\n return (dist1 || dist2) < 0 ? hull.reverse() : hull;\n }\n function clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n if (hullTop[0][1] < dMin) return clipConvexHullPart(hullTop, true, dMin);\n else if (hullBottom[0][1] > dMax) return clipConvexHullPart(hullBottom, false, dMax);\n else return hullTop[0][0];\n }\n function clipConvexHullPart(part, top, threshold) {\n var px = part[0][0], py = part[0][1];\n for(var i = 1, l = part.length; i < l; i++){\n var qx = part[i][0], qy = part[i][1];\n if (top ? qy >= threshold : qy <= threshold) return qy === threshold ? qx : px + (threshold - py) * (qx - px) / (qy - py);\n px = qx;\n py = qy;\n }\n return null;\n }\n function getCurveLineIntersections(v, px, py, vx, vy) {\n var isZero = Numerical.isZero;\n if (isZero(vx) && isZero(vy)) {\n var t = Curve.getTimeOf(v, new Point(px, py));\n return t === null ? [] : [\n t\n ];\n }\n var angle = Math.atan2(-vy, vx), sin = Math.sin(angle), cos = Math.cos(angle), rv = [], roots = [];\n for(var i = 0; i < 8; i += 2){\n var x = v[i] - px, y = v[i + 1] - py;\n rv.push(x * cos - y * sin, x * sin + y * cos);\n }\n Curve.solveCubic(rv, 1, 0, roots, 0, 1);\n return roots;\n }\n function addCurveLineIntersections(v1, v2, c1, c2, locations, include, flip) {\n var x1 = v2[0], y1 = v2[1], x2 = v2[6], y2 = v2[7], roots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n for(var i = 0, l = roots.length; i < l; i++){\n var t1 = roots[i], p1 = Curve.getPoint(v1, t1), t2 = Curve.getTimeOf(v2, p1);\n if (t2 !== null) addLocation(locations, include, flip ? c2 : c1, flip ? t2 : t1, flip ? c1 : c2, flip ? t1 : t2);\n }\n }\n function addLineIntersection(v1, v2, c1, c2, locations, include) {\n var pt = Line.intersect(v1[0], v1[1], v1[6], v1[7], v2[0], v2[1], v2[6], v2[7]);\n if (pt) addLocation(locations, include, c1, Curve.getTimeOf(v1, pt), c2, Curve.getTimeOf(v2, pt));\n }\n function getCurveIntersections(v1, v2, c1, c2, locations, include) {\n var epsilon = 1e-12, min = Math.min, max = Math.max;\n if (max(v1[0], v1[2], v1[4], v1[6]) + epsilon > min(v2[0], v2[2], v2[4], v2[6]) && min(v1[0], v1[2], v1[4], v1[6]) - epsilon < max(v2[0], v2[2], v2[4], v2[6]) && max(v1[1], v1[3], v1[5], v1[7]) + epsilon > min(v2[1], v2[3], v2[5], v2[7]) && min(v1[1], v1[3], v1[5], v1[7]) - epsilon < max(v2[1], v2[3], v2[5], v2[7])) {\n var overlaps = getOverlaps(v1, v2);\n if (overlaps) for(var i = 0; i < 2; i++){\n var overlap = overlaps[i];\n addLocation(locations, include, c1, overlap[0], c2, overlap[1], true);\n }\n else {\n var straight1 = Curve.isStraight(v1), straight2 = Curve.isStraight(v2), straight = straight1 && straight2, flip = straight1 && !straight2, before = locations.length;\n (straight ? addLineIntersection : straight1 || straight2 ? addCurveLineIntersections : addCurveIntersections)(flip ? v2 : v1, flip ? v1 : v2, flip ? c2 : c1, flip ? c1 : c2, locations, include, flip, 0, 0, 0, 1, 0, 1);\n if (!straight || locations.length === before) for(var i = 0; i < 4; i++){\n var t1 = i >> 1, t2 = i & 1, i1 = t1 * 6, i2 = t2 * 6, p1 = new Point(v1[i1], v1[i1 + 1]), p2 = new Point(v2[i2], v2[i2 + 1]);\n if (p1.isClose(p2, epsilon)) addLocation(locations, include, c1, t1, c2, t2);\n }\n }\n }\n return locations;\n }\n function getSelfIntersection(v1, c1, locations, include) {\n var info = Curve.classify(v1);\n if (info.type === \"loop\") {\n var roots = info.roots;\n addLocation(locations, include, c1, roots[0], c1, roots[1]);\n }\n return locations;\n }\n function getIntersections(curves1, curves2, include, matrix1, matrix2, _returnFirst) {\n var epsilon = 1e-7, self1 = !curves2;\n if (self1) curves2 = curves1;\n var length1 = curves1.length, length2 = curves2.length, values1 = new Array(length1), values2 = self1 ? values1 : new Array(length2), locations = [];\n for(var i = 0; i < length1; i++)values1[i] = curves1[i].getValues(matrix1);\n if (!self1) for(var i = 0; i < length2; i++)values2[i] = curves2[i].getValues(matrix2);\n var boundsCollisions = CollisionDetection.findCurveBoundsCollisions(values1, values2, epsilon);\n for(var index1 = 0; index1 < length1; index1++){\n var curve1 = curves1[index1], v1 = values1[index1];\n if (self1) getSelfIntersection(v1, curve1, locations, include);\n var collisions1 = boundsCollisions[index1];\n if (collisions1) for(var j = 0; j < collisions1.length; j++){\n if (_returnFirst && locations.length) return locations;\n var index2 = collisions1[j];\n if (!self1 || index2 > index1) {\n var curve2 = curves2[index2], v2 = values2[index2];\n getCurveIntersections(v1, v2, curve1, curve2, locations, include);\n }\n }\n }\n return locations;\n }\n function getOverlaps(v1, v2) {\n function getSquaredLineLength(v) {\n var x = v[6] - v[0], y = v[7] - v[1];\n return x * x + y * y;\n }\n var abs = Math.abs, getDistance = Line.getDistance, timeEpsilon = 1e-8, geomEpsilon = 1e-7, straight1 = Curve.isStraight(v1), straight2 = Curve.isStraight(v2), straightBoth = straight1 && straight2, flip = getSquaredLineLength(v1) < getSquaredLineLength(v2), l1 = flip ? v2 : v1, l2 = flip ? v1 : v2, px = l1[0], py = l1[1], vx = l1[6] - px, vy = l1[7] - py;\n if (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n if (!straightBoth && getDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon && getDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) straight1 = straight2 = straightBoth = true;\n } else if (straightBoth) return null;\n if (straight1 ^ straight2) return null;\n var v = [\n v1,\n v2\n ], pairs = [];\n for(var i = 0; i < 4 && pairs.length < 2; i++){\n var i1 = i & 1, i2 = i1 ^ 1, t1 = i >> 1, t2 = Curve.getTimeOf(v[i1], new Point(v[i2][t1 ? 6 : 0], v[i2][t1 ? 7 : 1]));\n if (t2 != null) {\n var pair = i1 ? [\n t1,\n t2\n ] : [\n t2,\n t1\n ];\n if (!pairs.length || abs(pair[0] - pairs[0][0]) > timeEpsilon && abs(pair[1] - pairs[0][1]) > timeEpsilon) pairs.push(pair);\n }\n if (i > 2 && !pairs.length) break;\n }\n if (pairs.length !== 2) pairs = null;\n else if (!straightBoth) {\n var o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]), o2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n if (abs(o2[2] - o1[2]) > geomEpsilon || abs(o2[3] - o1[3]) > geomEpsilon || abs(o2[4] - o1[4]) > geomEpsilon || abs(o2[5] - o1[5]) > geomEpsilon) pairs = null;\n }\n return pairs;\n }\n function getTimesWithTangent(v, tangent) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], normalized = tangent.normalize(), tx = normalized.x, ty = normalized.y, ax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0, ay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0, bx = 6 * x2 - 12 * x1 + 6 * x0, by = 6 * y2 - 12 * y1 + 6 * y0, cx = 3 * x1 - 3 * x0, cy = 3 * y1 - 3 * y0, den = 2 * ax * ty - 2 * ay * tx, times = [];\n if (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n var num = ax * cy - ay * cx, den = ax * by - ay * bx;\n if (den != 0) {\n var t = -num / den;\n if (t >= 0 && t <= 1) times.push(t);\n }\n } else {\n var delta = (bx * bx - 4 * ax * cx) * ty * ty + (-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty + (by * by - 4 * ay * cy) * tx * tx, k = bx * ty - by * tx;\n if (delta >= 0 && den != 0) {\n var d = Math.sqrt(delta), t0 = -(k + d) / den, t1 = (-k + d) / den;\n if (t0 >= 0 && t0 <= 1) times.push(t0);\n if (t1 >= 0 && t1 <= 1) times.push(t1);\n }\n }\n return times;\n }\n return {\n getIntersections: function(curve) {\n var v1 = this.getValues(), v2 = curve && curve !== this && curve.getValues();\n return v2 ? getCurveIntersections(v1, v2, this, curve, []) : getSelfIntersection(v1, this, []);\n },\n statics: {\n getOverlaps: getOverlaps,\n getIntersections: getIntersections,\n getCurveLineIntersections: getCurveLineIntersections,\n getTimesWithTangent: getTimesWithTangent\n }\n };\n });\n var CurveLocation = Base.extend({\n _class: \"CurveLocation\",\n initialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n if (time >= 0.99999999) {\n var next = curve.getNext();\n if (next) {\n time = 0;\n curve = next;\n }\n }\n this._setCurve(curve);\n this._time = time;\n this._point = point || curve.getPointAtTime(time);\n this._overlap = _overlap;\n this._distance = _distance;\n this._intersection = this._next = this._previous = null;\n },\n _setPath: function(path) {\n this._path = path;\n this._version = path ? path._version : 0;\n },\n _setCurve: function(curve) {\n this._setPath(curve._path);\n this._curve = curve;\n this._segment = null;\n this._segment1 = curve._segment1;\n this._segment2 = curve._segment2;\n },\n _setSegment: function(segment) {\n var curve = segment.getCurve();\n if (curve) this._setCurve(curve);\n else {\n this._setPath(segment._path);\n this._segment1 = segment;\n this._segment2 = null;\n }\n this._segment = segment;\n this._time = segment === this._segment1 ? 0 : 1;\n this._point = segment._point.clone();\n },\n getSegment: function() {\n var segment = this._segment;\n if (!segment) {\n var curve = this.getCurve(), time = this.getTime();\n if (time === 0) segment = curve._segment1;\n else if (time === 1) segment = curve._segment2;\n else if (time != null) segment = curve.getPartLength(0, time) < curve.getPartLength(time, 1) ? curve._segment1 : curve._segment2;\n this._segment = segment;\n }\n return segment;\n },\n getCurve: function() {\n var path = this._path, that = this;\n if (path && path._version !== this._version) this._time = this._offset = this._curveOffset = this._curve = null;\n function trySegment(segment) {\n var curve = segment && segment.getCurve();\n if (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n that._setCurve(curve);\n return curve;\n }\n }\n return this._curve || trySegment(this._segment) || trySegment(this._segment1) || trySegment(this._segment2.getPrevious());\n },\n getPath: function() {\n var curve = this.getCurve();\n return curve && curve._path;\n },\n getIndex: function() {\n var curve = this.getCurve();\n return curve && curve.getIndex();\n },\n getTime: function() {\n var curve = this.getCurve(), time = this._time;\n return curve && time == null ? this._time = curve.getTimeOf(this._point) : time;\n },\n getParameter: \"#getTime\",\n getPoint: function() {\n return this._point;\n },\n getOffset: function() {\n var offset = this._offset;\n if (offset == null) {\n offset = 0;\n var path = this.getPath(), index = this.getIndex();\n if (path && index != null) {\n var curves = path.getCurves();\n for(var i = 0; i < index; i++)offset += curves[i].getLength();\n }\n this._offset = offset += this.getCurveOffset();\n }\n return offset;\n },\n getCurveOffset: function() {\n var offset = this._curveOffset;\n if (offset == null) {\n var curve = this.getCurve(), time = this.getTime();\n this._curveOffset = offset = time != null && curve && curve.getPartLength(0, time);\n }\n return offset;\n },\n getIntersection: function() {\n return this._intersection;\n },\n getDistance: function() {\n return this._distance;\n },\n divide: function() {\n var curve = this.getCurve(), res = curve && curve.divideAtTime(this.getTime());\n if (res) this._setSegment(res._segment1);\n return res;\n },\n split: function() {\n var curve = this.getCurve(), path = curve._path, res = curve && curve.splitAtTime(this.getTime());\n if (res) this._setSegment(path.getLastSegment());\n return res;\n },\n equals: function(loc, _ignoreOther) {\n var res = this === loc;\n if (!res && loc instanceof CurveLocation) {\n var c1 = this.getCurve(), c2 = loc.getCurve(), p1 = c1._path, p2 = c2._path;\n if (p1 === p2) {\n var abs = Math.abs, epsilon = 1e-7, diff = abs(this.getOffset() - loc.getOffset()), i1 = !_ignoreOther && this._intersection, i2 = !_ignoreOther && loc._intersection;\n res = (diff < epsilon || p1 && abs(p1.getLength() - diff) < epsilon) && (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n }\n }\n return res;\n },\n toString: function() {\n var parts = [], point = this.getPoint(), f = Formatter.instance;\n if (point) parts.push(\"point: \" + point);\n var index = this.getIndex();\n if (index != null) parts.push(\"index: \" + index);\n var time = this.getTime();\n if (time != null) parts.push(\"time: \" + f.number(time));\n if (this._distance != null) parts.push(\"distance: \" + f.number(this._distance));\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n isTouching: function() {\n var inter = this._intersection;\n if (inter && this.getTangent().isCollinear(inter.getTangent())) {\n var curve1 = this.getCurve(), curve2 = inter.getCurve();\n return !(curve1.isStraight() && curve2.isStraight() && curve1.getLine().intersect(curve2.getLine()));\n }\n return false;\n },\n isCrossing: function() {\n var inter = this._intersection;\n if (!inter) return false;\n var t1 = this.getTime(), t2 = inter.getTime(), tMin = 1e-8, tMax = 1 - tMin, t1Inside = t1 >= tMin && t1 <= tMax, t2Inside = t2 >= tMin && t2 <= tMax;\n if (t1Inside && t2Inside) return !this.isTouching();\n var c2 = this.getCurve(), c1 = c2 && t1 < tMin ? c2.getPrevious() : c2, c4 = inter.getCurve(), c3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n if (t1 > tMax) c2 = c2.getNext();\n if (t2 > tMax) c4 = c4.getNext();\n if (!c1 || !c2 || !c3 || !c4) return false;\n var offsets = [];\n function addOffsets(curve, end) {\n var v = curve.getValues(), roots = Curve.classify(v).roots || Curve.getPeaks(v), count = roots.length, offset = Curve.getLength(v, end && count ? roots[count - 1] : 0, !end && count ? roots[0] : 1);\n offsets.push(count ? offset : offset / 32);\n }\n function isInRange(angle, min, max) {\n return min < max ? angle > min && angle < max : angle > min || angle < max;\n }\n if (!t1Inside) {\n addOffsets(c1, true);\n addOffsets(c2, false);\n }\n if (!t2Inside) {\n addOffsets(c3, true);\n addOffsets(c4, false);\n }\n var pt = this.getPoint(), offset = Math.min.apply(Math, offsets), v2 = t1Inside ? c2.getTangentAtTime(t1) : c2.getPointAt(offset).subtract(pt), v1 = t1Inside ? v2.negate() : c1.getPointAt(-offset).subtract(pt), v4 = t2Inside ? c4.getTangentAtTime(t2) : c4.getPointAt(offset).subtract(pt), v3 = t2Inside ? v4.negate() : c3.getPointAt(-offset).subtract(pt), a1 = v1.getAngle(), a2 = v2.getAngle(), a3 = v3.getAngle(), a4 = v4.getAngle();\n return !!(t1Inside ? isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4) && isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3) : isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2) && isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1));\n },\n hasOverlap: function() {\n return !!this._overlap;\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n var get = name + \"At\";\n this[name] = function() {\n var curve = this.getCurve(), time = this.getTime();\n return time != null && curve && curve[get](time, true);\n };\n }, {\n preserve: true\n }), new function() {\n function insert(locations, loc, merge) {\n var length = locations.length, l = 0, r = length - 1;\n function search(index, dir) {\n for(var i = index + dir; i >= -1 && i <= length; i += dir){\n var loc2 = locations[(i % length + length) % length];\n if (!loc.getPoint().isClose(loc2.getPoint(), 1e-7)) break;\n if (loc.equals(loc2)) return loc2;\n }\n return null;\n }\n while(l <= r){\n var m = l + r >>> 1, loc2 = locations[m], found;\n if (merge && (found = loc.equals(loc2) ? loc2 : search(m, -1) || search(m, 1))) {\n if (loc._overlap) found._overlap = found._intersection._overlap = true;\n return found;\n }\n var path1 = loc.getPath(), path2 = loc2.getPath(), diff = path1 !== path2 ? path1._id - path2._id : loc.getIndex() + loc.getTime() - (loc2.getIndex() + loc2.getTime());\n if (diff < 0) r = m - 1;\n else l = m + 1;\n }\n locations.splice(l, 0, loc);\n return loc;\n }\n return {\n statics: {\n insert: insert,\n expand: function(locations) {\n var expanded = locations.slice();\n for(var i = locations.length - 1; i >= 0; i--)insert(expanded, locations[i]._intersection, false);\n return expanded;\n }\n }\n };\n });\n var PathItem = Item.extend({\n _class: \"PathItem\",\n _selectBounds: false,\n _canScaleStroke: true,\n beans: true,\n initialize: function PathItem() {},\n statics: {\n create: function(arg) {\n var data, segments, compound;\n if (Base.isPlainObject(arg)) {\n segments = arg.segments;\n data = arg.pathData;\n } else if (Array.isArray(arg)) segments = arg;\n else if (typeof arg === \"string\") data = arg;\n if (segments) {\n var first = segments[0];\n compound = first && Array.isArray(first[0]);\n } else if (data) compound = (data.match(/m/gi) || []).length > 1 || /z\\s*\\S+/i.test(data);\n var ctor = compound ? CompoundPath : Path;\n return new ctor(arg);\n }\n },\n _asPathItem: function() {\n return this;\n },\n isClockwise: function() {\n return this.getArea() >= 0;\n },\n setClockwise: function(clockwise) {\n if (this.isClockwise() != (clockwise = !!clockwise)) this.reverse();\n },\n setPathData: function(data) {\n var parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig), coords, relative = false, previous, control, current = new Point(), start = new Point();\n function getCoord(index, coord) {\n var val = +coords[index];\n if (relative) val += current[coord];\n return val;\n }\n function getPoint(index) {\n return new Point(getCoord(index, \"x\"), getCoord(index + 1, \"y\"));\n }\n this.clear();\n for(var i = 0, l = parts && parts.length; i < l; i++){\n var part = parts[i], command = part[0], lower = command.toLowerCase();\n coords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n var length = coords && coords.length;\n relative = command === lower;\n if (previous === \"z\" && !/[mz]/.test(lower)) this.moveTo(current);\n switch(lower){\n case \"m\":\n case \"l\":\n var move = lower === \"m\";\n for(var j = 0; j < length; j += 2){\n this[move ? \"moveTo\" : \"lineTo\"](current = getPoint(j));\n if (move) {\n start = current;\n move = false;\n }\n }\n control = current;\n break;\n case \"h\":\n case \"v\":\n var coord = lower === \"h\" ? \"x\" : \"y\";\n current = current.clone();\n for(var j = 0; j < length; j++){\n current[coord] = getCoord(j, coord);\n this.lineTo(current);\n }\n control = current;\n break;\n case \"c\":\n for(var j = 0; j < length; j += 6)this.cubicCurveTo(getPoint(j), control = getPoint(j + 2), current = getPoint(j + 4));\n break;\n case \"s\":\n for(var j = 0; j < length; j += 4){\n this.cubicCurveTo(/[cs]/.test(previous) ? current.multiply(2).subtract(control) : current, control = getPoint(j), current = getPoint(j + 2));\n previous = lower;\n }\n break;\n case \"q\":\n for(var j = 0; j < length; j += 4)this.quadraticCurveTo(control = getPoint(j), current = getPoint(j + 2));\n break;\n case \"t\":\n for(var j = 0; j < length; j += 2){\n this.quadraticCurveTo(control = /[qt]/.test(previous) ? current.multiply(2).subtract(control) : current, current = getPoint(j));\n previous = lower;\n }\n break;\n case \"a\":\n for(var j = 0; j < length; j += 7)this.arcTo(current = getPoint(j + 5), new Size(+coords[j], +coords[j + 1]), +coords[j + 2], +coords[j + 4], +coords[j + 3]);\n break;\n case \"z\":\n this.closePath(1e-12);\n current = start;\n break;\n }\n previous = lower;\n }\n },\n _canComposite: function() {\n return !(this.hasFill() && this.hasStroke());\n },\n _contains: function(point) {\n var winding = point.isInside(this.getBounds({\n internal: true,\n handle: true\n })) ? this._getWinding(point) : {};\n return winding.onPath || !!(this.getFillRule() === \"evenodd\" ? winding.windingL & 1 || winding.windingR & 1 : winding.winding);\n },\n getIntersections: function(path, include, _matrix, _returnFirst) {\n var self1 = this === path || !path, matrix1 = this._matrix._orNullIfIdentity(), matrix2 = self1 ? matrix1 : (_matrix || path._matrix)._orNullIfIdentity();\n return self1 || this.getBounds(matrix1).intersects(path.getBounds(matrix2), 1e-12) ? Curve.getIntersections(this.getCurves(), !self1 && path.getCurves(), include, matrix1, matrix2, _returnFirst) : [];\n },\n getCrossings: function(path) {\n return this.getIntersections(path, function(inter) {\n return inter.isCrossing();\n });\n },\n getNearestLocation: function() {\n var point = Point.read(arguments), curves = this.getCurves(), minDist = Infinity, minLoc = null;\n for(var i = 0, l = curves.length; i < l; i++){\n var loc = curves[i].getNearestLocation(point);\n if (loc._distance < minDist) {\n minDist = loc._distance;\n minLoc = loc;\n }\n }\n return minLoc;\n },\n getNearestPoint: function() {\n var loc = this.getNearestLocation.apply(this, arguments);\n return loc ? loc.getPoint() : loc;\n },\n interpolate: function(from, to, factor) {\n var isPath = !this._children, name = isPath ? \"_segments\" : \"_children\", itemsFrom = from[name], itemsTo = to[name], items = this[name];\n if (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) throw new Error(\"Invalid operands in interpolate() call: \" + from + \", \" + to);\n var current = items.length, length = itemsTo.length;\n if (current < length) {\n var ctor = isPath ? Segment : Path;\n for(var i = current; i < length; i++)this.add(new ctor());\n } else if (current > length) this[isPath ? \"removeSegments\" : \"removeChildren\"](length, current);\n for(var i = 0; i < length; i++)items[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n if (isPath) {\n this.setClosed(from._closed);\n this._changed(9);\n }\n },\n compare: function(path) {\n var ok = false;\n if (path) {\n var paths1 = this._children || [\n this\n ], paths2 = path._children ? path._children.slice() : [\n path\n ], length1 = paths1.length, length2 = paths2.length, matched = [], count = 0;\n ok = true;\n var boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n for(var i1 = length1 - 1; i1 >= 0 && ok; i1--){\n var path1 = paths1[i1];\n ok = false;\n var pathBoundsOverlaps = boundsOverlaps[i1];\n if (pathBoundsOverlaps) {\n for(var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--)if (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n if (!matched[pathBoundsOverlaps[i2]]) {\n matched[pathBoundsOverlaps[i2]] = true;\n count++;\n }\n ok = true;\n }\n }\n }\n ok = ok && count === length2;\n }\n return ok;\n }\n });\n var Path = PathItem.extend({\n _class: \"Path\",\n _serializeFields: {\n segments: [],\n closed: false\n },\n initialize: function Path(arg) {\n this._closed = false;\n this._segments = [];\n this._version = 0;\n var args = arguments, segments = Array.isArray(arg) ? typeof arg[0] === \"object\" ? arg : args : arg && arg.size === undefined && (arg.x !== undefined || arg.point !== undefined) ? args : null;\n if (segments && segments.length > 0) this.setSegments(segments);\n else {\n this._curves = undefined;\n this._segmentSelection = 0;\n if (!segments && typeof arg === \"string\") {\n this.setPathData(arg);\n arg = null;\n }\n }\n this._initialize(!segments && arg);\n },\n _equals: function(item) {\n return this._closed === item._closed && Base.equals(this._segments, item._segments);\n },\n copyContent: function(source) {\n this.setSegments(source._segments);\n this._closed = source._closed;\n },\n _changed: function _changed(flags) {\n _changed.base.call(this, flags);\n if (flags & 8) {\n this._length = this._area = undefined;\n if (flags & 32) this._version++;\n else if (this._curves) for(var i = 0, l = this._curves.length; i < l; i++)this._curves[i]._changed();\n } else if (flags & 64) this._bounds = undefined;\n },\n getStyle: function() {\n var parent = this._parent;\n return (parent instanceof CompoundPath ? parent : this)._style;\n },\n getSegments: function() {\n return this._segments;\n },\n setSegments: function(segments) {\n var fullySelected = this.isFullySelected(), length = segments && segments.length;\n this._segments.length = 0;\n this._segmentSelection = 0;\n this._curves = undefined;\n if (length) {\n var last = segments[length - 1];\n if (typeof last === \"boolean\") {\n this.setClosed(last);\n length--;\n }\n this._add(Segment.readList(segments, 0, {}, length));\n }\n if (fullySelected) this.setFullySelected(true);\n },\n getFirstSegment: function() {\n return this._segments[0];\n },\n getLastSegment: function() {\n return this._segments[this._segments.length - 1];\n },\n getCurves: function() {\n var curves = this._curves, segments = this._segments;\n if (!curves) {\n var length = this._countCurves();\n curves = this._curves = new Array(length);\n for(var i = 0; i < length; i++)curves[i] = new Curve(this, segments[i], segments[i + 1] || segments[0]);\n }\n return curves;\n },\n getFirstCurve: function() {\n return this.getCurves()[0];\n },\n getLastCurve: function() {\n var curves = this.getCurves();\n return curves[curves.length - 1];\n },\n isClosed: function() {\n return this._closed;\n },\n setClosed: function(closed) {\n if (this._closed != (closed = !!closed)) {\n this._closed = closed;\n if (this._curves) {\n var length = this._curves.length = this._countCurves();\n if (closed) this._curves[length - 1] = new Curve(this, this._segments[length - 1], this._segments[0]);\n }\n this._changed(41);\n }\n }\n }, {\n beans: true,\n getPathData: function(_matrix, _precision) {\n var segments = this._segments, length = segments.length, f = new Formatter(_precision), coords = new Array(6), first = true, curX, curY, prevX, prevY, inX, inY, outX, outY, parts = [];\n function addSegment(segment, skipLine) {\n segment._transformCoordinates(_matrix, coords);\n curX = coords[0];\n curY = coords[1];\n if (first) {\n parts.push(\"M\" + f.pair(curX, curY));\n first = false;\n } else {\n inX = coords[2];\n inY = coords[3];\n if (inX === curX && inY === curY && outX === prevX && outY === prevY) {\n if (!skipLine) {\n var dx = curX - prevX, dy = curY - prevY;\n parts.push(dx === 0 ? \"v\" + f.number(dy) : dy === 0 ? \"h\" + f.number(dx) : \"l\" + f.pair(dx, dy));\n }\n } else parts.push(\"c\" + f.pair(outX - prevX, outY - prevY) + \" \" + f.pair(inX - prevX, inY - prevY) + \" \" + f.pair(curX - prevX, curY - prevY));\n }\n prevX = curX;\n prevY = curY;\n outX = coords[4];\n outY = coords[5];\n }\n if (!length) return \"\";\n for(var i = 0; i < length; i++)addSegment(segments[i]);\n if (this._closed && length > 0) {\n addSegment(segments[0], true);\n parts.push(\"z\");\n }\n return parts.join(\"\");\n },\n isEmpty: function() {\n return !this._segments.length;\n },\n _transformContent: function(matrix) {\n var segments = this._segments, coords = new Array(6);\n for(var i = 0, l = segments.length; i < l; i++)segments[i]._transformCoordinates(matrix, coords, true);\n return true;\n },\n _add: function(segs, index) {\n var segments = this._segments, curves = this._curves, amount = segs.length, append = index == null, index = append ? segments.length : index;\n for(var i = 0; i < amount; i++){\n var segment = segs[i];\n if (segment._path) segment = segs[i] = segment.clone();\n segment._path = this;\n segment._index = index + i;\n if (segment._selection) this._updateSelection(segment, 0, segment._selection);\n }\n if (append) Base.push(segments, segs);\n else {\n segments.splice.apply(segments, [\n index,\n 0\n ].concat(segs));\n for(var i = index + amount, l = segments.length; i < l; i++)segments[i]._index = i;\n }\n if (curves) {\n var total = this._countCurves(), start = index > 0 && index + amount - 1 === total ? index - 1 : index, insert = start, end = Math.min(start + amount, total);\n if (segs._curves) {\n curves.splice.apply(curves, [\n start,\n 0\n ].concat(segs._curves));\n insert += segs._curves.length;\n }\n for(var i = insert; i < end; i++)curves.splice(i, 0, new Curve(this, null, null));\n this._adjustCurves(start, end);\n }\n this._changed(41);\n return segs;\n },\n _adjustCurves: function(start, end) {\n var segments = this._segments, curves = this._curves, curve;\n for(var i = start; i < end; i++){\n curve = curves[i];\n curve._path = this;\n curve._segment1 = segments[i];\n curve._segment2 = segments[i + 1] || segments[0];\n curve._changed();\n }\n if (curve = curves[this._closed && !start ? segments.length - 1 : start - 1]) {\n curve._segment2 = segments[start] || segments[0];\n curve._changed();\n }\n if (curve = curves[end]) {\n curve._segment1 = segments[end];\n curve._changed();\n }\n },\n _countCurves: function() {\n var length = this._segments.length;\n return !this._closed && length > 0 ? length - 1 : length;\n },\n add: function(segment1) {\n var args = arguments;\n return args.length > 1 && typeof segment1 !== \"number\" ? this._add(Segment.readList(args)) : this._add([\n Segment.read(args)\n ])[0];\n },\n insert: function(index, segment1) {\n var args = arguments;\n return args.length > 2 && typeof segment1 !== \"number\" ? this._add(Segment.readList(args, 1), index) : this._add([\n Segment.read(args, 1)\n ], index)[0];\n },\n addSegment: function() {\n return this._add([\n Segment.read(arguments)\n ])[0];\n },\n insertSegment: function(index) {\n return this._add([\n Segment.read(arguments, 1)\n ], index)[0];\n },\n addSegments: function(segments) {\n return this._add(Segment.readList(segments));\n },\n insertSegments: function(index, segments) {\n return this._add(Segment.readList(segments), index);\n },\n removeSegment: function(index) {\n return this.removeSegments(index, index + 1)[0] || null;\n },\n removeSegments: function(start, end, _includeCurves) {\n start = start || 0;\n end = Base.pick(end, this._segments.length);\n var segments = this._segments, curves = this._curves, count = segments.length, removed = segments.splice(start, end - start), amount = removed.length;\n if (!amount) return removed;\n for(var i = 0; i < amount; i++){\n var segment = removed[i];\n if (segment._selection) this._updateSelection(segment, segment._selection, 0);\n segment._index = segment._path = null;\n }\n for(var i = start, l = segments.length; i < l; i++)segments[i]._index = i;\n if (curves) {\n var index = start > 0 && end === count + (this._closed ? 1 : 0) ? start - 1 : start, curves = curves.splice(index, amount);\n for(var i = curves.length - 1; i >= 0; i--)curves[i]._path = null;\n if (_includeCurves) removed._curves = curves.slice(1);\n this._adjustCurves(index, index);\n }\n this._changed(41);\n return removed;\n },\n clear: \"#removeSegments\",\n hasHandles: function() {\n var segments = this._segments;\n for(var i = 0, l = segments.length; i < l; i++){\n if (segments[i].hasHandles()) return true;\n }\n return false;\n },\n clearHandles: function() {\n var segments = this._segments;\n for(var i = 0, l = segments.length; i < l; i++)segments[i].clearHandles();\n },\n getLength: function() {\n if (this._length == null) {\n var curves = this.getCurves(), length = 0;\n for(var i = 0, l = curves.length; i < l; i++)length += curves[i].getLength();\n this._length = length;\n }\n return this._length;\n },\n getArea: function() {\n var area = this._area;\n if (area == null) {\n var segments = this._segments, closed = this._closed;\n area = 0;\n for(var i = 0, l = segments.length; i < l; i++){\n var last = i + 1 === l;\n area += Curve.getArea(Curve.getValues(segments[i], segments[last ? 0 : i + 1], null, last && !closed));\n }\n this._area = area;\n }\n return area;\n },\n isFullySelected: function() {\n var length = this._segments.length;\n return this.isSelected() && length > 0 && this._segmentSelection === length * 7;\n },\n setFullySelected: function(selected) {\n if (selected) this._selectSegments(true);\n this.setSelected(selected);\n },\n setSelection: function setSelection(selection) {\n if (!(selection & 1)) this._selectSegments(false);\n setSelection.base.call(this, selection);\n },\n _selectSegments: function(selected) {\n var segments = this._segments, length = segments.length, selection = selected ? 7 : 0;\n this._segmentSelection = selection * length;\n for(var i = 0; i < length; i++)segments[i]._selection = selection;\n },\n _updateSelection: function(segment, oldSelection, newSelection) {\n segment._selection = newSelection;\n var selection = this._segmentSelection += newSelection - oldSelection;\n if (selection > 0) this.setSelected(true);\n },\n divideAt: function(location) {\n var loc = this.getLocationAt(location), curve;\n return loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset())) ? curve._segment1 : null;\n },\n splitAt: function(location) {\n var loc = this.getLocationAt(location), index = loc && loc.index, time = loc && loc.time, tMin = 1e-8, tMax = 1 - tMin;\n if (time > tMax) {\n index++;\n time = 0;\n }\n var curves = this.getCurves();\n if (index >= 0 && index < curves.length) {\n if (time >= tMin) curves[index++].divideAtTime(time);\n var segs = this.removeSegments(index, this._segments.length, true), path;\n if (this._closed) {\n this.setClosed(false);\n path = this;\n } else {\n path = new Path(Item.NO_INSERT);\n path.insertAbove(this);\n path.copyAttributes(this);\n }\n path._add(segs, 0);\n this.addSegment(segs[0]);\n return path;\n }\n return null;\n },\n split: function(index, time) {\n var curve, location = time === undefined ? index : (curve = this.getCurves()[index]) && curve.getLocationAtTime(time);\n return location != null ? this.splitAt(location) : null;\n },\n join: function(path, tolerance) {\n var epsilon = tolerance || 0;\n if (path && path !== this) {\n var segments = path._segments, last1 = this.getLastSegment(), last2 = path.getLastSegment();\n if (!last2) return this;\n if (last1 && last1._point.isClose(last2._point, epsilon)) path.reverse();\n var first2 = path.getFirstSegment();\n if (last1 && last1._point.isClose(first2._point, epsilon)) {\n last1.setHandleOut(first2._handleOut);\n this._add(segments.slice(1));\n } else {\n var first1 = this.getFirstSegment();\n if (first1 && first1._point.isClose(first2._point, epsilon)) path.reverse();\n last2 = path.getLastSegment();\n if (first1 && first1._point.isClose(last2._point, epsilon)) {\n first1.setHandleIn(last2._handleIn);\n this._add(segments.slice(0, segments.length - 1), 0);\n } else this._add(segments.slice());\n }\n if (path._closed) this._add([\n segments[0]\n ]);\n path.remove();\n }\n var first = this.getFirstSegment(), last = this.getLastSegment();\n if (first !== last && first._point.isClose(last._point, epsilon)) {\n first.setHandleIn(last._handleIn);\n last.remove();\n this.setClosed(true);\n }\n return this;\n },\n reduce: function(options) {\n var curves = this.getCurves(), simplify = options && options.simplify, tolerance = simplify ? 1e-7 : 0;\n for(var i = curves.length - 1; i >= 0; i--){\n var curve = curves[i];\n if (!curve.hasHandles() && (!curve.hasLength(tolerance) || simplify && curve.isCollinear(curve.getNext()))) curve.remove();\n }\n return this;\n },\n reverse: function() {\n this._segments.reverse();\n for(var i = 0, l = this._segments.length; i < l; i++){\n var segment = this._segments[i];\n var handleIn = segment._handleIn;\n segment._handleIn = segment._handleOut;\n segment._handleOut = handleIn;\n segment._index = i;\n }\n this._curves = null;\n this._changed(9);\n },\n flatten: function(flatness) {\n var flattener = new PathFlattener(this, flatness || 0.25, 256, true), parts = flattener.parts, length = parts.length, segments = [];\n for(var i = 0; i < length; i++)segments.push(new Segment(parts[i].curve.slice(0, 2)));\n if (!this._closed && length > 0) segments.push(new Segment(parts[length - 1].curve.slice(6)));\n this.setSegments(segments);\n },\n simplify: function(tolerance) {\n var segments = new PathFitter(this).fit(tolerance || 2.5);\n if (segments) this.setSegments(segments);\n return !!segments;\n },\n smooth: function(options) {\n var that = this, opts = options || {}, type = opts.type || \"asymmetric\", segments = this._segments, length = segments.length, closed = this._closed;\n function getIndex(value, _default) {\n var index = value && value.index;\n if (index != null) {\n var path = value.path;\n if (path && path !== that) throw new Error(value._class + \" \" + index + \" of \" + path + \" is not part of \" + that);\n if (_default && value instanceof Curve) index++;\n } else index = typeof value === \"number\" ? value : _default;\n return Math.min(index < 0 && closed ? index % length : index < 0 ? index + length : index, length - 1);\n }\n var loop = closed && opts.from === undefined && opts.to === undefined, from = getIndex(opts.from, 0), to = getIndex(opts.to, length - 1);\n if (from > to) {\n if (closed) from -= length;\n else {\n var tmp = from;\n from = to;\n to = tmp;\n }\n }\n if (/^(?:asymmetric|continuous)$/.test(type)) {\n var asymmetric = type === \"asymmetric\", min = Math.min, amount = to - from + 1, n = amount - 1, padding = loop ? min(amount, 4) : 1, paddingLeft = padding, paddingRight = padding, knots = [];\n if (!closed) {\n paddingLeft = min(1, from);\n paddingRight = min(1, length - to - 1);\n }\n n += paddingLeft + paddingRight;\n if (n <= 1) return;\n for(var i = 0, j = from - paddingLeft; i <= n; i++, j++)knots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n var x = knots[0]._x + 2 * knots[1]._x, y = knots[0]._y + 2 * knots[1]._y, f = 2, n_1 = n - 1, rx = [\n x\n ], ry = [\n y\n ], rf = [\n f\n ], px = [], py = [];\n for(var i = 1; i < n; i++){\n var internal = i < n_1, a = internal ? 1 : asymmetric ? 1 : 2, b = internal ? 4 : asymmetric ? 2 : 7, u = internal ? 4 : asymmetric ? 3 : 8, v = internal ? 2 : asymmetric ? 0 : 1, m = a / f;\n f = rf[i] = b - m;\n x = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n y = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n }\n px[n_1] = rx[n_1] / rf[n_1];\n py[n_1] = ry[n_1] / rf[n_1];\n for(var i = n - 2; i >= 0; i--){\n px[i] = (rx[i] - px[i + 1]) / rf[i];\n py[i] = (ry[i] - py[i + 1]) / rf[i];\n }\n px[n] = (3 * knots[n]._x - px[n_1]) / 2;\n py[n] = (3 * knots[n]._y - py[n_1]) / 2;\n for(var i = paddingLeft, max = n - paddingRight, j = from; i <= max; i++, j++){\n var segment = segments[j < 0 ? j + length : j], pt = segment._point, hx = px[i] - pt._x, hy = py[i] - pt._y;\n if (loop || i < max) segment.setHandleOut(hx, hy);\n if (loop || i > paddingLeft) segment.setHandleIn(-hx, -hy);\n }\n } else for(var i = from; i <= to; i++)segments[i < 0 ? i + length : i].smooth(opts, !loop && i === from, !loop && i === to);\n },\n toShape: function(insert) {\n if (!this._closed) return null;\n var segments = this._segments, type, size, radius, topCenter;\n function isCollinear(i, j) {\n var seg1 = segments[i], seg2 = seg1.getNext(), seg3 = segments[j], seg4 = seg3.getNext();\n return seg1._handleOut.isZero() && seg2._handleIn.isZero() && seg3._handleOut.isZero() && seg4._handleIn.isZero() && seg2._point.subtract(seg1._point).isCollinear(seg4._point.subtract(seg3._point));\n }\n function isOrthogonal(i) {\n var seg2 = segments[i], seg1 = seg2.getPrevious(), seg3 = seg2.getNext();\n return seg1._handleOut.isZero() && seg2._handleIn.isZero() && seg2._handleOut.isZero() && seg3._handleIn.isZero() && seg2._point.subtract(seg1._point).isOrthogonal(seg3._point.subtract(seg2._point));\n }\n function isArc(i) {\n var seg1 = segments[i], seg2 = seg1.getNext(), handle1 = seg1._handleOut, handle2 = seg2._handleIn, kappa = 0.5522847498307936;\n if (handle1.isOrthogonal(handle2)) {\n var pt1 = seg1._point, pt2 = seg2._point, corner = new Line(pt1, handle1, true).intersect(new Line(pt2, handle2, true), true);\n return corner && Numerical.isZero(handle1.getLength() / corner.subtract(pt1).getLength() - kappa) && Numerical.isZero(handle2.getLength() / corner.subtract(pt2).getLength() - kappa);\n }\n return false;\n }\n function getDistance(i, j) {\n return segments[i]._point.getDistance(segments[j]._point);\n }\n if (!this.hasHandles() && segments.length === 4 && isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n type = Shape.Rectangle;\n size = new Size(getDistance(0, 3), getDistance(0, 1));\n topCenter = segments[1]._point.add(segments[2]._point).divide(2);\n } else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4) && isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n type = Shape.Rectangle;\n size = new Size(getDistance(1, 6), getDistance(0, 3));\n radius = size.subtract(new Size(getDistance(0, 7), getDistance(1, 2))).divide(2);\n topCenter = segments[3]._point.add(segments[4]._point).divide(2);\n } else if (segments.length === 4 && isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n if (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n type = Shape.Circle;\n radius = getDistance(0, 2) / 2;\n } else {\n type = Shape.Ellipse;\n radius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n }\n topCenter = segments[1]._point;\n }\n if (type) {\n var center = this.getPosition(true), shape = new type({\n center: center,\n size: size,\n radius: radius,\n insert: false\n });\n shape.copyAttributes(this, true);\n shape._matrix.prepend(this._matrix);\n shape.rotate(topCenter.subtract(center).getAngle() + 90);\n if (insert === undefined || insert) shape.insertAbove(this);\n return shape;\n }\n return null;\n },\n toPath: \"#clone\",\n compare: function compare(path) {\n if (!path || path instanceof CompoundPath) return compare.base.call(this, path);\n var curves1 = this.getCurves(), curves2 = path.getCurves(), length1 = curves1.length, length2 = curves2.length;\n if (!length1 || !length2) return length1 == length2;\n var v1 = curves1[0].getValues(), values2 = [], pos1 = 0, pos2, end1 = 0, end2;\n for(var i = 0; i < length2; i++){\n var v2 = curves2[i].getValues();\n values2.push(v2);\n var overlaps = Curve.getOverlaps(v1, v2);\n if (overlaps) {\n pos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n end2 = overlaps[0][1];\n break;\n }\n }\n var abs = Math.abs, epsilon = 1e-8, v2 = values2[pos2], start2;\n while(v1 && v2){\n var overlaps = Curve.getOverlaps(v1, v2);\n if (overlaps) {\n var t1 = overlaps[0][0];\n if (abs(t1 - end1) < epsilon) {\n end1 = overlaps[1][0];\n if (end1 === 1) {\n v1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n end1 = 0;\n }\n var t2 = overlaps[0][1];\n if (abs(t2 - end2) < epsilon) {\n if (!start2) start2 = [\n pos2,\n t2\n ];\n end2 = overlaps[1][1];\n if (end2 === 1) {\n if (++pos2 >= length2) pos2 = 0;\n v2 = values2[pos2] || curves2[pos2].getValues();\n end2 = 0;\n }\n if (!v1) return start2[0] === pos2 && start2[1] === end2;\n continue;\n }\n }\n }\n break;\n }\n return false;\n },\n _hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n var that = this, style = this.getStyle(), segments = this._segments, numSegments = segments.length, closed = this._closed, tolerancePadding = options._tolerancePadding, strokePadding = tolerancePadding, join, cap, miterLimit, area, loc, res, hitStroke = options.stroke && style.hasStroke(), hitFill = options.fill && style.hasFill(), hitCurves = options.curves, strokeRadius = hitStroke ? style.getStrokeWidth() / 2 : hitFill && options.tolerance > 0 || hitCurves ? 0 : null;\n if (strokeRadius !== null) {\n if (strokeRadius > 0) {\n join = style.getStrokeJoin();\n cap = style.getStrokeCap();\n miterLimit = style.getMiterLimit();\n strokePadding = strokePadding.add(Path._getStrokePadding(strokeRadius, strokeMatrix));\n } else join = cap = \"round\";\n }\n function isCloseEnough(pt, padding) {\n return point.subtract(pt).divide(padding).length <= 1;\n }\n function checkSegmentPoint(seg, pt, name) {\n if (!options.selected || pt.isSelected()) {\n var anchor = seg._point;\n if (pt !== anchor) pt = pt.add(anchor);\n if (isCloseEnough(pt, strokePadding)) return new HitResult(name, that, {\n segment: seg,\n point: pt\n });\n }\n }\n function checkSegmentPoints(seg, ends) {\n return (ends || options.segments) && checkSegmentPoint(seg, seg._point, \"segment\") || !ends && options.handles && (checkSegmentPoint(seg, seg._handleIn, \"handle-in\") || checkSegmentPoint(seg, seg._handleOut, \"handle-out\"));\n }\n function addToArea(point) {\n area.add(point);\n }\n function checkSegmentStroke(segment) {\n var isJoin = closed || segment._index > 0 && segment._index < numSegments - 1;\n if ((isJoin ? join : cap) === \"round\") return isCloseEnough(segment._point, strokePadding);\n else {\n area = new Path({\n internal: true,\n closed: true\n });\n if (isJoin) {\n if (!segment.isSmooth()) Path._addBevelJoin(segment, join, strokeRadius, miterLimit, null, strokeMatrix, addToArea, true);\n } else if (cap === \"square\") Path._addSquareCap(segment, cap, strokeRadius, null, strokeMatrix, addToArea, true);\n if (!area.isEmpty()) {\n var loc;\n return area.contains(point) || (loc = area.getNearestLocation(point)) && isCloseEnough(loc.getPoint(), tolerancePadding);\n }\n }\n }\n if (options.ends && !options.segments && !closed) {\n if (res = checkSegmentPoints(segments[0], true) || checkSegmentPoints(segments[numSegments - 1], true)) return res;\n } else if (options.segments || options.handles) {\n for(var i = 0; i < numSegments; i++)if (res = checkSegmentPoints(segments[i])) return res;\n }\n if (strokeRadius !== null) {\n loc = this.getNearestLocation(point);\n if (loc) {\n var time = loc.getTime();\n if (time === 0 || time === 1 && numSegments > 1) {\n if (!checkSegmentStroke(loc.getSegment())) loc = null;\n } else if (!isCloseEnough(loc.getPoint(), strokePadding)) loc = null;\n }\n if (!loc && join === \"miter\" && numSegments > 1) for(var i = 0; i < numSegments; i++){\n var segment = segments[i];\n if (point.getDistance(segment._point) <= miterLimit * strokeRadius && checkSegmentStroke(segment)) {\n loc = segment.getLocation();\n break;\n }\n }\n }\n return !loc && hitFill && this._contains(point) || loc && !hitStroke && !hitCurves ? new HitResult(\"fill\", this) : loc ? new HitResult(hitStroke ? \"stroke\" : \"curve\", this, {\n location: loc,\n point: loc.getPoint()\n }) : null;\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n this[name + \"At\"] = function(offset) {\n var loc = this.getLocationAt(offset);\n return loc && loc[name]();\n };\n }, {\n beans: false,\n getLocationOf: function() {\n var point = Point.read(arguments), curves = this.getCurves();\n for(var i = 0, l = curves.length; i < l; i++){\n var loc = curves[i].getLocationOf(point);\n if (loc) return loc;\n }\n return null;\n },\n getOffsetOf: function() {\n var loc = this.getLocationOf.apply(this, arguments);\n return loc ? loc.getOffset() : null;\n },\n getLocationAt: function(offset) {\n if (typeof offset === \"number\") {\n var curves = this.getCurves(), length = 0;\n for(var i = 0, l = curves.length; i < l; i++){\n var start = length, curve = curves[i];\n length += curve.getLength();\n if (length > offset) return curve.getLocationAt(offset - start);\n }\n if (curves.length > 0 && offset <= this.getLength()) return new CurveLocation(curves[curves.length - 1], 1);\n } else if (offset && offset.getPath && offset.getPath() === this) return offset;\n return null;\n },\n getOffsetsWithTangent: function() {\n var tangent = Point.read(arguments);\n if (tangent.isZero()) return [];\n var offsets = [];\n var curveStart = 0;\n var curves = this.getCurves();\n for(var i = 0, l = curves.length; i < l; i++){\n var curve = curves[i];\n var curveTimes = curve.getTimesWithTangent(tangent);\n for(var j = 0, m = curveTimes.length; j < m; j++){\n var offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n if (offsets.indexOf(offset) < 0) offsets.push(offset);\n }\n curveStart += curve.length;\n }\n return offsets;\n }\n }), new function() {\n function drawHandles(ctx, segments, matrix, size) {\n if (size <= 0) return;\n var half = size / 2, miniSize = size - 2, miniHalf = half - 1, coords = new Array(6), pX, pY;\n function drawHandle(index) {\n var hX = coords[index], hY = coords[index + 1];\n if (pX != hX || pY != hY) {\n ctx.beginPath();\n ctx.moveTo(pX, pY);\n ctx.lineTo(hX, hY);\n ctx.stroke();\n ctx.beginPath();\n ctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n ctx.fill();\n }\n }\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i], selection = segment._selection;\n segment._transformCoordinates(matrix, coords);\n pX = coords[0];\n pY = coords[1];\n if (selection & 2) drawHandle(2);\n if (selection & 4) drawHandle(4);\n ctx.fillRect(pX - half, pY - half, size, size);\n if (miniSize > 0 && !(selection & 1)) {\n var fillStyle = ctx.fillStyle;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n ctx.fillStyle = fillStyle;\n }\n }\n }\n function drawSegments(ctx, path, matrix) {\n var segments = path._segments, length = segments.length, coords = new Array(6), first = true, curX, curY, prevX, prevY, inX, inY, outX, outY;\n function drawSegment(segment) {\n if (matrix) {\n segment._transformCoordinates(matrix, coords);\n curX = coords[0];\n curY = coords[1];\n } else {\n var point = segment._point;\n curX = point._x;\n curY = point._y;\n }\n if (first) {\n ctx.moveTo(curX, curY);\n first = false;\n } else {\n if (matrix) {\n inX = coords[2];\n inY = coords[3];\n } else {\n var handle = segment._handleIn;\n inX = curX + handle._x;\n inY = curY + handle._y;\n }\n if (inX === curX && inY === curY && outX === prevX && outY === prevY) ctx.lineTo(curX, curY);\n else ctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n }\n prevX = curX;\n prevY = curY;\n if (matrix) {\n outX = coords[4];\n outY = coords[5];\n } else {\n var handle = segment._handleOut;\n outX = prevX + handle._x;\n outY = prevY + handle._y;\n }\n }\n for(var i = 0; i < length; i++)drawSegment(segments[i]);\n if (path._closed && length > 0) drawSegment(segments[0]);\n }\n return {\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var dontStart = param.dontStart, dontPaint = param.dontFinish || param.clip, style = this.getStyle(), hasFill = style.hasFill(), hasStroke = style.hasStroke(), dashArray = style.getDashArray(), dashLength = !paper.support.nativeDash && hasStroke && dashArray && dashArray.length;\n if (!dontStart) ctx.beginPath();\n if (hasFill || hasStroke && !dashLength || dontPaint) {\n drawSegments(ctx, this, strokeMatrix);\n if (this._closed) ctx.closePath();\n }\n function getOffset(i) {\n return dashArray[(i % dashLength + dashLength) % dashLength];\n }\n if (!dontPaint && (hasFill || hasStroke)) {\n this._setStyles(ctx, param, viewMatrix);\n if (hasFill) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) {\n if (dashLength) {\n if (!dontStart) ctx.beginPath();\n var flattener = new PathFlattener(this, 0.25, 32, false, strokeMatrix), length = flattener.length, from = -style.getDashOffset(), to, i = 0;\n while(from > 0)from -= getOffset(i--) + getOffset(i--);\n while(from < length){\n to = from + getOffset(i++);\n if (from > 0 || to > 0) flattener.drawPart(ctx, Math.max(from, 0), Math.max(to, 0));\n from = to + getOffset(i++);\n }\n }\n ctx.stroke();\n }\n }\n },\n _drawSelected: function(ctx, matrix) {\n ctx.beginPath();\n drawSegments(ctx, this, matrix);\n ctx.stroke();\n drawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n }\n };\n }, new function() {\n function getCurrentSegment(that) {\n var segments = that._segments;\n if (!segments.length) throw new Error(\"Use a moveTo() command first\");\n return segments[segments.length - 1];\n }\n return {\n moveTo: function() {\n var segments = this._segments;\n if (segments.length === 1) this.removeSegment(0);\n if (!segments.length) this._add([\n new Segment(Point.read(arguments))\n ]);\n },\n moveBy: function() {\n throw new Error(\"moveBy() is unsupported on Path items.\");\n },\n lineTo: function() {\n this._add([\n new Segment(Point.read(arguments))\n ]);\n },\n cubicCurveTo: function() {\n var args = arguments, handle1 = Point.read(args), handle2 = Point.read(args), to = Point.read(args), current = getCurrentSegment(this);\n current.setHandleOut(handle1.subtract(current._point));\n this._add([\n new Segment(to, handle2.subtract(to))\n ]);\n },\n quadraticCurveTo: function() {\n var args = arguments, handle = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.cubicCurveTo(handle.add(current.subtract(handle).multiply(1 / 3)), handle.add(to.subtract(handle).multiply(1 / 3)), to);\n },\n curveTo: function() {\n var args = arguments, through = Point.read(args), to = Point.read(args), t = Base.pick(Base.read(args), 0.5), t1 = 1 - t, current = getCurrentSegment(this)._point, handle = through.subtract(current.multiply(t1 * t1)).subtract(to.multiply(t * t)).divide(2 * t * t1);\n if (handle.isNaN()) throw new Error(\"Cannot put a curve through points with parameter = \" + t);\n this.quadraticCurveTo(handle, to);\n },\n arcTo: function() {\n var args = arguments, abs = Math.abs, sqrt = Math.sqrt, current = getCurrentSegment(this), from = current._point, to = Point.read(args), through, peek = Base.peek(args), clockwise = Base.pick(peek, true), center, extent, vector, matrix;\n if (typeof clockwise === \"boolean\") var middle = from.add(to).divide(2), through = middle.add(middle.subtract(from).rotate(clockwise ? -90 : 90));\n else if (Base.remain(args) <= 2) {\n through = to;\n to = Point.read(args);\n } else if (!from.equals(to)) {\n var radius = Size.read(args), isZero = Numerical.isZero;\n if (isZero(radius.width) || isZero(radius.height)) return this.lineTo(to);\n var rotation = Base.read(args), clockwise = !!Base.read(args), large = !!Base.read(args), middle = from.add(to).divide(2), pt = from.subtract(middle).rotate(-rotation), x = pt.x, y = pt.y, rx = abs(radius.width), ry = abs(radius.height), rxSq = rx * rx, rySq = ry * ry, xSq = x * x, ySq = y * y;\n var factor = sqrt(xSq / rxSq + ySq / rySq);\n if (factor > 1) {\n rx *= factor;\n ry *= factor;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n factor = (rxSq * rySq - rxSq * ySq - rySq * xSq) / (rxSq * ySq + rySq * xSq);\n if (abs(factor) < 1e-12) factor = 0;\n if (factor < 0) throw new Error(\"Cannot create an arc with the given arguments\");\n center = new Point(rx * y / ry, -ry * x / rx).multiply((large === clockwise ? -1 : 1) * sqrt(factor)).rotate(rotation).add(middle);\n matrix = new Matrix().translate(center).rotate(rotation).scale(rx, ry);\n vector = matrix._inverseTransform(from);\n extent = vector.getDirectedAngle(matrix._inverseTransform(to));\n if (!clockwise && extent > 0) extent -= 360;\n else if (clockwise && extent < 0) extent += 360;\n }\n if (through) {\n var l1 = new Line(from.add(through).divide(2), through.subtract(from).rotate(90), true), l2 = new Line(through.add(to).divide(2), to.subtract(through).rotate(90), true), line = new Line(from, to), throughSide = line.getSide(through);\n center = l1.intersect(l2, true);\n if (!center) {\n if (!throughSide) return this.lineTo(to);\n throw new Error(\"Cannot create an arc with the given arguments\");\n }\n vector = from.subtract(center);\n extent = vector.getDirectedAngle(to.subtract(center));\n var centerSide = line.getSide(center, true);\n if (centerSide === 0) extent = throughSide * abs(extent);\n else if (throughSide === centerSide) extent += extent < 0 ? 360 : -360;\n }\n if (extent) {\n var epsilon = 1e-5, ext = abs(extent), count = ext >= 360 ? 4 : Math.ceil((ext - epsilon) / 90), inc = extent / count, half = inc * Math.PI / 360, z = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)), segments = [];\n for(var i = 0; i <= count; i++){\n var pt = to, out = null;\n if (i < count) {\n out = vector.rotate(90).multiply(z);\n if (matrix) {\n pt = matrix._transformPoint(vector);\n out = matrix._transformPoint(vector.add(out)).subtract(pt);\n } else pt = center.add(vector);\n }\n if (!i) current.setHandleOut(out);\n else {\n var _in = vector.rotate(-90).multiply(z);\n if (matrix) _in = matrix._transformPoint(vector.add(_in)).subtract(pt);\n segments.push(new Segment(pt, _in, out));\n }\n vector = vector.rotate(inc);\n }\n this._add(segments);\n }\n },\n lineBy: function() {\n var to = Point.read(arguments), current = getCurrentSegment(this)._point;\n this.lineTo(current.add(to));\n },\n curveBy: function() {\n var args = arguments, through = Point.read(args), to = Point.read(args), parameter = Base.read(args), current = getCurrentSegment(this)._point;\n this.curveTo(current.add(through), current.add(to), parameter);\n },\n cubicCurveBy: function() {\n var args = arguments, handle1 = Point.read(args), handle2 = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.cubicCurveTo(current.add(handle1), current.add(handle2), current.add(to));\n },\n quadraticCurveBy: function() {\n var args = arguments, handle = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.quadraticCurveTo(current.add(handle), current.add(to));\n },\n arcBy: function() {\n var args = arguments, current = getCurrentSegment(this)._point, point = current.add(Point.read(args)), clockwise = Base.pick(Base.peek(args), true);\n if (typeof clockwise === \"boolean\") this.arcTo(point, clockwise);\n else this.arcTo(point, current.add(Point.read(args)));\n },\n closePath: function(tolerance) {\n this.setClosed(true);\n this.join(this, tolerance);\n }\n };\n }, {\n _getBounds: function(matrix, options) {\n var method = options.handle ? \"getHandleBounds\" : options.stroke ? \"getStrokeBounds\" : \"getBounds\";\n return Path[method](this._segments, this._closed, this, matrix, options);\n },\n statics: {\n getBounds: function(segments, closed, path, matrix, options, strokePadding) {\n var first = segments[0];\n if (!first) return new Rectangle();\n var coords = new Array(6), prevCoords = first._transformCoordinates(matrix, new Array(6)), min = prevCoords.slice(0, 2), max = min.slice(), roots = new Array(2);\n function processSegment(segment) {\n segment._transformCoordinates(matrix, coords);\n for(var i = 0; i < 2; i++)Curve._addBounds(prevCoords[i], prevCoords[i + 4], coords[i + 2], coords[i], i, strokePadding ? strokePadding[i] : 0, min, max, roots);\n var tmp = prevCoords;\n prevCoords = coords;\n coords = tmp;\n }\n for(var i = 1, l = segments.length; i < l; i++)processSegment(segments[i]);\n if (closed) processSegment(first);\n return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n getStrokeBounds: function(segments, closed, path, matrix, options) {\n var style = path.getStyle(), stroke = style.hasStroke(), strokeWidth = style.getStrokeWidth(), strokeMatrix = stroke && path._getStrokeMatrix(matrix, options), strokePadding = stroke && Path._getStrokePadding(strokeWidth, strokeMatrix), bounds = Path.getBounds(segments, closed, path, matrix, options, strokePadding);\n if (!stroke) return bounds;\n var strokeRadius = strokeWidth / 2, join = style.getStrokeJoin(), cap = style.getStrokeCap(), miterLimit = style.getMiterLimit(), joinBounds = new Rectangle(new Size(strokePadding));\n function addPoint(point) {\n bounds = bounds.include(point);\n }\n function addRound(segment) {\n bounds = bounds.unite(joinBounds.setCenter(segment._point.transform(matrix)));\n }\n function addJoin(segment, join) {\n if (join === \"round\" || segment.isSmooth()) addRound(segment);\n else Path._addBevelJoin(segment, join, strokeRadius, miterLimit, matrix, strokeMatrix, addPoint);\n }\n function addCap(segment, cap) {\n if (cap === \"round\") addRound(segment);\n else Path._addSquareCap(segment, cap, strokeRadius, matrix, strokeMatrix, addPoint);\n }\n var length = segments.length - (closed ? 0 : 1);\n if (length > 0) {\n for(var i = 1; i < length; i++)addJoin(segments[i], join);\n if (closed) addJoin(segments[0], join);\n else {\n addCap(segments[0], cap);\n addCap(segments[segments.length - 1], cap);\n }\n }\n return bounds;\n },\n _getStrokePadding: function(radius, matrix) {\n if (!matrix) return [\n radius,\n radius\n ];\n var hor = new Point(radius, 0).transform(matrix), ver = new Point(0, radius).transform(matrix), phi = hor.getAngleInRadians(), a = hor.getLength(), b = ver.getLength();\n var sin = Math.sin(phi), cos = Math.cos(phi), tan = Math.tan(phi), tx = Math.atan2(b * tan, a), ty = Math.atan2(b, tan * a);\n return [\n Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n Math.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)\n ];\n },\n _addBevelJoin: function(segment, join, radius, miterLimit, matrix, strokeMatrix, addPoint, isArea) {\n var curve2 = segment.getCurve(), curve1 = curve2.getPrevious(), point = curve2.getPoint1().transform(matrix), normal1 = curve1.getNormalAtTime(1).multiply(radius).transform(strokeMatrix), normal2 = curve2.getNormalAtTime(0).multiply(radius).transform(strokeMatrix), angle = normal1.getDirectedAngle(normal2);\n if (angle < 0 || angle >= 180) {\n normal1 = normal1.negate();\n normal2 = normal2.negate();\n }\n if (isArea) addPoint(point);\n addPoint(point.add(normal1));\n if (join === \"miter\") {\n var corner = new Line(point.add(normal1), new Point(-normal1.y, normal1.x), true).intersect(new Line(point.add(normal2), new Point(-normal2.y, normal2.x), true), true);\n if (corner && point.getDistance(corner) <= miterLimit * radius) addPoint(corner);\n }\n addPoint(point.add(normal2));\n },\n _addSquareCap: function(segment, cap, radius, matrix, strokeMatrix, addPoint, isArea) {\n var point = segment._point.transform(matrix), loc = segment.getLocation(), normal = loc.getNormal().multiply(loc.getTime() === 0 ? radius : -radius).transform(strokeMatrix);\n if (cap === \"square\") {\n if (isArea) {\n addPoint(point.subtract(normal));\n addPoint(point.add(normal));\n }\n point = point.add(normal.rotate(-90));\n }\n addPoint(point.add(normal));\n addPoint(point.subtract(normal));\n },\n getHandleBounds: function(segments, closed, path, matrix, options) {\n var style = path.getStyle(), stroke = options.stroke && style.hasStroke(), strokePadding, joinPadding;\n if (stroke) {\n var strokeMatrix = path._getStrokeMatrix(matrix, options), strokeRadius = style.getStrokeWidth() / 2, joinRadius = strokeRadius;\n if (style.getStrokeJoin() === \"miter\") joinRadius = strokeRadius * style.getMiterLimit();\n if (style.getStrokeCap() === \"square\") joinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n strokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n joinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n }\n var coords = new Array(6), x1 = Infinity, x2 = -x1, y1 = x1, y2 = x2;\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i];\n segment._transformCoordinates(matrix, coords);\n for(var j = 0; j < 6; j += 2){\n var padding = !j ? joinPadding : strokePadding, paddingX = padding ? padding[0] : 0, paddingY = padding ? padding[1] : 0, x = coords[j], y = coords[j + 1], xn = x - paddingX, xx = x + paddingX, yn = y - paddingY, yx = y + paddingY;\n if (xn < x1) x1 = xn;\n if (xx > x2) x2 = xx;\n if (yn < y1) y1 = yn;\n if (yx > y2) y2 = yx;\n }\n }\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n }\n }\n });\n Path.inject({\n statics: new function() {\n var kappa = 0.5522847498307936, ellipseSegments = [\n new Segment([\n -1,\n 0\n ], [\n 0,\n kappa\n ], [\n 0,\n -kappa\n ]),\n new Segment([\n 0,\n -1\n ], [\n -kappa,\n 0\n ], [\n kappa,\n 0\n ]),\n new Segment([\n 1,\n 0\n ], [\n 0,\n -kappa\n ], [\n 0,\n kappa\n ]),\n new Segment([\n 0,\n 1\n ], [\n kappa,\n 0\n ], [\n -kappa,\n 0\n ])\n ];\n function createPath(segments, closed, args) {\n var props = Base.getNamed(args), path = new Path(props && (props.insert == true ? Item.INSERT : props.insert == false ? Item.NO_INSERT : null));\n path._add(segments);\n path._closed = closed;\n return path.set(props, Item.INSERT);\n }\n function createEllipse(center, radius, args) {\n var segments = new Array(4);\n for(var i = 0; i < 4; i++){\n var segment = ellipseSegments[i];\n segments[i] = new Segment(segment._point.multiply(radius).add(center), segment._handleIn.multiply(radius), segment._handleOut.multiply(radius));\n }\n return createPath(segments, true, args);\n }\n return {\n Line: function() {\n var args = arguments;\n return createPath([\n new Segment(Point.readNamed(args, \"from\")),\n new Segment(Point.readNamed(args, \"to\"))\n ], false, args);\n },\n Circle: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), radius = Base.readNamed(args, \"radius\");\n return createEllipse(center, new Size(radius), args);\n },\n Rectangle: function() {\n var args = arguments, rect = Rectangle.readNamed(args, \"rectangle\"), radius = Size.readNamed(args, \"radius\", 0, {\n readNull: true\n }), bl = rect.getBottomLeft(true), tl = rect.getTopLeft(true), tr = rect.getTopRight(true), br = rect.getBottomRight(true), segments;\n if (!radius || radius.isZero()) segments = [\n new Segment(bl),\n new Segment(tl),\n new Segment(tr),\n new Segment(br)\n ];\n else {\n radius = Size.min(radius, rect.getSize(true).divide(2));\n var rx = radius.width, ry = radius.height, hx = rx * kappa, hy = ry * kappa;\n segments = [\n new Segment(bl.add(rx, 0), null, [\n -hx,\n 0\n ]),\n new Segment(bl.subtract(0, ry), [\n 0,\n hy\n ]),\n new Segment(tl.add(0, ry), null, [\n 0,\n -hy\n ]),\n new Segment(tl.add(rx, 0), [\n -hx,\n 0\n ], null),\n new Segment(tr.subtract(rx, 0), null, [\n hx,\n 0\n ]),\n new Segment(tr.add(0, ry), [\n 0,\n -hy\n ], null),\n new Segment(br.subtract(0, ry), null, [\n 0,\n hy\n ]),\n new Segment(br.subtract(rx, 0), [\n hx,\n 0\n ])\n ];\n }\n return createPath(segments, true, args);\n },\n RoundRectangle: \"#Rectangle\",\n Ellipse: function() {\n var args = arguments, ellipse = Shape._readEllipse(args);\n return createEllipse(ellipse.center, ellipse.radius, args);\n },\n Oval: \"#Ellipse\",\n Arc: function() {\n var args = arguments, from = Point.readNamed(args, \"from\"), through = Point.readNamed(args, \"through\"), to = Point.readNamed(args, \"to\"), props = Base.getNamed(args), path = new Path(props && props.insert == false && Item.NO_INSERT);\n path.moveTo(from);\n path.arcTo(through, to);\n return path.set(props);\n },\n RegularPolygon: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), sides = Base.readNamed(args, \"sides\"), radius = Base.readNamed(args, \"radius\"), step = 360 / sides, three = sides % 3 === 0, vector = new Point(0, three ? -radius : radius), offset = three ? -1 : 0.5, segments = new Array(sides);\n for(var i = 0; i < sides; i++)segments[i] = new Segment(center.add(vector.rotate((i + offset) * step)));\n return createPath(segments, true, args);\n },\n Star: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), points = Base.readNamed(args, \"points\") * 2, radius1 = Base.readNamed(args, \"radius1\"), radius2 = Base.readNamed(args, \"radius2\"), step = 360 / points, vector = new Point(0, -1), segments = new Array(points);\n for(var i = 0; i < points; i++)segments[i] = new Segment(center.add(vector.rotate(step * i).multiply(i % 2 ? radius2 : radius1)));\n return createPath(segments, true, args);\n }\n };\n }\n });\n var CompoundPath = PathItem.extend({\n _class: \"CompoundPath\",\n _serializeFields: {\n children: []\n },\n beans: true,\n initialize: function CompoundPath(arg) {\n this._children = [];\n this._namedChildren = {};\n if (!this._initialize(arg)) {\n if (typeof arg === \"string\") this.setPathData(arg);\n else this.addChildren(Array.isArray(arg) ? arg : arguments);\n }\n },\n insertChildren: function insertChildren(index, items) {\n var list = items, first = list[0];\n if (first && typeof first[0] === \"number\") list = [\n list\n ];\n for(var i = items.length - 1; i >= 0; i--){\n var item = list[i];\n if (list === items && !(item instanceof Path)) list = Base.slice(list);\n if (Array.isArray(item)) list[i] = new Path({\n segments: item,\n insert: false\n });\n else if (item instanceof CompoundPath) {\n list.splice.apply(list, [\n i,\n 1\n ].concat(item.removeChildren()));\n item.remove();\n }\n }\n return insertChildren.base.call(this, index, list);\n },\n reduce: function reduce(options) {\n var children = this._children;\n for(var i = children.length - 1; i >= 0; i--){\n var path = children[i].reduce(options);\n if (path.isEmpty()) path.remove();\n }\n if (!children.length) {\n var path = new Path(Item.NO_INSERT);\n path.copyAttributes(this);\n path.insertAbove(this);\n this.remove();\n return path;\n }\n return reduce.base.call(this);\n },\n isClosed: function() {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n if (!children[i]._closed) return false;\n }\n return true;\n },\n setClosed: function(closed) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setClosed(closed);\n },\n getFirstSegment: function() {\n var first = this.getFirstChild();\n return first && first.getFirstSegment();\n },\n getLastSegment: function() {\n var last = this.getLastChild();\n return last && last.getLastSegment();\n },\n getCurves: function() {\n var children = this._children, curves = [];\n for(var i = 0, l = children.length; i < l; i++)Base.push(curves, children[i].getCurves());\n return curves;\n },\n getFirstCurve: function() {\n var first = this.getFirstChild();\n return first && first.getFirstCurve();\n },\n getLastCurve: function() {\n var last = this.getLastChild();\n return last && last.getLastCurve();\n },\n getArea: function() {\n var children = this._children, area = 0;\n for(var i = 0, l = children.length; i < l; i++)area += children[i].getArea();\n return area;\n },\n getLength: function() {\n var children = this._children, length = 0;\n for(var i = 0, l = children.length; i < l; i++)length += children[i].getLength();\n return length;\n },\n getPathData: function(_matrix, _precision) {\n var children = this._children, paths = [];\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i], mx = child._matrix;\n paths.push(child.getPathData(_matrix && !mx.isIdentity() ? _matrix.appended(mx) : _matrix, _precision));\n }\n return paths.join(\"\");\n },\n _hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n return _hitTestChildren.base.call(this, point, options.class === Path || options.type === \"path\" ? options : Base.set({}, options, {\n fill: false\n }), viewMatrix);\n },\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var children = this._children;\n if (!children.length) return;\n param = param.extend({\n dontStart: true,\n dontFinish: true\n });\n ctx.beginPath();\n for(var i = 0, l = children.length; i < l; i++)children[i].draw(ctx, param, strokeMatrix);\n if (!param.clip) {\n this._setStyles(ctx, param, viewMatrix);\n var style = this._style;\n if (style.hasFill()) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (style.hasStroke()) ctx.stroke();\n }\n },\n _drawSelected: function(ctx, matrix, selectionItems) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i], mx = child._matrix;\n if (!selectionItems[child._id]) child._drawSelected(ctx, mx.isIdentity() ? matrix : matrix.appended(mx));\n }\n }\n }, new function() {\n function getCurrentPath(that, check) {\n var children = that._children;\n if (check && !children.length) throw new Error(\"Use a moveTo() command first\");\n return children[children.length - 1];\n }\n return Base.each([\n \"lineTo\",\n \"cubicCurveTo\",\n \"quadraticCurveTo\",\n \"curveTo\",\n \"arcTo\",\n \"lineBy\",\n \"cubicCurveBy\",\n \"quadraticCurveBy\",\n \"curveBy\",\n \"arcBy\"\n ], function(key) {\n this[key] = function() {\n var path = getCurrentPath(this, true);\n path[key].apply(path, arguments);\n };\n }, {\n moveTo: function() {\n var current = getCurrentPath(this), path = current && current.isEmpty() ? current : new Path(Item.NO_INSERT);\n if (path !== current) this.addChild(path);\n path.moveTo.apply(path, arguments);\n },\n moveBy: function() {\n var current = getCurrentPath(this, true), last = current && current.getLastSegment(), point = Point.read(arguments);\n this.moveTo(last ? point.add(last._point) : point);\n },\n closePath: function(tolerance) {\n getCurrentPath(this, true).closePath(tolerance);\n }\n });\n }, Base.each([\n \"reverse\",\n \"flatten\",\n \"simplify\",\n \"smooth\"\n ], function(key) {\n this[key] = function(param) {\n var children = this._children, res;\n for(var i = 0, l = children.length; i < l; i++)res = children[i][key](param) || res;\n return res;\n };\n }, {}));\n PathItem.inject(new function() {\n var min = Math.min, max = Math.max, abs = Math.abs, operators = {\n unite: {\n \"1\": true,\n \"2\": true\n },\n intersect: {\n \"2\": true\n },\n subtract: {\n \"1\": true\n },\n exclude: {\n \"1\": true,\n \"-1\": true\n }\n };\n function getPaths(path) {\n return path._children || [\n path\n ];\n }\n function preparePath(path, resolve) {\n var res = path.clone(false).reduce({\n simplify: true\n }).transform(null, true, true);\n if (resolve) {\n var paths = getPaths(res);\n for(var i = 0, l = paths.length; i < l; i++){\n var path = paths[i];\n if (!path._closed && !path.isEmpty()) {\n path.closePath(1e-12);\n path.getFirstSegment().setHandleIn(0, 0);\n path.getLastSegment().setHandleOut(0, 0);\n }\n }\n res = res.resolveCrossings().reorient(res.getFillRule() === \"nonzero\", true);\n }\n return res;\n }\n function createResult(paths, simplify, path1, path2, options) {\n var result = new CompoundPath(Item.NO_INSERT);\n result.addChildren(paths, true);\n result = result.reduce({\n simplify: simplify\n });\n if (!(options && options.insert == false)) result.insertAbove(path2 && path1.isSibling(path2) && path1.getIndex() < path2.getIndex() ? path2 : path1);\n result.copyAttributes(path1, true);\n return result;\n }\n function filterIntersection(inter) {\n return inter.hasOverlap() || inter.isCrossing();\n }\n function traceBoolean(path1, path2, operation, options) {\n if (options && (options.trace == false || options.stroke) && /^(subtract|intersect)$/.test(operation)) return splitBoolean(path1, path2, operation);\n var _path1 = preparePath(path1, true), _path2 = path2 && path1 !== path2 && preparePath(path2, true), operator = operators[operation];\n operator[operation] = true;\n if (_path2 && (operator.subtract || operator.exclude) ^ (_path2.isClockwise() ^ _path1.isClockwise())) _path2.reverse();\n var crossings = divideLocations(CurveLocation.expand(_path1.getIntersections(_path2, filterIntersection))), paths1 = getPaths(_path1), paths2 = _path2 && getPaths(_path2), segments = [], curves = [], paths;\n function collectPaths(paths) {\n for(var i = 0, l = paths.length; i < l; i++){\n var path = paths[i];\n Base.push(segments, path._segments);\n Base.push(curves, path.getCurves());\n path._overlapsOnly = true;\n }\n }\n function getCurves(indices) {\n var list = [];\n for(var i = 0, l = indices && indices.length; i < l; i++)list.push(curves[indices[i]]);\n return list;\n }\n if (crossings.length) {\n collectPaths(paths1);\n if (paths2) collectPaths(paths2);\n var curvesValues = new Array(curves.length);\n for(var i = 0, l = curves.length; i < l; i++)curvesValues[i] = curves[i].getValues();\n var curveCollisions = CollisionDetection.findCurveBoundsCollisions(curvesValues, curvesValues, 0, true);\n var curveCollisionsMap = {};\n for(var i = 0; i < curves.length; i++){\n var curve = curves[i], id = curve._path._id, map = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n map[curve.getIndex()] = {\n hor: getCurves(curveCollisions[i].hor),\n ver: getCurves(curveCollisions[i].ver)\n };\n }\n for(var i = 0, l = crossings.length; i < l; i++)propagateWinding(crossings[i]._segment, _path1, _path2, curveCollisionsMap, operator);\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i], inter = segment._intersection;\n if (!segment._winding) propagateWinding(segment, _path1, _path2, curveCollisionsMap, operator);\n if (!(inter && inter._overlap)) segment._path._overlapsOnly = false;\n }\n paths = tracePaths(segments, operator);\n } else paths = reorientPaths(paths2 ? paths1.concat(paths2) : paths1.slice(), function(w) {\n return !!operator[w];\n });\n return createResult(paths, true, path1, path2, options);\n }\n function splitBoolean(path1, path2, operation) {\n var _path1 = preparePath(path1), _path2 = preparePath(path2), crossings = _path1.getIntersections(_path2, filterIntersection), subtract = operation === \"subtract\", divide = operation === \"divide\", added = {}, paths = [];\n function addPath(path) {\n if (!added[path._id] && (divide || _path2.contains(path.getPointAt(path.getLength() / 2)) ^ subtract)) {\n paths.unshift(path);\n return added[path._id] = true;\n }\n }\n for(var i = crossings.length - 1; i >= 0; i--){\n var path = crossings[i].split();\n if (path) {\n if (addPath(path)) path.getFirstSegment().setHandleIn(0, 0);\n _path1.getLastSegment().setHandleOut(0, 0);\n }\n }\n addPath(_path1);\n return createResult(paths, false, path1, path2);\n }\n function linkIntersections(from, to) {\n var prev = from;\n while(prev){\n if (prev === to) return;\n prev = prev._previous;\n }\n while(from._next && from._next !== to)from = from._next;\n if (!from._next) {\n while(to._previous)to = to._previous;\n from._next = to;\n to._previous = from;\n }\n }\n function clearCurveHandles(curves) {\n for(var i = curves.length - 1; i >= 0; i--)curves[i].clearHandles();\n }\n function reorientPaths(paths, isInside, clockwise) {\n var length = paths && paths.length;\n if (length) {\n var lookup = Base.each(paths, function(path, i) {\n this[path._id] = {\n container: null,\n winding: path.isClockwise() ? 1 : -1,\n index: i\n };\n }, {}), sorted = paths.slice().sort(function(a, b) {\n return abs(b.getArea()) - abs(a.getArea());\n }), first = sorted[0];\n var collisions = CollisionDetection.findItemBoundsCollisions(sorted, null, Numerical.GEOMETRIC_EPSILON);\n if (clockwise == null) clockwise = first.isClockwise();\n for(var i = 0; i < length; i++){\n var path1 = sorted[i], entry1 = lookup[path1._id], containerWinding = 0, indices = collisions[i];\n if (indices) {\n var point = null;\n for(var j = indices.length - 1; j >= 0; j--)if (indices[j] < i) {\n point = point || path1.getInteriorPoint();\n var path2 = sorted[indices[j]];\n if (path2.contains(point)) {\n var entry2 = lookup[path2._id];\n containerWinding = entry2.winding;\n entry1.winding += containerWinding;\n entry1.container = entry2.exclude ? entry2.container : path2;\n break;\n }\n }\n }\n if (isInside(entry1.winding) === isInside(containerWinding)) {\n entry1.exclude = true;\n paths[entry1.index] = null;\n } else {\n var container = entry1.container;\n path1.setClockwise(container ? !container.isClockwise() : clockwise);\n }\n }\n }\n return paths;\n }\n function divideLocations(locations, include, clearLater) {\n var results = include && [], tMin = 1e-8, tMax = 1 - tMin, clearHandles = false, clearCurves = clearLater || [], clearLookup = clearLater && {}, renormalizeLocs, prevCurve, prevTime;\n function getId(curve) {\n return curve._path._id + \".\" + curve._segment1._index;\n }\n for(var i = (clearLater && clearLater.length) - 1; i >= 0; i--){\n var curve = clearLater[i];\n if (curve._path) clearLookup[getId(curve)] = true;\n }\n for(var i = locations.length - 1; i >= 0; i--){\n var loc = locations[i], time = loc._time, origTime = time, exclude = include && !include(loc), curve = loc._curve, segment;\n if (curve) {\n if (curve !== prevCurve) {\n clearHandles = !curve.hasHandles() || clearLookup && clearLookup[getId(curve)];\n renormalizeLocs = [];\n prevTime = null;\n prevCurve = curve;\n } else if (prevTime >= tMin) time /= prevTime;\n }\n if (exclude) {\n if (renormalizeLocs) renormalizeLocs.push(loc);\n continue;\n } else if (include) results.unshift(loc);\n prevTime = origTime;\n if (time < tMin) segment = curve._segment1;\n else if (time > tMax) segment = curve._segment2;\n else {\n var newCurve = curve.divideAtTime(time, true);\n if (clearHandles) clearCurves.push(curve, newCurve);\n segment = newCurve._segment1;\n for(var j = renormalizeLocs.length - 1; j >= 0; j--){\n var l = renormalizeLocs[j];\n l._time = (l._time - time) / (1 - time);\n }\n }\n loc._setSegment(segment);\n var inter = segment._intersection, dest = loc._intersection;\n if (inter) {\n linkIntersections(inter, dest);\n var other = inter;\n while(other){\n linkIntersections(other._intersection, inter);\n other = other._next;\n }\n } else segment._intersection = dest;\n }\n if (!clearLater) clearCurveHandles(clearCurves);\n return results || locations;\n }\n function getWinding(point, curves, dir, closed, dontFlip) {\n var curvesList = Array.isArray(curves) ? curves : curves[dir ? \"hor\" : \"ver\"];\n var ia = dir ? 1 : 0, io = ia ^ 1, pv = [\n point.x,\n point.y\n ], pa = pv[ia], po = pv[io], windingEpsilon = 1e-9, qualityEpsilon = 1e-6, paL = pa - windingEpsilon, paR = pa + windingEpsilon, windingL = 0, windingR = 0, pathWindingL = 0, pathWindingR = 0, onPath = false, onAnyPath = false, quality = 1, roots = [], vPrev, vClose;\n function addWinding(v) {\n var o0 = v[io + 0], o3 = v[io + 6];\n if (po < min(o0, o3) || po > max(o0, o3)) return;\n var a0 = v[ia + 0], a1 = v[ia + 2], a2 = v[ia + 4], a3 = v[ia + 6];\n if (o0 === o3) {\n if (a0 < paR && a3 > paL || a3 < paR && a0 > paL) onPath = true;\n return;\n }\n var t = po === o0 ? 0 : po === o3 ? 1 : paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) ? 1 : Curve.solveCubic(v, io, po, roots, 0, 1) > 0 ? roots[0] : 1, a = t === 0 ? a0 : t === 1 ? a3 : Curve.getPoint(v, t)[dir ? \"y\" : \"x\"], winding = o0 > o3 ? 1 : -1, windingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1, a3Prev = vPrev[ia + 6];\n if (po !== o0) {\n if (a < paL) pathWindingL += winding;\n else if (a > paR) pathWindingR += winding;\n else onPath = true;\n if (a > pa - qualityEpsilon && a < pa + qualityEpsilon) quality /= 2;\n } else {\n if (winding !== windingPrev) {\n if (a0 < paL) pathWindingL += winding;\n else if (a0 > paR) pathWindingR += winding;\n } else if (a0 != a3Prev) {\n if (a3Prev < paR && a > paR) {\n pathWindingR += winding;\n onPath = true;\n } else if (a3Prev > paL && a < paL) {\n pathWindingL += winding;\n onPath = true;\n }\n }\n quality /= 4;\n }\n vPrev = v;\n return !dontFlip && a > paL && a < paR && Curve.getTangent(v, t)[dir ? \"x\" : \"y\"] === 0 && getWinding(point, curves, !dir, closed, true);\n }\n function handleCurve(v) {\n var o0 = v[io + 0], o1 = v[io + 2], o2 = v[io + 4], o3 = v[io + 6];\n if (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n var a0 = v[ia + 0], a1 = v[ia + 2], a2 = v[ia + 4], a3 = v[ia + 6], monoCurves = paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) ? [\n v\n ] : Curve.getMonoCurves(v, dir), res;\n for(var i = 0, l = monoCurves.length; i < l; i++){\n if (res = addWinding(monoCurves[i])) return res;\n }\n }\n }\n for(var i = 0, l = curvesList.length; i < l; i++){\n var curve = curvesList[i], path = curve._path, v = curve.getValues(), res;\n if (!i || curvesList[i - 1]._path !== path) {\n vPrev = null;\n if (!path._closed) {\n vClose = Curve.getValues(path.getLastCurve().getSegment2(), curve.getSegment1(), null, !closed);\n if (vClose[io] !== vClose[io + 6]) vPrev = vClose;\n }\n if (!vPrev) {\n vPrev = v;\n var prev = path.getLastCurve();\n while(prev && prev !== curve){\n var v2 = prev.getValues();\n if (v2[io] !== v2[io + 6]) {\n vPrev = v2;\n break;\n }\n prev = prev.getPrevious();\n }\n }\n }\n if (res = handleCurve(v)) return res;\n if (i + 1 === l || curvesList[i + 1]._path !== path) {\n if (vClose && (res = handleCurve(vClose))) return res;\n if (onPath && !pathWindingL && !pathWindingR) pathWindingL = pathWindingR = path.isClockwise(closed) ^ dir ? 1 : -1;\n windingL += pathWindingL;\n windingR += pathWindingR;\n pathWindingL = pathWindingR = 0;\n if (onPath) {\n onAnyPath = true;\n onPath = false;\n }\n vClose = null;\n }\n }\n windingL = abs(windingL);\n windingR = abs(windingR);\n return {\n winding: max(windingL, windingR),\n windingL: windingL,\n windingR: windingR,\n quality: quality,\n onPath: onAnyPath\n };\n }\n function propagateWinding(segment, path1, path2, curveCollisionsMap, operator) {\n var chain = [], start = segment, totalLength = 0, winding;\n do {\n var curve = segment.getCurve();\n if (curve) {\n var length = curve.getLength();\n chain.push({\n segment: segment,\n curve: curve,\n length: length\n });\n totalLength += length;\n }\n segment = segment.getNext();\n }while (segment && !segment._intersection && segment !== start);\n var offsets = [\n 0.5,\n 0.25,\n 0.75\n ], winding = {\n winding: 0,\n quality: -1\n }, tMin = 1e-3, tMax = 1 - tMin;\n for(var i = 0; i < offsets.length && winding.quality < 0.5; i++){\n var length = totalLength * offsets[i];\n for(var j = 0, l = chain.length; j < l; j++){\n var entry = chain[j], curveLength = entry.length;\n if (length <= curveLength) {\n var curve = entry.curve, path = curve._path, parent = path._parent, operand = parent instanceof CompoundPath ? parent : path, t = Numerical.clamp(curve.getTimeAt(length), tMin, tMax), pt = curve.getPointAtTime(t), dir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n var wind = null;\n if (operator.subtract && path2) {\n var otherPath = operand === path1 ? path2 : path1, pathWinding = otherPath._getWinding(pt, dir, true);\n if (operand === path1 && pathWinding.winding || operand === path2 && !pathWinding.winding) {\n if (pathWinding.quality < 1) continue;\n else wind = {\n winding: 0,\n quality: 1\n };\n }\n }\n wind = wind || getWinding(pt, curveCollisionsMap[path._id][curve.getIndex()], dir, true);\n if (wind.quality > winding.quality) winding = wind;\n break;\n }\n length -= curveLength;\n }\n }\n for(var j = chain.length - 1; j >= 0; j--)chain[j].segment._winding = winding;\n }\n function tracePaths(segments, operator) {\n var paths = [], starts;\n function isValid(seg) {\n var winding;\n return !!(seg && !seg._visited && (!operator || operator[(winding = seg._winding || {}).winding] && !(operator.unite && winding.winding === 2 && winding.windingL && winding.windingR)));\n }\n function isStart(seg) {\n if (seg) for(var i = 0, l = starts.length; i < l; i++){\n if (seg === starts[i]) return true;\n }\n return false;\n }\n function visitPath(path) {\n var segments = path._segments;\n for(var i = 0, l = segments.length; i < l; i++)segments[i]._visited = true;\n }\n function getCrossingSegments(segment, collectStarts) {\n var inter = segment._intersection, start = inter, crossings = [];\n if (collectStarts) starts = [\n segment\n ];\n function collect(inter, end) {\n while(inter && inter !== end){\n var other = inter._segment, path = other && other._path;\n if (path) {\n var next = other.getNext() || path.getFirstSegment(), nextInter = next._intersection;\n if (other !== segment && (isStart(other) || isStart(next) || next && isValid(other) && (isValid(next) || nextInter && isValid(nextInter._segment)))) crossings.push(other);\n if (collectStarts) starts.push(other);\n }\n inter = inter._next;\n }\n }\n if (inter) {\n collect(inter);\n while(inter && inter._previous)inter = inter._previous;\n collect(inter, start);\n }\n return crossings;\n }\n segments.sort(function(seg1, seg2) {\n var inter1 = seg1._intersection, inter2 = seg2._intersection, over1 = !!(inter1 && inter1._overlap), over2 = !!(inter2 && inter2._overlap), path1 = seg1._path, path2 = seg2._path;\n return over1 ^ over2 ? over1 ? 1 : -1 : !inter1 ^ !inter2 ? inter1 ? 1 : -1 : path1 !== path2 ? path1._id - path2._id : seg1._index - seg2._index;\n });\n for(var i = 0, l = segments.length; i < l; i++){\n var seg = segments[i], valid = isValid(seg), path = null, finished = false, closed = true, branches = [], branch, visited, handleIn;\n if (valid && seg._path._overlapsOnly) {\n var path1 = seg._path, path2 = seg._intersection._segment._path;\n if (path1.compare(path2)) {\n if (path1.getArea()) paths.push(path1.clone(false));\n visitPath(path1);\n visitPath(path2);\n valid = false;\n }\n }\n while(valid){\n var first = !path, crossings = getCrossingSegments(seg, first), other = crossings.shift(), finished = !first && (isStart(seg) || isStart(other)), cross = !finished && other;\n if (first) {\n path = new Path(Item.NO_INSERT);\n branch = null;\n }\n if (finished) {\n if (seg.isFirst() || seg.isLast()) closed = seg._path._closed;\n seg._visited = true;\n break;\n }\n if (cross && branch) {\n branches.push(branch);\n branch = null;\n }\n if (!branch) {\n if (cross) crossings.push(seg);\n branch = {\n start: path._segments.length,\n crossings: crossings,\n visited: visited = [],\n handleIn: handleIn\n };\n }\n if (cross) seg = other;\n if (!isValid(seg)) {\n path.removeSegments(branch.start);\n for(var j = 0, k = visited.length; j < k; j++)visited[j]._visited = false;\n visited.length = 0;\n do {\n seg = branch && branch.crossings.shift();\n if (!seg || !seg._path) {\n seg = null;\n branch = branches.pop();\n if (branch) {\n visited = branch.visited;\n handleIn = branch.handleIn;\n }\n }\n }while (branch && !isValid(seg));\n if (!seg) break;\n }\n var next = seg.getNext();\n path.add(new Segment(seg._point, handleIn, next && seg._handleOut));\n seg._visited = true;\n visited.push(seg);\n seg = next || seg._path.getFirstSegment();\n handleIn = next && next._handleIn;\n }\n if (finished) {\n if (closed) {\n path.getFirstSegment().setHandleIn(handleIn);\n path.setClosed(closed);\n }\n if (path.getArea() !== 0) paths.push(path);\n }\n }\n return paths;\n }\n return {\n _getWinding: function(point, dir, closed) {\n return getWinding(point, this.getCurves(), dir, closed);\n },\n unite: function(path, options) {\n return traceBoolean(this, path, \"unite\", options);\n },\n intersect: function(path, options) {\n return traceBoolean(this, path, \"intersect\", options);\n },\n subtract: function(path, options) {\n return traceBoolean(this, path, \"subtract\", options);\n },\n exclude: function(path, options) {\n return traceBoolean(this, path, \"exclude\", options);\n },\n divide: function(path, options) {\n return options && (options.trace == false || options.stroke) ? splitBoolean(this, path, \"divide\") : createResult([\n this.subtract(path, options),\n this.intersect(path, options)\n ], true, this, path, options);\n },\n resolveCrossings: function() {\n var children = this._children, paths = children || [\n this\n ];\n function hasOverlap(seg, path) {\n var inter = seg && seg._intersection;\n return inter && inter._overlap && inter._path === path;\n }\n var hasOverlaps = false, hasCrossings = false, intersections = this.getIntersections(null, function(inter) {\n return inter.hasOverlap() && (hasOverlaps = true) || inter.isCrossing() && (hasCrossings = true);\n }), clearCurves = hasOverlaps && hasCrossings && [];\n intersections = CurveLocation.expand(intersections);\n if (hasOverlaps) {\n var overlaps = divideLocations(intersections, function(inter) {\n return inter.hasOverlap();\n }, clearCurves);\n for(var i = overlaps.length - 1; i >= 0; i--){\n var overlap = overlaps[i], path = overlap._path, seg = overlap._segment, prev = seg.getPrevious(), next = seg.getNext();\n if (hasOverlap(prev, path) && hasOverlap(next, path)) {\n seg.remove();\n prev._handleOut._set(0, 0);\n next._handleIn._set(0, 0);\n if (prev !== seg && !prev.getCurve().hasLength()) {\n next._handleIn.set(prev._handleIn);\n prev.remove();\n }\n }\n }\n }\n if (hasCrossings) {\n divideLocations(intersections, hasOverlaps && function(inter) {\n var curve1 = inter.getCurve(), seg1 = inter.getSegment(), other = inter._intersection, curve2 = other._curve, seg2 = other._segment;\n if (curve1 && curve2 && curve1._path && curve2._path) return true;\n if (seg1) seg1._intersection = null;\n if (seg2) seg2._intersection = null;\n }, clearCurves);\n if (clearCurves) clearCurveHandles(clearCurves);\n paths = tracePaths(Base.each(paths, function(path) {\n Base.push(this, path._segments);\n }, []));\n }\n var length = paths.length, item;\n if (length > 1 && children) {\n if (paths !== children) this.setChildren(paths);\n item = this;\n } else if (length === 1 && !children) {\n if (paths[0] !== this) this.setSegments(paths[0].removeSegments());\n item = this;\n }\n if (!item) {\n item = new CompoundPath(Item.NO_INSERT);\n item.addChildren(paths);\n item = item.reduce();\n item.copyAttributes(this);\n this.replaceWith(item);\n }\n return item;\n },\n reorient: function(nonZero, clockwise) {\n var children = this._children;\n if (children && children.length) this.setChildren(reorientPaths(this.removeChildren(), function(w) {\n return !!(nonZero ? w : w & 1);\n }, clockwise));\n else if (clockwise !== undefined) this.setClockwise(clockwise);\n return this;\n },\n getInteriorPoint: function() {\n var bounds = this.getBounds(), point = bounds.getCenter(true);\n if (!this.contains(point)) {\n var curves = this.getCurves(), y = point.y, intercepts = [], roots = [];\n for(var i = 0, l = curves.length; i < l; i++){\n var v = curves[i].getValues(), o0 = v[1], o1 = v[3], o2 = v[5], o3 = v[7];\n if (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n var monoCurves = Curve.getMonoCurves(v);\n for(var j = 0, m = monoCurves.length; j < m; j++){\n var mv = monoCurves[j], mo0 = mv[1], mo3 = mv[7];\n if (mo0 !== mo3 && (y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)) {\n var x = y === mo0 ? mv[0] : y === mo3 ? mv[6] : Curve.solveCubic(mv, 1, y, roots, 0, 1) === 1 ? Curve.getPoint(mv, roots[0]).x : (mv[0] + mv[6]) / 2;\n intercepts.push(x);\n }\n }\n }\n }\n if (intercepts.length > 1) {\n intercepts.sort(function(a, b) {\n return a - b;\n });\n point.x = (intercepts[0] + intercepts[1]) / 2;\n }\n }\n return point;\n }\n };\n });\n var PathFlattener = Base.extend({\n _class: \"PathFlattener\",\n initialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n var curves = [], parts = [], length = 0, minSpan = 1 / (maxRecursion || 32), segments = path._segments, segment1 = segments[0], segment2;\n function addCurve(segment1, segment2) {\n var curve = Curve.getValues(segment1, segment2, matrix);\n curves.push(curve);\n computeParts(curve, segment1._index, 0, 1);\n }\n function computeParts(curve, index, t1, t2) {\n if (t2 - t1 > minSpan && !(ignoreStraight && Curve.isStraight(curve)) && !Curve.isFlatEnough(curve, flatness || 0.25)) {\n var halves = Curve.subdivide(curve, 0.5), tMid = (t1 + t2) / 2;\n computeParts(halves[0], index, t1, tMid);\n computeParts(halves[1], index, tMid, t2);\n } else {\n var dx = curve[6] - curve[0], dy = curve[7] - curve[1], dist = Math.sqrt(dx * dx + dy * dy);\n if (dist > 0) {\n length += dist;\n parts.push({\n offset: length,\n curve: curve,\n index: index,\n time: t2\n });\n }\n }\n }\n for(var i = 1, l = segments.length; i < l; i++){\n segment2 = segments[i];\n addCurve(segment1, segment2);\n segment1 = segment2;\n }\n if (path._closed) addCurve(segment2 || segment1, segments[0]);\n this.curves = curves;\n this.parts = parts;\n this.length = length;\n this.index = 0;\n },\n _get: function(offset) {\n var parts = this.parts, length = parts.length, start, i, j = this.index;\n for(;;){\n i = j;\n if (!j || parts[--j].offset < offset) break;\n }\n for(; i < length; i++){\n var part = parts[i];\n if (part.offset >= offset) {\n this.index = i;\n var prev = parts[i - 1], prevTime = prev && prev.index === part.index ? prev.time : 0, prevOffset = prev ? prev.offset : 0;\n return {\n index: part.index,\n time: prevTime + (part.time - prevTime) * (offset - prevOffset) / (part.offset - prevOffset)\n };\n }\n }\n return {\n index: parts[length - 1].index,\n time: 1\n };\n },\n drawPart: function(ctx, from, to) {\n var start = this._get(from), end = this._get(to);\n for(var i = start.index, l = end.index; i <= l; i++){\n var curve = Curve.getPart(this.curves[i], i === start.index ? start.time : 0, i === end.index ? end.time : 1);\n if (i === start.index) ctx.moveTo(curve[0], curve[1]);\n ctx.bezierCurveTo.apply(ctx, curve.slice(2));\n }\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n this[name + \"At\"] = function(offset) {\n var param = this._get(offset);\n return Curve[name](this.curves[param.index], param.time);\n };\n }, {}));\n var PathFitter = Base.extend({\n initialize: function(path) {\n var points = this.points = [], segments = path._segments, closed = path._closed;\n for(var i = 0, prev, l = segments.length; i < l; i++){\n var point = segments[i].point;\n if (!prev || !prev.equals(point)) points.push(prev = point.clone());\n }\n if (closed) {\n points.unshift(points[points.length - 1]);\n points.push(points[1]);\n }\n this.closed = closed;\n },\n fit: function(error) {\n var points = this.points, length = points.length, segments = null;\n if (length > 0) {\n segments = [\n new Segment(points[0])\n ];\n if (length > 1) {\n this.fitCubic(segments, error, 0, length - 1, points[1].subtract(points[0]), points[length - 2].subtract(points[length - 1]));\n if (this.closed) {\n segments.shift();\n segments.pop();\n }\n }\n }\n return segments;\n },\n fitCubic: function(segments, error, first, last, tan1, tan2) {\n var points = this.points;\n if (last - first === 1) {\n var pt1 = points[first], pt2 = points[last], dist = pt1.getDistance(pt2) / 3;\n this.addCurve(segments, [\n pt1,\n pt1.add(tan1.normalize(dist)),\n pt2.add(tan2.normalize(dist)),\n pt2\n ]);\n return;\n }\n var uPrime = this.chordLengthParameterize(first, last), maxError = Math.max(error, error * error), split, parametersInOrder = true;\n for(var i = 0; i <= 4; i++){\n var curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n var max = this.findMaxError(first, last, curve, uPrime);\n if (max.error < error && parametersInOrder) {\n this.addCurve(segments, curve);\n return;\n }\n split = max.index;\n if (max.error >= maxError) break;\n parametersInOrder = this.reparameterize(first, last, uPrime, curve);\n maxError = max.error;\n }\n var tanCenter = points[split - 1].subtract(points[split + 1]);\n this.fitCubic(segments, error, first, split, tan1, tanCenter);\n this.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n },\n addCurve: function(segments, curve) {\n var prev = segments[segments.length - 1];\n prev.setHandleOut(curve[1].subtract(curve[0]));\n segments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n },\n generateBezier: function(first, last, uPrime, tan1, tan2) {\n var epsilon = 1e-12, abs = Math.abs, points = this.points, pt1 = points[first], pt2 = points[last], C = [\n [\n 0,\n 0\n ],\n [\n 0,\n 0\n ]\n ], X = [\n 0,\n 0\n ];\n for(var i = 0, l = last - first + 1; i < l; i++){\n var u = uPrime[i], t = 1 - u, b = 3 * u * t, b0 = t * t * t, b1 = b * t, b2 = b * u, b3 = u * u * u, a1 = tan1.normalize(b1), a2 = tan2.normalize(b2), tmp = points[first + i].subtract(pt1.multiply(b0 + b1)).subtract(pt2.multiply(b2 + b3));\n C[0][0] += a1.dot(a1);\n C[0][1] += a1.dot(a2);\n C[1][0] = C[0][1];\n C[1][1] += a2.dot(a2);\n X[0] += a1.dot(tmp);\n X[1] += a2.dot(tmp);\n }\n var detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1], alpha1, alpha2;\n if (abs(detC0C1) > epsilon) {\n var detC0X = C[0][0] * X[1] - C[1][0] * X[0], detXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n alpha1 = detXC1 / detC0C1;\n alpha2 = detC0X / detC0C1;\n } else {\n var c0 = C[0][0] + C[0][1], c1 = C[1][0] + C[1][1];\n alpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0 : abs(c1) > epsilon ? X[1] / c1 : 0;\n }\n var segLength = pt2.getDistance(pt1), eps = epsilon * segLength, handle1, handle2;\n if (alpha1 < eps || alpha2 < eps) alpha1 = alpha2 = segLength / 3;\n else {\n var line = pt2.subtract(pt1);\n handle1 = tan1.normalize(alpha1);\n handle2 = tan2.normalize(alpha2);\n if (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n alpha1 = alpha2 = segLength / 3;\n handle1 = handle2 = null;\n }\n }\n return [\n pt1,\n pt1.add(handle1 || tan1.normalize(alpha1)),\n pt2.add(handle2 || tan2.normalize(alpha2)),\n pt2\n ];\n },\n reparameterize: function(first, last, u, curve) {\n for(var i = first; i <= last; i++)u[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n for(var i = 1, l = u.length; i < l; i++){\n if (u[i] <= u[i - 1]) return false;\n }\n return true;\n },\n findRoot: function(curve, point, u) {\n var curve1 = [], curve2 = [];\n for(var i = 0; i <= 2; i++)curve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n for(var i = 0; i <= 1; i++)curve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n var pt = this.evaluate(3, curve, u), pt1 = this.evaluate(2, curve1, u), pt2 = this.evaluate(1, curve2, u), diff = pt.subtract(point), df = pt1.dot(pt1) + diff.dot(pt2);\n return Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n },\n evaluate: function(degree, curve, t) {\n var tmp = curve.slice();\n for(var i = 1; i <= degree; i++)for(var j = 0; j <= degree - i; j++)tmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n return tmp[0];\n },\n chordLengthParameterize: function(first, last) {\n var u = [\n 0\n ];\n for(var i = first + 1; i <= last; i++)u[i - first] = u[i - first - 1] + this.points[i].getDistance(this.points[i - 1]);\n for(var i = 1, m = last - first; i <= m; i++)u[i] /= u[m];\n return u;\n },\n findMaxError: function(first, last, curve, u) {\n var index = Math.floor((last - first + 1) / 2), maxDist = 0;\n for(var i = first + 1; i < last; i++){\n var P = this.evaluate(3, curve, u[i - first]);\n var v = P.subtract(this.points[i]);\n var dist = v.x * v.x + v.y * v.y;\n if (dist >= maxDist) {\n maxDist = dist;\n index = i;\n }\n }\n return {\n error: maxDist,\n index: index\n };\n }\n });\n var TextItem = Item.extend({\n _class: \"TextItem\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _serializeFields: {\n content: null\n },\n _boundsOptions: {\n stroke: false,\n handle: false\n },\n initialize: function TextItem(arg) {\n this._content = \"\";\n this._lines = [];\n var hasProps = arg && Base.isPlainObject(arg) && arg.x === undefined && arg.y === undefined;\n this._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n },\n _equals: function(item) {\n return this._content === item._content;\n },\n copyContent: function(source) {\n this.setContent(source._content);\n },\n getContent: function() {\n return this._content;\n },\n setContent: function(content) {\n this._content = \"\" + content;\n this._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n this._changed(521);\n },\n isEmpty: function() {\n return !this._content;\n },\n getCharacterStyle: \"#getStyle\",\n setCharacterStyle: \"#setStyle\",\n getParagraphStyle: \"#getStyle\",\n setParagraphStyle: \"#setStyle\"\n });\n var PointText = TextItem.extend({\n _class: \"PointText\",\n initialize: function PointText() {\n TextItem.apply(this, arguments);\n },\n getPoint: function() {\n var point = this._matrix.getTranslation();\n return new LinkedPoint(point.x, point.y, this, \"setPoint\");\n },\n setPoint: function() {\n var point = Point.read(arguments);\n this.translate(point.subtract(this._matrix.getTranslation()));\n },\n _draw: function(ctx, param, viewMatrix) {\n if (!this._content) return;\n this._setStyles(ctx, param, viewMatrix);\n var lines = this._lines, style = this._style, hasFill = style.hasFill(), hasStroke = style.hasStroke(), leading = style.getLeading(), shadowColor = ctx.shadowColor;\n ctx.font = style.getFontStyle();\n ctx.textAlign = style.getJustification();\n for(var i = 0, l = lines.length; i < l; i++){\n ctx.shadowColor = shadowColor;\n var line = lines[i];\n if (hasFill) {\n ctx.fillText(line, 0, 0);\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) ctx.strokeText(line, 0, 0);\n ctx.translate(0, leading);\n }\n },\n _getBounds: function(matrix, options) {\n var style = this._style, lines = this._lines, numLines = lines.length, justification = style.getJustification(), leading = style.getLeading(), width = this.getView().getTextWidth(style.getFontStyle(), lines), x = 0;\n if (justification !== \"left\") x -= width / (justification === \"center\" ? 2 : 1);\n var rect = new Rectangle(x, numLines ? -0.75 * leading : 0, width, numLines * leading);\n return matrix ? matrix._transformBounds(rect, rect) : rect;\n }\n });\n var Color = Base.extend(new function() {\n var types = {\n gray: [\n \"gray\"\n ],\n rgb: [\n \"red\",\n \"green\",\n \"blue\"\n ],\n hsb: [\n \"hue\",\n \"saturation\",\n \"brightness\"\n ],\n hsl: [\n \"hue\",\n \"saturation\",\n \"lightness\"\n ],\n gradient: [\n \"gradient\",\n \"origin\",\n \"destination\",\n \"highlight\"\n ]\n };\n var componentParsers = {}, namedColors = {\n transparent: [\n 0,\n 0,\n 0,\n 0\n ]\n }, colorCtx;\n function fromCSS(string) {\n var match = string.match(/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i) || string.match(/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i), type = \"rgb\", components;\n if (match) {\n var amount = match[4] ? 4 : 3;\n components = new Array(amount);\n for(var i = 0; i < amount; i++){\n var value = match[i + 1];\n components[i] = parseInt(value.length == 1 ? value + value : value, 16) / 255;\n }\n } else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n type = match[1];\n components = match[2].trim().split(/[,\\s]+/g);\n var isHSL = type === \"hsl\";\n for(var i = 0, l = Math.min(components.length, 4); i < l; i++){\n var component = components[i];\n var value = parseFloat(component);\n if (isHSL) {\n if (i === 0) {\n var unit = component.match(/([a-z]*)$/)[1];\n value *= ({\n turn: 360,\n rad: 180 / Math.PI,\n grad: 0.9\n })[unit] || 1;\n } else if (i < 3) value /= 100;\n } else if (i < 3) value /= /%$/.test(component) ? 100 : 255;\n components[i] = value;\n }\n } else {\n var color = namedColors[string];\n if (!color) {\n if (window) {\n if (!colorCtx) {\n colorCtx = CanvasProvider.getContext(1, 1, {\n willReadFrequently: true\n });\n colorCtx.globalCompositeOperation = \"copy\";\n }\n colorCtx.fillStyle = \"rgba(0,0,0,0)\";\n colorCtx.fillStyle = string;\n colorCtx.fillRect(0, 0, 1, 1);\n var data = colorCtx.getImageData(0, 0, 1, 1).data;\n color = namedColors[string] = [\n data[0] / 255,\n data[1] / 255,\n data[2] / 255\n ];\n } else color = [\n 0,\n 0,\n 0\n ];\n }\n components = color.slice();\n }\n return [\n type,\n components\n ];\n }\n var hsbIndices = [\n [\n 0,\n 3,\n 1\n ],\n [\n 2,\n 0,\n 1\n ],\n [\n 1,\n 0,\n 3\n ],\n [\n 1,\n 2,\n 0\n ],\n [\n 3,\n 1,\n 0\n ],\n [\n 0,\n 1,\n 2\n ]\n ];\n var converters = {\n \"rgb-hsb\": function(r, g, b) {\n var max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min, h = delta === 0 ? 0 : (max == r ? (g - b) / delta + (g < b ? 6 : 0) : max == g ? (b - r) / delta + 2 : (r - g) / delta + 4) * 60;\n return [\n h,\n max === 0 ? 0 : delta / max,\n max\n ];\n },\n \"hsb-rgb\": function(h, s, b) {\n h = (h / 60 % 6 + 6) % 6;\n var i = Math.floor(h), f = h - i, i = hsbIndices[i], v = [\n b,\n b * (1 - s),\n b * (1 - s * f),\n b * (1 - s * (1 - f))\n ];\n return [\n v[i[0]],\n v[i[1]],\n v[i[2]]\n ];\n },\n \"rgb-hsl\": function(r, g, b) {\n var max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min, achromatic = delta === 0, h = achromatic ? 0 : (max == r ? (g - b) / delta + (g < b ? 6 : 0) : max == g ? (b - r) / delta + 2 : (r - g) / delta + 4) * 60, l = (max + min) / 2, s = achromatic ? 0 : l < 0.5 ? delta / (max + min) : delta / (2 - max - min);\n return [\n h,\n s,\n l\n ];\n },\n \"hsl-rgb\": function(h, s, l) {\n h = (h / 360 % 1 + 1) % 1;\n if (s === 0) return [\n l,\n l,\n l\n ];\n var t3s = [\n h + 1 / 3,\n h,\n h - 1 / 3\n ], t2 = l < 0.5 ? l * (1 + s) : l + s - l * s, t1 = 2 * l - t2, c = [];\n for(var i = 0; i < 3; i++){\n var t3 = t3s[i];\n if (t3 < 0) t3 += 1;\n if (t3 > 1) t3 -= 1;\n c[i] = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 : 2 * t3 < 1 ? t2 : 3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 : t1;\n }\n return c;\n },\n \"rgb-gray\": function(r, g, b) {\n return [\n r * 0.2989 + g * 0.587 + b * 0.114\n ];\n },\n \"gray-rgb\": function(g) {\n return [\n g,\n g,\n g\n ];\n },\n \"gray-hsb\": function(g) {\n return [\n 0,\n 0,\n g\n ];\n },\n \"gray-hsl\": function(g) {\n return [\n 0,\n 0,\n g\n ];\n },\n \"gradient-rgb\": function() {\n return [];\n },\n \"rgb-gradient\": function() {\n return [];\n }\n };\n return Base.each(types, function(properties, type) {\n componentParsers[type] = [];\n Base.each(properties, function(name, index) {\n var part = Base.capitalize(name), hasOverlap = /^(hue|saturation)$/.test(name), parser = componentParsers[type][index] = type === \"gradient\" ? name === \"gradient\" ? function(value) {\n var current = this._components[0];\n value = Gradient.read(Array.isArray(value) ? value : arguments, 0, {\n readNull: true\n });\n if (current !== value) {\n if (current) current._removeOwner(this);\n if (value) value._addOwner(this);\n }\n return value;\n } : function() {\n return Point.read(arguments, 0, {\n readNull: name === \"highlight\",\n clone: true\n });\n } : function(value) {\n return value == null || isNaN(value) ? 0 : +value;\n };\n this[\"get\" + part] = function() {\n return this._type === type || hasOverlap && /^hs[bl]$/.test(this._type) ? this._components[index] : this._convert(type)[index];\n };\n this[\"set\" + part] = function(value) {\n if (this._type !== type && !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n this._components = this._convert(type);\n this._properties = types[type];\n this._type = type;\n }\n this._components[index] = parser.call(this, value);\n this._changed();\n };\n }, this);\n }, {\n _class: \"Color\",\n _readIndex: true,\n initialize: function Color(arg) {\n var args = arguments, reading = this.__read, read = 0, type, components, alpha, values;\n if (Array.isArray(arg)) {\n args = arg;\n arg = args[0];\n }\n var argType = arg != null && typeof arg;\n if (argType === \"string\" && arg in types) {\n type = arg;\n arg = args[1];\n if (Array.isArray(arg)) {\n components = arg;\n alpha = args[2];\n } else {\n if (reading) read = 1;\n args = Base.slice(args, 1);\n argType = typeof arg;\n }\n }\n if (!components) {\n values = argType === \"number\" ? args : argType === \"object\" && arg.length != null ? arg : null;\n if (values) {\n if (!type) type = values.length >= 3 ? \"rgb\" : \"gray\";\n var length = types[type].length;\n alpha = values[length];\n if (reading) read += values === arguments ? length + (alpha != null ? 1 : 0) : 1;\n if (values.length > length) values = Base.slice(values, 0, length);\n } else if (argType === \"string\") {\n var converted = fromCSS(arg);\n type = converted[0];\n components = converted[1];\n if (components.length === 4) {\n alpha = components[3];\n components.length--;\n }\n } else if (argType === \"object\") {\n if (arg.constructor === Color) {\n type = arg._type;\n components = arg._components.slice();\n alpha = arg._alpha;\n if (type === \"gradient\") for(var i = 1, l = components.length; i < l; i++){\n var point = components[i];\n if (point) components[i] = point.clone();\n }\n } else if (arg.constructor === Gradient) {\n type = \"gradient\";\n values = args;\n } else {\n type = \"hue\" in arg ? \"lightness\" in arg ? \"hsl\" : \"hsb\" : \"gradient\" in arg || \"stops\" in arg || \"radial\" in arg ? \"gradient\" : \"gray\" in arg ? \"gray\" : \"rgb\";\n var properties = types[type], parsers = componentParsers[type];\n this._components = components = [];\n for(var i = 0, l = properties.length; i < l; i++){\n var value = arg[properties[i]];\n if (value == null && !i && type === \"gradient\" && \"stops\" in arg) value = {\n stops: arg.stops,\n radial: arg.radial\n };\n value = parsers[i].call(this, value);\n if (value != null) components[i] = value;\n }\n alpha = arg.alpha;\n }\n }\n if (reading && type) read = 1;\n }\n this._type = type || \"rgb\";\n if (!components) {\n this._components = components = [];\n var parsers = componentParsers[this._type];\n for(var i = 0, l = parsers.length; i < l; i++){\n var value = parsers[i].call(this, values && values[i]);\n if (value != null) components[i] = value;\n }\n }\n this._components = components;\n this._properties = types[this._type];\n this._alpha = alpha;\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _serialize: function(options, dictionary) {\n var components = this.getComponents();\n return Base.serialize(/^(gray|rgb)$/.test(this._type) ? components : [\n this._type\n ].concat(components), options, true, dictionary);\n },\n _changed: function() {\n this._canvasStyle = null;\n if (this._owner) {\n if (this._setter) this._owner[this._setter](this);\n else this._owner._changed(129);\n }\n },\n _convert: function(type) {\n var converter;\n return this._type === type ? this._components.slice() : (converter = converters[this._type + \"-\" + type]) ? converter.apply(this, this._components) : converters[\"rgb-\" + type].apply(this, converters[this._type + \"-rgb\"].apply(this, this._components));\n },\n convert: function(type) {\n return new Color(type, this._convert(type), this._alpha);\n },\n getType: function() {\n return this._type;\n },\n setType: function(type) {\n this._components = this._convert(type);\n this._properties = types[type];\n this._type = type;\n },\n getComponents: function() {\n var components = this._components.slice();\n if (this._alpha != null) components.push(this._alpha);\n return components;\n },\n getAlpha: function() {\n return this._alpha != null ? this._alpha : 1;\n },\n setAlpha: function(alpha) {\n this._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n this._changed();\n },\n hasAlpha: function() {\n return this._alpha != null;\n },\n equals: function(color) {\n var col = Base.isPlainValue(color, true) ? Color.read(arguments) : color;\n return col === this || col && this._class === col._class && this._type === col._type && this.getAlpha() === col.getAlpha() && Base.equals(this._components, col._components) || false;\n },\n toString: function() {\n var properties = this._properties, parts = [], isGradient = this._type === \"gradient\", f = Formatter.instance;\n for(var i = 0, l = properties.length; i < l; i++){\n var value = this._components[i];\n if (value != null) parts.push(properties[i] + \": \" + (isGradient ? value : f.number(value)));\n }\n if (this._alpha != null) parts.push(\"alpha: \" + f.number(this._alpha));\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n toCSS: function(hex) {\n var components = this._convert(\"rgb\"), alpha = hex || this._alpha == null ? 1 : this._alpha;\n function convert(val) {\n return Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n }\n components = [\n convert(components[0]),\n convert(components[1]),\n convert(components[2])\n ];\n if (alpha < 1) components.push(alpha < 0 ? 0 : alpha);\n return hex ? \"#\" + (16777216 + (components[0] << 16) + (components[1] << 8) + components[2]).toString(16).slice(1) : (components.length == 4 ? \"rgba(\" : \"rgb(\") + components.join(\",\") + \")\";\n },\n toCanvasStyle: function(ctx, matrix) {\n if (this._canvasStyle) return this._canvasStyle;\n if (this._type !== \"gradient\") return this._canvasStyle = this.toCSS();\n var components = this._components, gradient = components[0], stops = gradient._stops, origin = components[1], destination = components[2], highlight = components[3], inverse = matrix && matrix.inverted(), canvasGradient;\n if (inverse) {\n origin = inverse._transformPoint(origin);\n destination = inverse._transformPoint(destination);\n if (highlight) highlight = inverse._transformPoint(highlight);\n }\n if (gradient._radial) {\n var radius = destination.getDistance(origin);\n if (highlight) {\n var vector = highlight.subtract(origin);\n if (vector.getLength() > radius) highlight = origin.add(vector.normalize(radius - 0.1));\n }\n var start = highlight || origin;\n canvasGradient = ctx.createRadialGradient(start.x, start.y, 0, origin.x, origin.y, radius);\n } else canvasGradient = ctx.createLinearGradient(origin.x, origin.y, destination.x, destination.y);\n for(var i = 0, l = stops.length; i < l; i++){\n var stop = stops[i], offset = stop._offset;\n canvasGradient.addColorStop(offset == null ? i / (l - 1) : offset, stop._color.toCanvasStyle());\n }\n return this._canvasStyle = canvasGradient;\n },\n transform: function(matrix) {\n if (this._type === \"gradient\") {\n var components = this._components;\n for(var i = 1, l = components.length; i < l; i++){\n var point = components[i];\n matrix._transformPoint(point, point, true);\n }\n this._changed();\n }\n },\n statics: {\n _types: types,\n random: function() {\n var random = Math.random;\n return new Color(random(), random(), random());\n },\n _setOwner: function(color, owner, setter) {\n if (color) {\n if (color._owner && owner && color._owner !== owner) color = color.clone();\n if (!color._owner ^ !owner) {\n color._owner = owner || null;\n color._setter = setter || null;\n }\n }\n return color;\n }\n }\n });\n }, new function() {\n var operators = {\n add: function(a, b) {\n return a + b;\n },\n subtract: function(a, b) {\n return a - b;\n },\n multiply: function(a, b) {\n return a * b;\n },\n divide: function(a, b) {\n return a / b;\n }\n };\n return Base.each(operators, function(operator, name) {\n this[name] = function(color) {\n color = Color.read(arguments);\n var type = this._type, components1 = this._components, components2 = color._convert(type);\n for(var i = 0, l = components1.length; i < l; i++)components2[i] = operator(components1[i], components2[i]);\n return new Color(type, components2, this._alpha != null ? operator(this._alpha, color.getAlpha()) : null);\n };\n }, {});\n });\n var Gradient = Base.extend({\n _class: \"Gradient\",\n initialize: function Gradient(stops, radial) {\n this._id = UID.get();\n if (stops && Base.isPlainObject(stops)) {\n this.set(stops);\n stops = radial = null;\n }\n if (this._stops == null) this.setStops(stops || [\n \"white\",\n \"black\"\n ]);\n if (this._radial == null) this.setRadial(typeof radial === \"string\" && radial === \"radial\" || radial || false);\n },\n _serialize: function(options, dictionary) {\n return dictionary.add(this, function() {\n return Base.serialize([\n this._stops,\n this._radial\n ], options, true, dictionary);\n });\n },\n _changed: function() {\n for(var i = 0, l = this._owners && this._owners.length; i < l; i++)this._owners[i]._changed();\n },\n _addOwner: function(color) {\n if (!this._owners) this._owners = [];\n this._owners.push(color);\n },\n _removeOwner: function(color) {\n var index = this._owners ? this._owners.indexOf(color) : -1;\n if (index != -1) {\n this._owners.splice(index, 1);\n if (!this._owners.length) this._owners = undefined;\n }\n },\n clone: function() {\n var stops = [];\n for(var i = 0, l = this._stops.length; i < l; i++)stops[i] = this._stops[i].clone();\n return new Gradient(stops, this._radial);\n },\n getStops: function() {\n return this._stops;\n },\n setStops: function(stops) {\n if (stops.length < 2) throw new Error(\"Gradient stop list needs to contain at least two stops.\");\n var _stops = this._stops;\n if (_stops) for(var i = 0, l = _stops.length; i < l; i++)_stops[i]._owner = undefined;\n _stops = this._stops = GradientStop.readList(stops, 0, {\n clone: true\n });\n for(var i = 0, l = _stops.length; i < l; i++)_stops[i]._owner = this;\n this._changed();\n },\n getRadial: function() {\n return this._radial;\n },\n setRadial: function(radial) {\n this._radial = radial;\n this._changed();\n },\n equals: function(gradient) {\n if (gradient === this) return true;\n if (gradient && this._class === gradient._class) {\n var stops1 = this._stops, stops2 = gradient._stops, length = stops1.length;\n if (length === stops2.length) {\n for(var i = 0; i < length; i++){\n if (!stops1[i].equals(stops2[i])) return false;\n }\n return true;\n }\n }\n return false;\n }\n });\n var GradientStop = Base.extend({\n _class: \"GradientStop\",\n initialize: function GradientStop(arg0, arg1) {\n var color = arg0, offset = arg1;\n if (typeof arg0 === \"object\" && arg1 === undefined) {\n if (Array.isArray(arg0) && typeof arg0[0] !== \"number\") {\n color = arg0[0];\n offset = arg0[1];\n } else if (\"color\" in arg0 || \"offset\" in arg0 || \"rampPoint\" in arg0) {\n color = arg0.color;\n offset = arg0.offset || arg0.rampPoint || 0;\n }\n }\n this.setColor(color);\n this.setOffset(offset);\n },\n clone: function() {\n return new GradientStop(this._color.clone(), this._offset);\n },\n _serialize: function(options, dictionary) {\n var color = this._color, offset = this._offset;\n return Base.serialize(offset == null ? [\n color\n ] : [\n color,\n offset\n ], options, true, dictionary);\n },\n _changed: function() {\n if (this._owner) this._owner._changed(129);\n },\n getOffset: function() {\n return this._offset;\n },\n setOffset: function(offset) {\n this._offset = offset;\n this._changed();\n },\n getRampPoint: \"#getOffset\",\n setRampPoint: \"#setOffset\",\n getColor: function() {\n return this._color;\n },\n setColor: function() {\n Color._setOwner(this._color, null);\n this._color = Color._setOwner(Color.read(arguments, 0), this, \"setColor\");\n this._changed();\n },\n equals: function(stop) {\n return stop === this || stop && this._class === stop._class && this._color.equals(stop._color) && this._offset == stop._offset || false;\n }\n });\n var Style = Base.extend(new function() {\n var itemDefaults = {\n fillColor: null,\n fillRule: \"nonzero\",\n strokeColor: null,\n strokeWidth: 1,\n strokeCap: \"butt\",\n strokeJoin: \"miter\",\n strokeScaling: true,\n miterLimit: 10,\n dashOffset: 0,\n dashArray: [],\n shadowColor: null,\n shadowBlur: 0,\n shadowOffset: new Point(),\n selectedColor: null\n }, groupDefaults = Base.set({}, itemDefaults, {\n fontFamily: \"sans-serif\",\n fontWeight: \"normal\",\n fontSize: 12,\n leading: null,\n justification: \"left\"\n }), textDefaults = Base.set({}, groupDefaults, {\n fillColor: new Color()\n }), flags = {\n strokeWidth: 193,\n strokeCap: 193,\n strokeJoin: 193,\n strokeScaling: 201,\n miterLimit: 193,\n fontFamily: 9,\n fontWeight: 9,\n fontSize: 9,\n font: 9,\n leading: 9,\n justification: 9\n }, item = {\n beans: true\n }, fields = {\n _class: \"Style\",\n beans: true,\n initialize: function Style(style, _owner, _project) {\n this._values = {};\n this._owner = _owner;\n this._project = _owner && _owner._project || _project || paper.project;\n this._defaults = !_owner || _owner instanceof Group ? groupDefaults : _owner instanceof TextItem ? textDefaults : itemDefaults;\n if (style) this.set(style);\n }\n };\n Base.each(groupDefaults, function(value, key) {\n var isColor = /Color$/.test(key), isPoint = key === \"shadowOffset\", part = Base.capitalize(key), flag = flags[key], set = \"set\" + part, get = \"get\" + part;\n fields[set] = function(value) {\n var owner = this._owner, children = owner && owner._children, applyToChildren = children && children.length > 0 && !(owner instanceof CompoundPath);\n if (applyToChildren) for(var i = 0, l = children.length; i < l; i++)children[i]._style[set](value);\n if ((key === \"selectedColor\" || !applyToChildren) && key in this._defaults) {\n var old = this._values[key];\n if (old !== value) {\n if (isColor) {\n if (old) {\n Color._setOwner(old, null);\n old._canvasStyle = null;\n }\n if (value && value.constructor === Color) value = Color._setOwner(value, owner, applyToChildren && set);\n }\n this._values[key] = value;\n if (owner) owner._changed(flag || 129);\n }\n }\n };\n fields[get] = function(_dontMerge) {\n var owner = this._owner, children = owner && owner._children, applyToChildren = children && children.length > 0 && !(owner instanceof CompoundPath), value;\n if (applyToChildren && !_dontMerge) for(var i = 0, l = children.length; i < l; i++){\n var childValue = children[i]._style[get]();\n if (!i) value = childValue;\n else if (!Base.equals(value, childValue)) return undefined;\n }\n else if (key in this._defaults) {\n var value = this._values[key];\n if (value === undefined) {\n value = this._defaults[key];\n if (value && value.clone) value = value.clone();\n } else {\n var ctor = isColor ? Color : isPoint ? Point : null;\n if (ctor && !(value && value.constructor === ctor)) this._values[key] = value = ctor.read([\n value\n ], 0, {\n readNull: true,\n clone: true\n });\n }\n }\n if (value && isColor) value = Color._setOwner(value, owner, applyToChildren && set);\n return value;\n };\n item[get] = function(_dontMerge) {\n return this._style[get](_dontMerge);\n };\n item[set] = function(value) {\n this._style[set](value);\n };\n });\n Base.each({\n Font: \"FontFamily\",\n WindingRule: \"FillRule\"\n }, function(value, key) {\n var get = \"get\" + key, set = \"set\" + key;\n fields[get] = item[get] = \"#get\" + value;\n fields[set] = item[set] = \"#set\" + value;\n });\n Item.inject(item);\n return fields;\n }, {\n set: function(style) {\n var isStyle = style instanceof Style, values = isStyle ? style._values : style;\n if (values) {\n for(var key in values)if (key in this._defaults) {\n var value = values[key];\n this[key] = value && isStyle && value.clone ? value.clone() : value;\n }\n }\n },\n equals: function(style) {\n function compare(style1, style2, secondary) {\n var values1 = style1._values, values2 = style2._values, defaults2 = style2._defaults;\n for(var key in values1){\n var value1 = values1[key], value2 = values2[key];\n if (!(secondary && key in values2) && !Base.equals(value1, value2 === undefined ? defaults2[key] : value2)) return false;\n }\n return true;\n }\n return style === this || style && this._class === style._class && compare(this, style) && compare(style, this, true) || false;\n },\n _dispose: function() {\n var color;\n color = this.getFillColor();\n if (color) color._canvasStyle = null;\n color = this.getStrokeColor();\n if (color) color._canvasStyle = null;\n color = this.getShadowColor();\n if (color) color._canvasStyle = null;\n },\n hasFill: function() {\n var color = this.getFillColor();\n return !!color && color.alpha > 0;\n },\n hasStroke: function() {\n var color = this.getStrokeColor();\n return !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n },\n hasShadow: function() {\n var color = this.getShadowColor();\n return !!color && color.alpha > 0 && (this.getShadowBlur() > 0 || !this.getShadowOffset().isZero());\n },\n getView: function() {\n return this._project._view;\n },\n getFontStyle: function() {\n var fontSize = this.getFontSize();\n return this.getFontWeight() + \" \" + fontSize + (/[a-z]/i.test(fontSize + \"\") ? \" \" : \"px \") + this.getFontFamily();\n },\n getFont: \"#getFontFamily\",\n setFont: \"#setFontFamily\",\n getLeading: function getLeading() {\n var leading = getLeading.base.call(this), fontSize = this.getFontSize();\n if (/pt|em|%|px/.test(fontSize)) fontSize = this.getView().getPixelSize(fontSize);\n return leading != null ? leading : fontSize * 1.2;\n }\n });\n var DomElement = new function() {\n function handlePrefix(el, name, set, value) {\n var prefixes = [\n \"\",\n \"webkit\",\n \"moz\",\n \"Moz\",\n \"ms\",\n \"o\"\n ], suffix = name[0].toUpperCase() + name.substring(1);\n for(var i = 0; i < 6; i++){\n var prefix = prefixes[i], key = prefix ? prefix + suffix : name;\n if (key in el) {\n if (set) el[key] = value;\n else return el[key];\n break;\n }\n }\n }\n return {\n getStyles: function(el) {\n var doc = el && el.nodeType !== 9 ? el.ownerDocument : el, view = doc && doc.defaultView;\n return view && view.getComputedStyle(el, \"\");\n },\n getBounds: function(el, viewport) {\n var doc = el.ownerDocument, body = doc.body, html = doc.documentElement, rect;\n try {\n rect = el.getBoundingClientRect();\n } catch (e) {\n rect = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n }\n var x = rect.left - (html.clientLeft || body.clientLeft || 0), y = rect.top - (html.clientTop || body.clientTop || 0);\n if (!viewport) {\n var view = doc.defaultView;\n x += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n y += view.pageYOffset || html.scrollTop || body.scrollTop;\n }\n return new Rectangle(x, y, rect.width, rect.height);\n },\n getViewportBounds: function(el) {\n var doc = el.ownerDocument, view = doc.defaultView, html = doc.documentElement;\n return new Rectangle(0, 0, view.innerWidth || html.clientWidth, view.innerHeight || html.clientHeight);\n },\n getOffset: function(el, viewport) {\n return DomElement.getBounds(el, viewport).getPoint();\n },\n getSize: function(el) {\n return DomElement.getBounds(el, true).getSize();\n },\n isInvisible: function(el) {\n return DomElement.getSize(el).equals(new Size(0, 0));\n },\n isInView: function(el) {\n return !DomElement.isInvisible(el) && DomElement.getViewportBounds(el).intersects(DomElement.getBounds(el, true));\n },\n isInserted: function(el) {\n return document.body.contains(el);\n },\n getPrefixed: function(el, name) {\n return el && handlePrefix(el, name);\n },\n setPrefixed: function(el, name, value) {\n if (typeof name === \"object\") for(var key in name)handlePrefix(el, key, true, name[key]);\n else handlePrefix(el, name, true, value);\n }\n };\n };\n var DomEvent = {\n add: function(el, events) {\n if (el) for(var type in events){\n var func = events[type], parts = type.split(/[\\s,]+/g);\n for(var i = 0, l = parts.length; i < l; i++){\n var name = parts[i];\n var options = el === document && (name === \"touchstart\" || name === \"touchmove\") ? {\n passive: false\n } : false;\n el.addEventListener(name, func, options);\n }\n }\n },\n remove: function(el, events) {\n if (el) for(var type in events){\n var func = events[type], parts = type.split(/[\\s,]+/g);\n for(var i = 0, l = parts.length; i < l; i++)el.removeEventListener(parts[i], func, false);\n }\n },\n getPoint: function(event) {\n var pos = event.targetTouches ? event.targetTouches.length ? event.targetTouches[0] : event.changedTouches[0] : event;\n return new Point(pos.pageX || pos.clientX + document.documentElement.scrollLeft, pos.pageY || pos.clientY + document.documentElement.scrollTop);\n },\n getTarget: function(event) {\n return event.target || event.srcElement;\n },\n getRelatedTarget: function(event) {\n return event.relatedTarget || event.toElement;\n },\n getOffset: function(event, target) {\n return DomEvent.getPoint(event).subtract(DomElement.getOffset(target || DomEvent.getTarget(event)));\n }\n };\n DomEvent.requestAnimationFrame = new function() {\n var nativeRequest = DomElement.getPrefixed(window, \"requestAnimationFrame\"), requested = false, callbacks = [], timer;\n function handleCallbacks() {\n var functions = callbacks;\n callbacks = [];\n for(var i = 0, l = functions.length; i < l; i++)functions[i]();\n requested = nativeRequest && callbacks.length;\n if (requested) nativeRequest(handleCallbacks);\n }\n return function(callback) {\n callbacks.push(callback);\n if (nativeRequest) {\n if (!requested) {\n nativeRequest(handleCallbacks);\n requested = true;\n }\n } else if (!timer) timer = setInterval(handleCallbacks, 1000 / 60);\n };\n };\n var View = Base.extend(Emitter, {\n _class: \"View\",\n initialize: function View(project, element) {\n function getSize(name) {\n return element[name] || parseInt(element.getAttribute(name), 10);\n }\n function getCanvasSize() {\n var size = DomElement.getSize(element);\n return size.isNaN() || size.isZero() ? new Size(getSize(\"width\"), getSize(\"height\")) : size;\n }\n var size;\n if (window && element) {\n this._id = element.getAttribute(\"id\");\n if (this._id == null) element.setAttribute(\"id\", this._id = \"paper-view-\" + View._id++);\n DomEvent.add(element, this._viewEvents);\n var none = \"none\";\n DomElement.setPrefixed(element.style, {\n userDrag: none,\n userSelect: none,\n touchCallout: none,\n contentZooming: none,\n tapHighlightColor: \"rgba(0,0,0,0)\"\n });\n if (PaperScope.hasAttribute(element, \"resize\")) {\n var that = this;\n DomEvent.add(window, this._windowEvents = {\n resize: function() {\n that.setViewSize(getCanvasSize());\n }\n });\n }\n size = getCanvasSize();\n if (PaperScope.hasAttribute(element, \"stats\") && typeof Stats !== \"undefined\") {\n this._stats = new Stats();\n var stats = this._stats.domElement, style = stats.style, offset = DomElement.getOffset(element);\n style.position = \"absolute\";\n style.left = offset.x + \"px\";\n style.top = offset.y + \"px\";\n document.body.appendChild(stats);\n }\n } else {\n size = new Size(element);\n element = null;\n }\n this._project = project;\n this._scope = project._scope;\n this._element = element;\n if (!this._pixelRatio) this._pixelRatio = window && window.devicePixelRatio || 1;\n this._setElementSize(size.width, size.height);\n this._viewSize = size;\n View._views.push(this);\n View._viewsById[this._id] = this;\n (this._matrix = new Matrix())._owner = this;\n if (!View._focused) View._focused = this;\n this._frameItems = {};\n this._frameItemCount = 0;\n this._itemEvents = {\n native: {},\n virtual: {}\n };\n this._autoUpdate = !paper.agent.node;\n this._needsUpdate = false;\n },\n remove: function() {\n if (!this._project) return false;\n if (View._focused === this) View._focused = null;\n View._views.splice(View._views.indexOf(this), 1);\n delete View._viewsById[this._id];\n var project = this._project;\n if (project._view === this) project._view = null;\n DomEvent.remove(this._element, this._viewEvents);\n DomEvent.remove(window, this._windowEvents);\n this._element = this._project = null;\n this.off(\"frame\");\n this._animate = false;\n this._frameItems = {};\n return true;\n },\n _events: Base.each(Item._itemHandlers.concat([\n \"onResize\",\n \"onKeyDown\",\n \"onKeyUp\"\n ]), function(name) {\n this[name] = {};\n }, {\n onFrame: {\n install: function() {\n this.play();\n },\n uninstall: function() {\n this.pause();\n }\n }\n }),\n _animate: false,\n _time: 0,\n _count: 0,\n getAutoUpdate: function() {\n return this._autoUpdate;\n },\n setAutoUpdate: function(autoUpdate) {\n this._autoUpdate = autoUpdate;\n if (autoUpdate) this.requestUpdate();\n },\n update: function() {},\n draw: function() {\n this.update();\n },\n requestUpdate: function() {\n if (!this._requested) {\n var that = this;\n DomEvent.requestAnimationFrame(function() {\n that._requested = false;\n if (that._animate) {\n that.requestUpdate();\n var element = that._element;\n if ((!DomElement.getPrefixed(document, \"hidden\") || PaperScope.getAttribute(element, \"keepalive\") === \"true\") && DomElement.isInView(element)) that._handleFrame();\n }\n if (that._autoUpdate) that.update();\n });\n this._requested = true;\n }\n },\n play: function() {\n this._animate = true;\n this.requestUpdate();\n },\n pause: function() {\n this._animate = false;\n },\n _handleFrame: function() {\n paper = this._scope;\n var now = Date.now() / 1000, delta = this._last ? now - this._last : 0;\n this._last = now;\n this.emit(\"frame\", new Base({\n delta: delta,\n time: this._time += delta,\n count: this._count++\n }));\n if (this._stats) this._stats.update();\n },\n _animateItem: function(item, animate) {\n var items = this._frameItems;\n if (animate) {\n items[item._id] = {\n item: item,\n time: 0,\n count: 0\n };\n if (++this._frameItemCount === 1) this.on(\"frame\", this._handleFrameItems);\n } else {\n delete items[item._id];\n if (--this._frameItemCount === 0) this.off(\"frame\", this._handleFrameItems);\n }\n },\n _handleFrameItems: function(event) {\n for(var i in this._frameItems){\n var entry = this._frameItems[i];\n entry.item.emit(\"frame\", new Base(event, {\n time: entry.time += event.delta,\n count: entry.count++\n }));\n }\n },\n _changed: function() {\n this._project._changed(4097);\n this._bounds = this._decomposed = undefined;\n },\n getElement: function() {\n return this._element;\n },\n getPixelRatio: function() {\n return this._pixelRatio;\n },\n getResolution: function() {\n return this._pixelRatio * 72;\n },\n getViewSize: function() {\n var size = this._viewSize;\n return new LinkedSize(size.width, size.height, this, \"setViewSize\");\n },\n setViewSize: function() {\n var size = Size.read(arguments), delta = size.subtract(this._viewSize);\n if (delta.isZero()) return;\n this._setElementSize(size.width, size.height);\n this._viewSize.set(size);\n this._changed();\n this.emit(\"resize\", {\n size: size,\n delta: delta\n });\n if (this._autoUpdate) this.update();\n },\n _setElementSize: function(width, height) {\n var element = this._element;\n if (element) {\n if (element.width !== width) element.width = width;\n if (element.height !== height) element.height = height;\n }\n },\n getBounds: function() {\n if (!this._bounds) this._bounds = this._matrix.inverted()._transformBounds(new Rectangle(new Point(), this._viewSize));\n return this._bounds;\n },\n getSize: function() {\n return this.getBounds().getSize();\n },\n isVisible: function() {\n return DomElement.isInView(this._element);\n },\n isInserted: function() {\n return DomElement.isInserted(this._element);\n },\n getPixelSize: function(size) {\n var element = this._element, pixels;\n if (element) {\n var parent = element.parentNode, temp = document.createElement(\"div\");\n temp.style.fontSize = size;\n parent.appendChild(temp);\n pixels = parseFloat(DomElement.getStyles(temp).fontSize);\n parent.removeChild(temp);\n } else pixels = parseFloat(pixels);\n return pixels;\n },\n getTextWidth: function(font, lines) {\n return 0;\n }\n }, Base.each([\n \"rotate\",\n \"scale\",\n \"shear\",\n \"skew\"\n ], function(key) {\n var rotate = key === \"rotate\";\n this[key] = function() {\n var args = arguments, value = (rotate ? Base : Point).read(args), center = Point.read(args, 0, {\n readNull: true\n });\n return this.transform(new Matrix()[key](value, center || this.getCenter(true)));\n };\n }, {\n _decompose: function() {\n return this._decomposed || (this._decomposed = this._matrix.decompose());\n },\n translate: function() {\n var mx = new Matrix();\n return this.transform(mx.translate.apply(mx, arguments));\n },\n getCenter: function() {\n return this.getBounds().getCenter();\n },\n setCenter: function() {\n var center = Point.read(arguments);\n this.translate(this.getCenter().subtract(center));\n },\n getZoom: function() {\n var scaling = this._decompose().scaling;\n return (scaling.x + scaling.y) / 2;\n },\n setZoom: function(zoom) {\n this.transform(new Matrix().scale(zoom / this.getZoom(), this.getCenter()));\n },\n getRotation: function() {\n return this._decompose().rotation;\n },\n setRotation: function(rotation) {\n var current = this.getRotation();\n if (current != null && rotation != null) this.rotate(rotation - current);\n },\n getScaling: function() {\n var scaling = this._decompose().scaling;\n return new LinkedPoint(scaling.x, scaling.y, this, \"setScaling\");\n },\n setScaling: function() {\n var current = this.getScaling(), scaling = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n if (current && scaling) this.scale(scaling.x / current.x, scaling.y / current.y);\n },\n getMatrix: function() {\n return this._matrix;\n },\n setMatrix: function() {\n var matrix = this._matrix;\n matrix.set.apply(matrix, arguments);\n },\n transform: function(matrix) {\n this._matrix.append(matrix);\n },\n scrollBy: function() {\n this.translate(Point.read(arguments).negate());\n }\n }), {\n projectToView: function() {\n return this._matrix._transformPoint(Point.read(arguments));\n },\n viewToProject: function() {\n return this._matrix._inverseTransform(Point.read(arguments));\n },\n getEventPoint: function(event) {\n return this.viewToProject(DomEvent.getOffset(event, this._element));\n }\n }, {\n statics: {\n _views: [],\n _viewsById: {},\n _id: 0,\n create: function(project, element) {\n if (document && typeof element === \"string\") element = document.getElementById(element);\n var ctor = window ? CanvasView : View;\n return new ctor(project, element);\n }\n }\n }, new function() {\n if (!window) return;\n var prevFocus, tempFocus, dragging = false, mouseDown = false;\n function getView(event) {\n var target = DomEvent.getTarget(event);\n return target.getAttribute && View._viewsById[target.getAttribute(\"id\")];\n }\n function updateFocus() {\n var view = View._focused;\n if (!view || !view.isVisible()) {\n for(var i = 0, l = View._views.length; i < l; i++)if ((view = View._views[i]).isVisible()) {\n View._focused = tempFocus = view;\n break;\n }\n }\n }\n function handleMouseMove(view, event, point) {\n view._handleMouseEvent(\"mousemove\", event, point);\n }\n var navigator = window.navigator, mousedown, mousemove, mouseup;\n if (navigator.pointerEnabled || navigator.msPointerEnabled) {\n mousedown = \"pointerdown MSPointerDown\";\n mousemove = \"pointermove MSPointerMove\";\n mouseup = \"pointerup pointercancel MSPointerUp MSPointerCancel\";\n } else {\n mousedown = \"touchstart\";\n mousemove = \"touchmove\";\n mouseup = \"touchend touchcancel\";\n if (!(\"ontouchstart\" in window && navigator.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n mousedown += \" mousedown\";\n mousemove += \" mousemove\";\n mouseup += \" mouseup\";\n }\n }\n var viewEvents = {}, docEvents = {\n mouseout: function(event) {\n var view = View._focused, target = DomEvent.getRelatedTarget(event);\n if (view && (!target || target.nodeName === \"HTML\")) {\n var offset = DomEvent.getOffset(event, view._element), x = offset.x, abs = Math.abs, ax = abs(x), max = 33554432, diff = ax - max;\n offset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n handleMouseMove(view, event, view.viewToProject(offset));\n }\n },\n scroll: updateFocus\n };\n viewEvents[mousedown] = function(event) {\n var view = View._focused = getView(event);\n if (!dragging) {\n dragging = true;\n view._handleMouseEvent(\"mousedown\", event);\n }\n };\n docEvents[mousemove] = function(event) {\n var view = View._focused;\n if (!mouseDown) {\n var target = getView(event);\n if (target) {\n if (view !== target) {\n if (view) handleMouseMove(view, event);\n if (!prevFocus) prevFocus = view;\n view = View._focused = tempFocus = target;\n }\n } else if (tempFocus && tempFocus === view) {\n if (prevFocus && !prevFocus.isInserted()) prevFocus = null;\n view = View._focused = prevFocus;\n prevFocus = null;\n updateFocus();\n }\n }\n if (view) handleMouseMove(view, event);\n };\n docEvents[mousedown] = function() {\n mouseDown = true;\n };\n docEvents[mouseup] = function(event) {\n var view = View._focused;\n if (view && dragging) view._handleMouseEvent(\"mouseup\", event);\n mouseDown = dragging = false;\n };\n DomEvent.add(document, docEvents);\n DomEvent.add(window, {\n load: updateFocus\n });\n var called = false, prevented = false, fallbacks = {\n doubleclick: \"click\",\n mousedrag: \"mousemove\"\n }, wasInView = false, overView, downPoint, lastPoint, downItem, overItem, dragItem, clickItem, clickTime, dblClick;\n function emitMouseEvent(obj, target, type, event, point, prevPoint, stopItem) {\n var stopped = false, mouseEvent;\n function emit(obj, type) {\n if (obj.responds(type)) {\n if (!mouseEvent) mouseEvent = new MouseEvent(type, event, point, target || obj, prevPoint ? point.subtract(prevPoint) : null);\n if (obj.emit(type, mouseEvent)) {\n called = true;\n if (mouseEvent.prevented) prevented = true;\n if (mouseEvent.stopped) return stopped = true;\n }\n } else {\n var fallback = fallbacks[type];\n if (fallback) return emit(obj, fallback);\n }\n }\n while(obj && obj !== stopItem){\n if (emit(obj, type)) break;\n obj = obj._parent;\n }\n return stopped;\n }\n function emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n view._project.removeOn(type);\n prevented = called = false;\n return dragItem && emitMouseEvent(dragItem, null, type, event, point, prevPoint) || hitItem && hitItem !== dragItem && !hitItem.isDescendant(dragItem) && emitMouseEvent(hitItem, null, type === \"mousedrag\" ? \"mousemove\" : type, event, point, prevPoint, dragItem) || emitMouseEvent(view, dragItem || hitItem || view, type, event, point, prevPoint);\n }\n var itemEventsMap = {\n mousedown: {\n mousedown: 1,\n mousedrag: 1,\n click: 1,\n doubleclick: 1\n },\n mouseup: {\n mouseup: 1,\n mousedrag: 1,\n click: 1,\n doubleclick: 1\n },\n mousemove: {\n mousedrag: 1,\n mousemove: 1,\n mouseenter: 1,\n mouseleave: 1\n }\n };\n return {\n _viewEvents: viewEvents,\n _handleMouseEvent: function(type, event, point) {\n var itemEvents = this._itemEvents, hitItems = itemEvents.native[type], nativeMove = type === \"mousemove\", tool = this._scope.tool, view = this;\n function responds(type) {\n return itemEvents.virtual[type] || view.responds(type) || tool && tool.responds(type);\n }\n if (nativeMove && dragging && responds(\"mousedrag\")) type = \"mousedrag\";\n if (!point) point = this.getEventPoint(event);\n var inView = this.getBounds().contains(point), hit = hitItems && inView && view._project.hitTest(point, {\n tolerance: 0,\n fill: true,\n stroke: true\n }), hitItem = hit && hit.item || null, handle = false, mouse = {};\n mouse[type.substr(5)] = true;\n if (hitItems && hitItem !== overItem) {\n if (overItem) emitMouseEvent(overItem, null, \"mouseleave\", event, point);\n if (hitItem) emitMouseEvent(hitItem, null, \"mouseenter\", event, point);\n overItem = hitItem;\n }\n if (wasInView ^ inView) {\n emitMouseEvent(this, null, inView ? \"mouseenter\" : \"mouseleave\", event, point);\n overView = inView ? this : null;\n handle = true;\n }\n if ((inView || mouse.drag) && !point.equals(lastPoint)) {\n emitMouseEvents(this, hitItem, nativeMove ? type : \"mousemove\", event, point, lastPoint);\n handle = true;\n }\n wasInView = inView;\n if (mouse.down && inView || mouse.up && downPoint) {\n emitMouseEvents(this, hitItem, type, event, point, downPoint);\n if (mouse.down) {\n dblClick = hitItem === clickItem && Date.now() - clickTime < 300;\n downItem = clickItem = hitItem;\n if (!prevented && hitItem) {\n var item = hitItem;\n while(item && !item.responds(\"mousedrag\"))item = item._parent;\n if (item) dragItem = hitItem;\n }\n downPoint = point;\n } else if (mouse.up) {\n if (!prevented && hitItem === downItem) {\n clickTime = Date.now();\n emitMouseEvents(this, hitItem, dblClick ? \"doubleclick\" : \"click\", event, point, downPoint);\n dblClick = false;\n }\n downItem = dragItem = null;\n }\n wasInView = false;\n handle = true;\n }\n lastPoint = point;\n if (handle && tool) called = tool._handleMouseEvent(type, event, point, mouse) || called;\n if (event.cancelable !== false && (called && !mouse.move || mouse.down && responds(\"mouseup\"))) event.preventDefault();\n },\n _handleKeyEvent: function(type, event, key, character) {\n var scope = this._scope, tool = scope.tool, keyEvent;\n function emit(obj) {\n if (obj.responds(type)) {\n paper = scope;\n obj.emit(type, keyEvent = keyEvent || new KeyEvent(type, event, key, character));\n }\n }\n if (this.isVisible()) {\n emit(this);\n if (tool && tool.responds(type)) emit(tool);\n }\n },\n _countItemEvent: function(type, sign) {\n var itemEvents = this._itemEvents, native = itemEvents.native, virtual = itemEvents.virtual;\n for(var key in itemEventsMap)native[key] = (native[key] || 0) + (itemEventsMap[key][type] || 0) * sign;\n virtual[type] = (virtual[type] || 0) + sign;\n },\n statics: {\n updateFocus: updateFocus,\n _resetState: function() {\n dragging = mouseDown = called = wasInView = false;\n prevFocus = tempFocus = overView = downPoint = lastPoint = downItem = overItem = dragItem = clickItem = clickTime = dblClick = null;\n }\n }\n };\n });\n var CanvasView = View.extend({\n _class: \"CanvasView\",\n initialize: function CanvasView(project, canvas) {\n if (!(canvas instanceof window.HTMLCanvasElement)) {\n var size = Size.read(arguments, 1);\n if (size.isZero()) throw new Error(\"Cannot create CanvasView with the provided argument: \" + Base.slice(arguments, 1));\n canvas = CanvasProvider.getCanvas(size);\n }\n var ctx = this._context = canvas.getContext(\"2d\");\n ctx.save();\n this._pixelRatio = 1;\n if (!/^off|false$/.test(PaperScope.getAttribute(canvas, \"hidpi\"))) {\n var deviceRatio = window.devicePixelRatio || 1, backingStoreRatio = DomElement.getPrefixed(ctx, \"backingStorePixelRatio\") || 1;\n this._pixelRatio = deviceRatio / backingStoreRatio;\n }\n View.call(this, project, canvas);\n this._needsUpdate = true;\n },\n remove: function remove() {\n this._context.restore();\n return remove.base.call(this);\n },\n _setElementSize: function _setElementSize(width, height) {\n var pixelRatio = this._pixelRatio;\n _setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n if (pixelRatio !== 1) {\n var element = this._element, ctx = this._context;\n if (!PaperScope.hasAttribute(element, \"resize\")) {\n var style = element.style;\n style.width = width + \"px\";\n style.height = height + \"px\";\n }\n ctx.restore();\n ctx.save();\n ctx.scale(pixelRatio, pixelRatio);\n }\n },\n getContext: function() {\n return this._context;\n },\n getPixelSize: function getPixelSize(size) {\n var agent = paper.agent, pixels;\n if (agent && agent.firefox) pixels = getPixelSize.base.call(this, size);\n else {\n var ctx = this._context, prevFont = ctx.font;\n ctx.font = size + \" serif\";\n pixels = parseFloat(ctx.font);\n ctx.font = prevFont;\n }\n return pixels;\n },\n getTextWidth: function(font, lines) {\n var ctx = this._context, prevFont = ctx.font, width = 0;\n ctx.font = font;\n for(var i = 0, l = lines.length; i < l; i++)width = Math.max(width, ctx.measureText(lines[i]).width);\n ctx.font = prevFont;\n return width;\n },\n update: function() {\n if (!this._needsUpdate) return false;\n var project = this._project, ctx = this._context, size = this._viewSize;\n ctx.clearRect(0, 0, size.width + 1, size.height + 1);\n if (project) project.draw(ctx, this._matrix, this._pixelRatio);\n this._needsUpdate = false;\n return true;\n }\n });\n var Event = Base.extend({\n _class: \"Event\",\n initialize: function Event(event) {\n this.event = event;\n this.type = event && event.type;\n },\n prevented: false,\n stopped: false,\n preventDefault: function() {\n this.prevented = true;\n this.event.preventDefault();\n },\n stopPropagation: function() {\n this.stopped = true;\n this.event.stopPropagation();\n },\n stop: function() {\n this.stopPropagation();\n this.preventDefault();\n },\n getTimeStamp: function() {\n return this.event.timeStamp;\n },\n getModifiers: function() {\n return Key.modifiers;\n }\n });\n var KeyEvent = Event.extend({\n _class: \"KeyEvent\",\n initialize: function KeyEvent(type, event, key, character) {\n this.type = type;\n this.event = event;\n this.key = key;\n this.character = character;\n },\n toString: function() {\n return \"{ type: '\" + this.type + \"', key: '\" + this.key + \"', character: '\" + this.character + \"', modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var Key = new function() {\n var keyLookup = {\n \"\t\": \"tab\",\n \" \": \"space\",\n \"\\b\": \"backspace\",\n \"\\x7f\": \"delete\",\n \"Spacebar\": \"space\",\n \"Del\": \"delete\",\n \"Win\": \"meta\",\n \"Esc\": \"escape\"\n }, charLookup = {\n \"tab\": \"\t\",\n \"space\": \" \",\n \"enter\": \"\\r\"\n }, keyMap = {}, charMap = {}, metaFixMap, downKey, modifiers = new Base({\n shift: false,\n control: false,\n alt: false,\n meta: false,\n capsLock: false,\n space: false\n }).inject({\n option: {\n get: function() {\n return this.alt;\n }\n },\n command: {\n get: function() {\n var agent = paper && paper.agent;\n return agent && agent.mac ? this.meta : this.control;\n }\n }\n });\n function getKey(event) {\n var key = event.key || event.keyIdentifier;\n key = /^U\\+/.test(key) ? String.fromCharCode(parseInt(key.substr(2), 16)) : /^Arrow[A-Z]/.test(key) ? key.substr(5) : key === \"Unidentified\" || key === undefined ? String.fromCharCode(event.keyCode) : key;\n return keyLookup[key] || (key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n }\n function handleKey(down, key, character, event) {\n var type = down ? \"keydown\" : \"keyup\", view = View._focused, name;\n keyMap[key] = down;\n if (down) charMap[key] = character;\n else delete charMap[key];\n if (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n modifiers[name] = down;\n var agent = paper && paper.agent;\n if (name === \"meta\" && agent && agent.mac) {\n if (down) metaFixMap = {};\n else {\n for(var k in metaFixMap)if (k in charMap) handleKey(false, k, metaFixMap[k], event);\n metaFixMap = null;\n }\n }\n } else if (down && metaFixMap) metaFixMap[key] = character;\n if (view) view._handleKeyEvent(down ? \"keydown\" : \"keyup\", event, key, character);\n }\n DomEvent.add(document, {\n keydown: function(event) {\n var key = getKey(event), agent = paper && paper.agent;\n if (key.length > 1 || agent && agent.chrome && (event.altKey || agent.mac && event.metaKey || !agent.mac && event.ctrlKey)) handleKey(true, key, charLookup[key] || (key.length > 1 ? \"\" : key), event);\n else downKey = key;\n },\n keypress: function(event) {\n if (downKey) {\n var key = getKey(event), code = event.charCode, character = code >= 32 ? String.fromCharCode(code) : key.length > 1 ? \"\" : key;\n if (key !== downKey) key = character.toLowerCase();\n handleKey(true, key, character, event);\n downKey = null;\n }\n },\n keyup: function(event) {\n var key = getKey(event);\n if (key in charMap) handleKey(false, key, charMap[key], event);\n }\n });\n DomEvent.add(window, {\n blur: function(event) {\n for(var key in charMap)handleKey(false, key, charMap[key], event);\n }\n });\n return {\n modifiers: modifiers,\n isDown: function(key) {\n return !!keyMap[key];\n }\n };\n };\n var MouseEvent = Event.extend({\n _class: \"MouseEvent\",\n initialize: function MouseEvent(type, event, point, target, delta) {\n this.type = type;\n this.event = event;\n this.point = point;\n this.target = target;\n this.delta = delta;\n },\n toString: function() {\n return \"{ type: '\" + this.type + \"', point: \" + this.point + \", target: \" + this.target + (this.delta ? \", delta: \" + this.delta : \"\") + \", modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var ToolEvent = Event.extend({\n _class: \"ToolEvent\",\n _item: null,\n initialize: function ToolEvent(tool, type, event) {\n this.tool = tool;\n this.type = type;\n this.event = event;\n },\n _choosePoint: function(point, toolPoint) {\n return point ? point : toolPoint ? toolPoint.clone() : null;\n },\n getPoint: function() {\n return this._choosePoint(this._point, this.tool._point);\n },\n setPoint: function(point) {\n this._point = point;\n },\n getLastPoint: function() {\n return this._choosePoint(this._lastPoint, this.tool._lastPoint);\n },\n setLastPoint: function(lastPoint) {\n this._lastPoint = lastPoint;\n },\n getDownPoint: function() {\n return this._choosePoint(this._downPoint, this.tool._downPoint);\n },\n setDownPoint: function(downPoint) {\n this._downPoint = downPoint;\n },\n getMiddlePoint: function() {\n if (!this._middlePoint && this.tool._lastPoint) return this.tool._point.add(this.tool._lastPoint).divide(2);\n return this._middlePoint;\n },\n setMiddlePoint: function(middlePoint) {\n this._middlePoint = middlePoint;\n },\n getDelta: function() {\n return !this._delta && this.tool._lastPoint ? this.tool._point.subtract(this.tool._lastPoint) : this._delta;\n },\n setDelta: function(delta) {\n this._delta = delta;\n },\n getCount: function() {\n return this.tool[/^mouse(down|up)$/.test(this.type) ? \"_downCount\" : \"_moveCount\"];\n },\n setCount: function(count) {\n this.tool[/^mouse(down|up)$/.test(this.type) ? \"downCount\" : \"count\"] = count;\n },\n getItem: function() {\n if (!this._item) {\n var result = this.tool._scope.project.hitTest(this.getPoint());\n if (result) {\n var item = result.item, parent = item._parent;\n while(/^(Group|CompoundPath)$/.test(parent._class)){\n item = parent;\n parent = parent._parent;\n }\n this._item = item;\n }\n }\n return this._item;\n },\n setItem: function(item) {\n this._item = item;\n },\n toString: function() {\n return \"{ type: \" + this.type + \", point: \" + this.getPoint() + \", count: \" + this.getCount() + \", modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var Tool = PaperScopeItem.extend({\n _class: \"Tool\",\n _list: \"tools\",\n _reference: \"tool\",\n _events: [\n \"onMouseDown\",\n \"onMouseUp\",\n \"onMouseDrag\",\n \"onMouseMove\",\n \"onActivate\",\n \"onDeactivate\",\n \"onEditOptions\",\n \"onKeyDown\",\n \"onKeyUp\"\n ],\n initialize: function Tool(props) {\n PaperScopeItem.call(this);\n this._moveCount = -1;\n this._downCount = -1;\n this.set(props);\n },\n getMinDistance: function() {\n return this._minDistance;\n },\n setMinDistance: function(minDistance) {\n this._minDistance = minDistance;\n if (minDistance != null && this._maxDistance != null && minDistance > this._maxDistance) this._maxDistance = minDistance;\n },\n getMaxDistance: function() {\n return this._maxDistance;\n },\n setMaxDistance: function(maxDistance) {\n this._maxDistance = maxDistance;\n if (this._minDistance != null && maxDistance != null && maxDistance < this._minDistance) this._minDistance = maxDistance;\n },\n getFixedDistance: function() {\n return this._minDistance == this._maxDistance ? this._minDistance : null;\n },\n setFixedDistance: function(distance) {\n this._minDistance = this._maxDistance = distance;\n },\n _handleMouseEvent: function(type, event, point, mouse) {\n paper = this._scope;\n if (mouse.drag && !this.responds(type)) type = \"mousemove\";\n var move = mouse.move || mouse.drag, responds = this.responds(type), minDistance = this.minDistance, maxDistance = this.maxDistance, called = false, tool = this;\n function update(minDistance, maxDistance) {\n var pt = point, toolPoint = move ? tool._point : tool._downPoint || pt;\n if (move) {\n if (tool._moveCount >= 0 && pt.equals(toolPoint)) return false;\n if (toolPoint && (minDistance != null || maxDistance != null)) {\n var vector = pt.subtract(toolPoint), distance = vector.getLength();\n if (distance < (minDistance || 0)) return false;\n if (maxDistance) pt = toolPoint.add(vector.normalize(Math.min(distance, maxDistance)));\n }\n tool._moveCount++;\n }\n tool._point = pt;\n tool._lastPoint = toolPoint || pt;\n if (mouse.down) {\n tool._moveCount = -1;\n tool._downPoint = pt;\n tool._downCount++;\n }\n return true;\n }\n function emit() {\n if (responds) called = tool.emit(type, new ToolEvent(tool, type, event)) || called;\n }\n if (mouse.down) {\n update();\n emit();\n } else if (mouse.up) {\n update(null, maxDistance);\n emit();\n } else if (responds) while(update(minDistance, maxDistance))emit();\n return called;\n }\n });\n var Tween = Base.extend(Emitter, {\n _class: \"Tween\",\n statics: {\n easings: new Base({\n linear: function(t) {\n return t;\n },\n easeInQuad: function(t) {\n return t * t;\n },\n easeOutQuad: function(t) {\n return t * (2 - t);\n },\n easeInOutQuad: function(t) {\n return t < 0.5 ? 2 * t * t : -1 + 2 * (2 - t) * t;\n },\n easeInCubic: function(t) {\n return t * t * t;\n },\n easeOutCubic: function(t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function(t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function(t) {\n return t * t * t * t;\n },\n easeOutQuart: function(t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function(t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function(t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function(t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n }\n })\n },\n initialize: function Tween(object, from, to, duration, easing, start) {\n this.object = object;\n var type = typeof easing;\n var isFunction = type === \"function\";\n this.type = isFunction ? type : type === \"string\" ? easing : \"linear\";\n this.easing = isFunction ? easing : Tween.easings[this.type];\n this.duration = duration;\n this.running = false;\n this._then = null;\n this._startTime = null;\n var state = from || to;\n this._keys = state ? Object.keys(state) : [];\n this._parsedKeys = this._parseKeys(this._keys);\n this._from = state && this._getState(from);\n this._to = state && this._getState(to);\n if (start !== false) this.start();\n },\n then: function(then) {\n this._then = then;\n return this;\n },\n start: function() {\n this._startTime = null;\n this.running = true;\n return this;\n },\n stop: function() {\n this.running = false;\n return this;\n },\n update: function(progress) {\n if (this.running) {\n if (progress >= 1) {\n progress = 1;\n this.running = false;\n }\n var factor = this.easing(progress), keys = this._keys, getValue = function(value) {\n return typeof value === \"function\" ? value(factor, progress) : value;\n };\n for(var i = 0, l = keys && keys.length; i < l; i++){\n var key = keys[i], from = getValue(this._from[key]), to = getValue(this._to[key]), value = from && to && from.__add && to.__add ? to.__subtract(from).__multiply(factor).__add(from) : (to - from) * factor + from;\n this._setProperty(this._parsedKeys[key], value);\n }\n if (this.responds(\"update\")) this.emit(\"update\", new Base({\n progress: progress,\n factor: factor\n }));\n if (!this.running && this._then) this._then(this.object);\n }\n return this;\n },\n _events: {\n onUpdate: {}\n },\n _handleFrame: function(time) {\n var startTime = this._startTime, progress = startTime ? (time - startTime) / this.duration : 0;\n if (!startTime) this._startTime = time;\n this.update(progress);\n },\n _getState: function(state) {\n var keys = this._keys, result = {};\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i], path = this._parsedKeys[key], current = this._getProperty(path), value;\n if (state) {\n var resolved = this._resolveValue(current, state[key]);\n this._setProperty(path, resolved);\n value = this._getProperty(path);\n value = value && value.clone ? value.clone() : value;\n this._setProperty(path, current);\n } else value = current && current.clone ? current.clone() : current;\n result[key] = value;\n }\n return result;\n },\n _resolveValue: function(current, value) {\n if (value) {\n if (Array.isArray(value) && value.length === 2) {\n var operator = value[0];\n return operator && operator.match && operator.match(/^[+\\-\\*\\/]=/) ? this._calculate(current, operator[0], value[1]) : value;\n } else if (typeof value === \"string\") {\n var match = value.match(/^[+\\-*/]=(.*)/);\n if (match) {\n var parsed = JSON.parse(match[1].replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g, '\"$2\": '));\n return this._calculate(current, value[0], parsed);\n }\n }\n }\n return value;\n },\n _calculate: function(left, operator, right) {\n return paper.PaperScript.calculateBinary(left, operator, right);\n },\n _parseKeys: function(keys) {\n var parsed = {};\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i], path = key.replace(/\\.([^.]*)/g, \"/$1\").replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, \"/$1\");\n parsed[key] = path.split(\"/\");\n }\n return parsed;\n },\n _getProperty: function(path, offset) {\n var obj = this.object;\n for(var i = 0, l = path.length - (offset || 0); i < l && obj; i++)obj = obj[path[i]];\n return obj;\n },\n _setProperty: function(path, value) {\n var dest = this._getProperty(path, 1);\n if (dest) dest[path[path.length - 1]] = value;\n }\n });\n var Http = {\n request: function(options) {\n var xhr = new self1.XMLHttpRequest();\n xhr.open((options.method || \"get\").toUpperCase(), options.url, Base.pick(options.async, true));\n if (options.mimeType) xhr.overrideMimeType(options.mimeType);\n xhr.onload = function() {\n var status = xhr.status;\n if (status === 0 || status === 200) {\n if (options.onLoad) options.onLoad.call(xhr, xhr.responseText);\n } else xhr.onerror();\n };\n xhr.onerror = function() {\n var status = xhr.status, message = 'Could not load \"' + options.url + '\" (Status: ' + status + \")\";\n if (options.onError) options.onError(message, status);\n else throw new Error(message);\n };\n return xhr.send(null);\n }\n };\n var CanvasProvider = Base.exports.CanvasProvider = {\n canvases: [],\n getCanvas: function(width, height, options) {\n if (!window) return null;\n var canvas, clear = true;\n if (typeof width === \"object\") {\n height = width.height;\n width = width.width;\n }\n if (this.canvases.length) canvas = this.canvases.pop();\n else {\n canvas = document.createElement(\"canvas\");\n clear = false;\n }\n var ctx = canvas.getContext(\"2d\", options || {});\n if (!ctx) throw new Error(\"Canvas \" + canvas + \" is unable to provide a 2D context.\");\n if (canvas.width === width && canvas.height === height) {\n if (clear) ctx.clearRect(0, 0, width + 1, height + 1);\n } else {\n canvas.width = width;\n canvas.height = height;\n }\n ctx.save();\n return canvas;\n },\n getContext: function(width, height, options) {\n var canvas = this.getCanvas(width, height, options);\n return canvas ? canvas.getContext(\"2d\", options || {}) : null;\n },\n release: function(obj) {\n var canvas = obj && obj.canvas ? obj.canvas : obj;\n if (canvas && canvas.getContext) {\n canvas.getContext(\"2d\").restore();\n this.canvases.push(canvas);\n }\n }\n };\n var BlendMode = new function() {\n var min = Math.min, max = Math.max, abs = Math.abs, sr, sg, sb, sa, br, bg, bb, ba, dr, dg, db;\n function getLum(r, g, b) {\n return 0.2989 * r + 0.587 * g + 0.114 * b;\n }\n function setLum(r, g, b, l) {\n var d = l - getLum(r, g, b);\n dr = r + d;\n dg = g + d;\n db = b + d;\n var l = getLum(dr, dg, db), mn = min(dr, dg, db), mx = max(dr, dg, db);\n if (mn < 0) {\n var lmn = l - mn;\n dr = l + (dr - l) * l / lmn;\n dg = l + (dg - l) * l / lmn;\n db = l + (db - l) * l / lmn;\n }\n if (mx > 255) {\n var ln = 255 - l, mxl = mx - l;\n dr = l + (dr - l) * ln / mxl;\n dg = l + (dg - l) * ln / mxl;\n db = l + (db - l) * ln / mxl;\n }\n }\n function getSat(r, g, b) {\n return max(r, g, b) - min(r, g, b);\n }\n function setSat(r, g, b, s) {\n var col = [\n r,\n g,\n b\n ], mx = max(r, g, b), mn = min(r, g, b), md;\n mn = mn === r ? 0 : mn === g ? 1 : 2;\n mx = mx === r ? 0 : mx === g ? 1 : 2;\n md = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n if (col[mx] > col[mn]) {\n col[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n col[mx] = s;\n } else col[md] = col[mx] = 0;\n col[mn] = 0;\n dr = col[0];\n dg = col[1];\n db = col[2];\n }\n var modes = {\n multiply: function() {\n dr = br * sr / 255;\n dg = bg * sg / 255;\n db = bb * sb / 255;\n },\n screen: function() {\n dr = br + sr - br * sr / 255;\n dg = bg + sg - bg * sg / 255;\n db = bb + sb - bb * sb / 255;\n },\n overlay: function() {\n dr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n dg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n db = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n },\n \"soft-light\": function() {\n var t = sr * br / 255;\n dr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n t = sg * bg / 255;\n dg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n t = sb * bb / 255;\n db = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n },\n \"hard-light\": function() {\n dr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n dg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n db = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n },\n \"color-dodge\": function() {\n dr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n dg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n db = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n },\n \"color-burn\": function() {\n dr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n dg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n db = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n },\n darken: function() {\n dr = br < sr ? br : sr;\n dg = bg < sg ? bg : sg;\n db = bb < sb ? bb : sb;\n },\n lighten: function() {\n dr = br > sr ? br : sr;\n dg = bg > sg ? bg : sg;\n db = bb > sb ? bb : sb;\n },\n difference: function() {\n dr = br - sr;\n if (dr < 0) dr = -dr;\n dg = bg - sg;\n if (dg < 0) dg = -dg;\n db = bb - sb;\n if (db < 0) db = -db;\n },\n exclusion: function() {\n dr = br + sr * (255 - br - br) / 255;\n dg = bg + sg * (255 - bg - bg) / 255;\n db = bb + sb * (255 - bb - bb) / 255;\n },\n hue: function() {\n setSat(sr, sg, sb, getSat(br, bg, bb));\n setLum(dr, dg, db, getLum(br, bg, bb));\n },\n saturation: function() {\n setSat(br, bg, bb, getSat(sr, sg, sb));\n setLum(dr, dg, db, getLum(br, bg, bb));\n },\n luminosity: function() {\n setLum(br, bg, bb, getLum(sr, sg, sb));\n },\n color: function() {\n setLum(sr, sg, sb, getLum(br, bg, bb));\n },\n add: function() {\n dr = min(br + sr, 255);\n dg = min(bg + sg, 255);\n db = min(bb + sb, 255);\n },\n subtract: function() {\n dr = max(br - sr, 0);\n dg = max(bg - sg, 0);\n db = max(bb - sb, 0);\n },\n average: function() {\n dr = (br + sr) / 2;\n dg = (bg + sg) / 2;\n db = (bb + sb) / 2;\n },\n negation: function() {\n dr = 255 - abs(255 - sr - br);\n dg = 255 - abs(255 - sg - bg);\n db = 255 - abs(255 - sb - bb);\n }\n };\n var nativeModes = this.nativeModes = Base.each([\n \"source-over\",\n \"source-in\",\n \"source-out\",\n \"source-atop\",\n \"destination-over\",\n \"destination-in\",\n \"destination-out\",\n \"destination-atop\",\n \"lighter\",\n \"darker\",\n \"copy\",\n \"xor\"\n ], function(mode) {\n this[mode] = true;\n }, {});\n var ctx = CanvasProvider.getContext(1, 1, {\n willReadFrequently: true\n });\n if (ctx) {\n Base.each(modes, function(func, mode) {\n var darken = mode === \"darken\", ok = false;\n ctx.save();\n try {\n ctx.fillStyle = darken ? \"#300\" : \"#a00\";\n ctx.fillRect(0, 0, 1, 1);\n ctx.globalCompositeOperation = mode;\n if (ctx.globalCompositeOperation === mode) {\n ctx.fillStyle = darken ? \"#a00\" : \"#300\";\n ctx.fillRect(0, 0, 1, 1);\n ok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken ? 170 : 51;\n }\n } catch (e) {}\n ctx.restore();\n nativeModes[mode] = ok;\n });\n CanvasProvider.release(ctx);\n }\n this.process = function(mode, srcContext, dstContext, alpha, offset) {\n var srcCanvas = srcContext.canvas, normal = mode === \"normal\";\n if (normal || nativeModes[mode]) {\n dstContext.save();\n dstContext.setTransform(1, 0, 0, 1, 0, 0);\n dstContext.globalAlpha = alpha;\n if (!normal) dstContext.globalCompositeOperation = mode;\n dstContext.drawImage(srcCanvas, offset.x, offset.y);\n dstContext.restore();\n } else {\n var process = modes[mode];\n if (!process) return;\n var dstData = dstContext.getImageData(offset.x, offset.y, srcCanvas.width, srcCanvas.height), dst = dstData.data, src = srcContext.getImageData(0, 0, srcCanvas.width, srcCanvas.height).data;\n for(var i = 0, l = dst.length; i < l; i += 4){\n sr = src[i];\n br = dst[i];\n sg = src[i + 1];\n bg = dst[i + 1];\n sb = src[i + 2];\n bb = dst[i + 2];\n sa = src[i + 3];\n ba = dst[i + 3];\n process();\n var a1 = sa * alpha / 255, a2 = 1 - a1;\n dst[i] = a1 * dr + a2 * br;\n dst[i + 1] = a1 * dg + a2 * bg;\n dst[i + 2] = a1 * db + a2 * bb;\n dst[i + 3] = sa * alpha + a2 * ba;\n }\n dstContext.putImageData(dstData, offset.x, offset.y);\n }\n };\n };\n var SvgElement = new function() {\n var svg = \"http://www.w3.org/2000/svg\", xmlns = \"http://www.w3.org/2000/xmlns\", xlink = \"http://www.w3.org/1999/xlink\", attributeNamespace = {\n href: xlink,\n xlink: xmlns,\n xmlns: xmlns + \"/\",\n \"xmlns:xlink\": xmlns + \"/\"\n };\n function create(tag, attributes, formatter) {\n return set(document.createElementNS(svg, tag), attributes, formatter);\n }\n function get(node, name) {\n var namespace = attributeNamespace[name], value = namespace ? node.getAttributeNS(namespace, name) : node.getAttribute(name);\n return value === \"null\" ? null : value;\n }\n function set(node, attributes, formatter) {\n for(var name in attributes){\n var value = attributes[name], namespace = attributeNamespace[name];\n if (typeof value === \"number\" && formatter) value = formatter.number(value);\n if (namespace) node.setAttributeNS(namespace, name, value);\n else node.setAttribute(name, value);\n }\n return node;\n }\n return {\n svg: svg,\n xmlns: xmlns,\n xlink: xlink,\n create: create,\n get: get,\n set: set\n };\n };\n var SvgStyles = Base.each({\n fillColor: [\n \"fill\",\n \"color\"\n ],\n fillRule: [\n \"fill-rule\",\n \"string\"\n ],\n strokeColor: [\n \"stroke\",\n \"color\"\n ],\n strokeWidth: [\n \"stroke-width\",\n \"number\"\n ],\n strokeCap: [\n \"stroke-linecap\",\n \"string\"\n ],\n strokeJoin: [\n \"stroke-linejoin\",\n \"string\"\n ],\n strokeScaling: [\n \"vector-effect\",\n \"lookup\",\n {\n true: \"none\",\n false: \"non-scaling-stroke\"\n },\n function(item, value) {\n return !value && (item instanceof PathItem || item instanceof Shape || item instanceof TextItem);\n }\n ],\n miterLimit: [\n \"stroke-miterlimit\",\n \"number\"\n ],\n dashArray: [\n \"stroke-dasharray\",\n \"array\"\n ],\n dashOffset: [\n \"stroke-dashoffset\",\n \"number\"\n ],\n fontFamily: [\n \"font-family\",\n \"string\"\n ],\n fontWeight: [\n \"font-weight\",\n \"string\"\n ],\n fontSize: [\n \"font-size\",\n \"number\"\n ],\n justification: [\n \"text-anchor\",\n \"lookup\",\n {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n }\n ],\n opacity: [\n \"opacity\",\n \"number\"\n ],\n blendMode: [\n \"mix-blend-mode\",\n \"style\"\n ]\n }, function(entry, key) {\n var part = Base.capitalize(key), lookup = entry[2];\n this[key] = {\n type: entry[1],\n property: key,\n attribute: entry[0],\n toSVG: lookup,\n fromSVG: lookup && Base.each(lookup, function(value, name) {\n this[value] = name;\n }, {}),\n exportFilter: entry[3],\n get: \"get\" + part,\n set: \"set\" + part\n };\n }, {});\n new function() {\n var formatter;\n function getTransform(matrix, coordinates, center) {\n var attrs = new Base(), trans = matrix.getTranslation();\n if (coordinates) {\n var point;\n if (matrix.isInvertible()) {\n matrix = matrix._shiftless();\n point = matrix._inverseTransform(trans);\n trans = null;\n } else point = new Point();\n attrs[center ? \"cx\" : \"x\"] = point.x;\n attrs[center ? \"cy\" : \"y\"] = point.y;\n }\n if (!matrix.isIdentity()) {\n var decomposed = matrix.decompose();\n if (decomposed) {\n var parts = [], angle = decomposed.rotation, scale = decomposed.scaling, skew = decomposed.skewing;\n if (trans && !trans.isZero()) parts.push(\"translate(\" + formatter.point(trans) + \")\");\n if (angle) parts.push(\"rotate(\" + formatter.number(angle) + \")\");\n if (!Numerical.isZero(scale.x - 1) || !Numerical.isZero(scale.y - 1)) parts.push(\"scale(\" + formatter.point(scale) + \")\");\n if (skew.x) parts.push(\"skewX(\" + formatter.number(skew.x) + \")\");\n if (skew.y) parts.push(\"skewY(\" + formatter.number(skew.y) + \")\");\n attrs.transform = parts.join(\" \");\n } else attrs.transform = \"matrix(\" + matrix.getValues().join(\",\") + \")\";\n }\n return attrs;\n }\n function exportGroup(item, options) {\n var attrs = getTransform(item._matrix), children = item._children;\n var node = SvgElement.create(\"g\", attrs, formatter);\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i];\n var childNode = exportSVG(child, options);\n if (childNode) {\n if (child.isClipMask()) {\n var clip = SvgElement.create(\"clipPath\");\n clip.appendChild(childNode);\n setDefinition(child, clip, \"clip\");\n SvgElement.set(node, {\n \"clip-path\": \"url(#\" + clip.id + \")\"\n });\n } else node.appendChild(childNode);\n }\n }\n return node;\n }\n function exportRaster(item, options) {\n var attrs = getTransform(item._matrix, true), size = item.getSize(), image = item.getImage();\n attrs.x -= size.width / 2;\n attrs.y -= size.height / 2;\n attrs.width = size.width;\n attrs.height = size.height;\n attrs.href = options.embedImages == false && image && image.src || item.toDataURL();\n return SvgElement.create(\"image\", attrs, formatter);\n }\n function exportPath(item, options) {\n var matchShapes = options.matchShapes;\n if (matchShapes) {\n var shape = item.toShape(false);\n if (shape) return exportShape(shape, options);\n }\n var segments = item._segments, length = segments.length, type, attrs = getTransform(item._matrix);\n if (matchShapes && length >= 2 && !item.hasHandles()) {\n if (length > 2) {\n type = item._closed ? \"polygon\" : \"polyline\";\n var parts = [];\n for(var i = 0; i < length; i++)parts.push(formatter.point(segments[i]._point));\n attrs.points = parts.join(\" \");\n } else {\n type = \"line\";\n var start = segments[0]._point, end = segments[1]._point;\n attrs.set({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y\n });\n }\n } else {\n type = \"path\";\n attrs.d = item.getPathData(null, options.precision);\n }\n return SvgElement.create(type, attrs, formatter);\n }\n function exportShape(item) {\n var type = item._type, radius = item._radius, attrs = getTransform(item._matrix, true, type !== \"rectangle\");\n if (type === \"rectangle\") {\n type = \"rect\";\n var size = item._size, width = size.width, height = size.height;\n attrs.x -= width / 2;\n attrs.y -= height / 2;\n attrs.width = width;\n attrs.height = height;\n if (radius.isZero()) radius = null;\n }\n if (radius) {\n if (type === \"circle\") attrs.r = radius;\n else {\n attrs.rx = radius.width;\n attrs.ry = radius.height;\n }\n }\n return SvgElement.create(type, attrs, formatter);\n }\n function exportCompoundPath(item, options) {\n var attrs = getTransform(item._matrix);\n var data = item.getPathData(null, options.precision);\n if (data) attrs.d = data;\n return SvgElement.create(\"path\", attrs, formatter);\n }\n function exportSymbolItem(item, options) {\n var attrs = getTransform(item._matrix, true), definition = item._definition, node = getDefinition(definition, \"symbol\"), definitionItem = definition._item, bounds = definitionItem.getStrokeBounds();\n if (!node) {\n node = SvgElement.create(\"symbol\", {\n viewBox: formatter.rectangle(bounds)\n });\n node.appendChild(exportSVG(definitionItem, options));\n setDefinition(definition, node, \"symbol\");\n }\n attrs.href = \"#\" + node.id;\n attrs.x += bounds.x;\n attrs.y += bounds.y;\n attrs.width = bounds.width;\n attrs.height = bounds.height;\n attrs.overflow = \"visible\";\n return SvgElement.create(\"use\", attrs, formatter);\n }\n function exportGradient(color) {\n var gradientNode = getDefinition(color, \"color\");\n if (!gradientNode) {\n var gradient = color.getGradient(), radial = gradient._radial, origin = color.getOrigin(), destination = color.getDestination(), attrs;\n if (radial) {\n attrs = {\n cx: origin.x,\n cy: origin.y,\n r: origin.getDistance(destination)\n };\n var highlight = color.getHighlight();\n if (highlight) {\n attrs.fx = highlight.x;\n attrs.fy = highlight.y;\n }\n } else attrs = {\n x1: origin.x,\n y1: origin.y,\n x2: destination.x,\n y2: destination.y\n };\n attrs.gradientUnits = \"userSpaceOnUse\";\n gradientNode = SvgElement.create((radial ? \"radial\" : \"linear\") + \"Gradient\", attrs, formatter);\n var stops = gradient._stops;\n for(var i = 0, l = stops.length; i < l; i++){\n var stop = stops[i], stopColor = stop._color, alpha = stopColor.getAlpha(), offset = stop._offset;\n attrs = {\n offset: offset == null ? i / (l - 1) : offset\n };\n if (stopColor) attrs[\"stop-color\"] = stopColor.toCSS(true);\n if (alpha < 1) attrs[\"stop-opacity\"] = alpha;\n gradientNode.appendChild(SvgElement.create(\"stop\", attrs, formatter));\n }\n setDefinition(color, gradientNode, \"color\");\n }\n return \"url(#\" + gradientNode.id + \")\";\n }\n function exportText(item) {\n var node = SvgElement.create(\"text\", getTransform(item._matrix, true), formatter);\n node.textContent = item._content;\n return node;\n }\n var exporters = {\n Group: exportGroup,\n Layer: exportGroup,\n Raster: exportRaster,\n Path: exportPath,\n Shape: exportShape,\n CompoundPath: exportCompoundPath,\n SymbolItem: exportSymbolItem,\n PointText: exportText\n };\n function applyStyle(item, node, isRoot) {\n var attrs = {}, parent = !isRoot && item.getParent(), style = [];\n if (item._name != null) attrs.id = item._name;\n Base.each(SvgStyles, function(entry) {\n var get = entry.get, type = entry.type, value = item[get]();\n if (entry.exportFilter ? entry.exportFilter(item, value) : !parent || !Base.equals(parent[get](), value)) {\n if (type === \"color\" && value != null) {\n var alpha = value.getAlpha();\n if (alpha < 1) attrs[entry.attribute + \"-opacity\"] = alpha;\n }\n if (type === \"style\") style.push(entry.attribute + \": \" + value);\n else attrs[entry.attribute] = value == null ? \"none\" : type === \"color\" ? value.gradient ? exportGradient(value, item) : value.toCSS(true) : type === \"array\" ? value.join(\",\") : type === \"lookup\" ? entry.toSVG[value] : value;\n }\n });\n if (style.length) attrs.style = style.join(\";\");\n if (attrs.opacity === 1) delete attrs.opacity;\n if (!item._visible) attrs.visibility = \"hidden\";\n return SvgElement.set(node, attrs, formatter);\n }\n var definitions;\n function getDefinition(item, type) {\n if (!definitions) definitions = {\n ids: {},\n svgs: {}\n };\n return item && definitions.svgs[type + \"-\" + (item._id || item.__id || (item.__id = UID.get(\"svg\")))];\n }\n function setDefinition(item, node, type) {\n if (!definitions) getDefinition();\n var typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n node.id = type + \"-\" + typeId;\n definitions.svgs[type + \"-\" + (item._id || item.__id)] = node;\n }\n function exportDefinitions(node, options) {\n var svg = node, defs = null;\n if (definitions) {\n svg = node.nodeName.toLowerCase() === \"svg\" && node;\n for(var i in definitions.svgs){\n if (!defs) {\n if (!svg) {\n svg = SvgElement.create(\"svg\");\n svg.appendChild(node);\n }\n defs = svg.insertBefore(SvgElement.create(\"defs\"), svg.firstChild);\n }\n defs.appendChild(definitions.svgs[i]);\n }\n definitions = null;\n }\n return options.asString ? new self1.XMLSerializer().serializeToString(svg) : svg;\n }\n function exportSVG(item, options, isRoot) {\n var exporter = exporters[item._class], node = exporter && exporter(item, options);\n if (node) {\n var onExport = options.onExport;\n if (onExport) node = onExport(item, node, options) || node;\n var data = JSON.stringify(item._data);\n if (data && data !== \"{}\" && data !== \"null\") node.setAttribute(\"data-paper-data\", data);\n }\n return node && applyStyle(item, node, isRoot);\n }\n function setOptions(options) {\n if (!options) options = {};\n formatter = new Formatter(options.precision);\n return options;\n }\n Item.inject({\n exportSVG: function(options) {\n options = setOptions(options);\n return exportDefinitions(exportSVG(this, options, true), options);\n }\n });\n Project.inject({\n exportSVG: function(options) {\n options = setOptions(options);\n var children = this._children, view = this.getView(), bounds = Base.pick(options.bounds, \"view\"), mx = options.matrix || bounds === \"view\" && view._matrix, matrix = mx && Matrix.read([\n mx\n ]), rect = bounds === \"view\" ? new Rectangle([\n 0,\n 0\n ], view.getViewSize()) : bounds === \"content\" ? Item._getBounds(children, matrix, {\n stroke: true\n }).rect : Rectangle.read([\n bounds\n ], 0, {\n readNull: true\n }), attrs = {\n version: \"1.1\",\n xmlns: SvgElement.svg,\n \"xmlns:xlink\": SvgElement.xlink\n };\n if (rect) {\n attrs.width = rect.width;\n attrs.height = rect.height;\n if (rect.x || rect.x === 0 || rect.y || rect.y === 0) attrs.viewBox = formatter.rectangle(rect);\n }\n var node = SvgElement.create(\"svg\", attrs, formatter), parent = node;\n if (matrix && !matrix.isIdentity()) parent = node.appendChild(SvgElement.create(\"g\", getTransform(matrix), formatter));\n for(var i = 0, l = children.length; i < l; i++)parent.appendChild(exportSVG(children[i], options, true));\n return exportDefinitions(node, options);\n }\n });\n };\n new function() {\n var definitions = {}, rootSize;\n function getValue(node, name, isString, allowNull, allowPercent, defaultValue) {\n var value = SvgElement.get(node, name) || defaultValue, res = value == null ? allowNull ? null : isString ? \"\" : 0 : isString ? value : parseFloat(value);\n return /%\\s*$/.test(value) ? res / 100 * (allowPercent ? 1 : rootSize[/x|^width/.test(name) ? \"width\" : \"height\"]) : res;\n }\n function getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n x = getValue(node, x || \"x\", false, allowNull, allowPercent, defaultX);\n y = getValue(node, y || \"y\", false, allowNull, allowPercent, defaultY);\n return allowNull && (x == null || y == null) ? null : new Point(x, y);\n }\n function getSize(node, w, h, allowNull, allowPercent) {\n w = getValue(node, w || \"width\", false, allowNull, allowPercent);\n h = getValue(node, h || \"height\", false, allowNull, allowPercent);\n return allowNull && (w == null || h == null) ? null : new Size(w, h);\n }\n function convertValue(value, type, lookup) {\n return value === \"none\" ? null : type === \"number\" ? parseFloat(value) : type === \"array\" ? value ? value.split(/[\\s,]+/g).map(parseFloat) : [] : type === \"color\" ? getDefinition(value) || value : type === \"lookup\" ? lookup[value] : value;\n }\n function importGroup(node, type, options, isRoot) {\n var nodes = node.childNodes, isClip = type === \"clippath\", isDefs = type === \"defs\", item = new Group(), project = item._project, currentStyle = project._currentStyle, children = [];\n if (!isClip && !isDefs) {\n item = applyAttributes(item, node, isRoot);\n project._currentStyle = item._style.clone();\n }\n if (isRoot) {\n var defs = node.querySelectorAll(\"defs\");\n for(var i = 0, l = defs.length; i < l; i++)importNode(defs[i], options, false);\n }\n for(var i = 0, l = nodes.length; i < l; i++){\n var childNode = nodes[i], child;\n if (childNode.nodeType === 1 && !/^defs$/i.test(childNode.nodeName) && (child = importNode(childNode, options, false)) && !(child instanceof SymbolDefinition)) children.push(child);\n }\n item.addChildren(children);\n if (isClip) item = applyAttributes(item.reduce(), node, isRoot);\n project._currentStyle = currentStyle;\n if (isClip || isDefs) {\n item.remove();\n item = null;\n }\n return item;\n }\n function importPoly(node, type) {\n var coords = node.getAttribute(\"points\").match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g), points = [];\n for(var i = 0, l = coords.length; i < l; i += 2)points.push(new Point(parseFloat(coords[i]), parseFloat(coords[i + 1])));\n var path = new Path(points);\n if (type === \"polygon\") path.closePath();\n return path;\n }\n function importPath(node) {\n return PathItem.create(node.getAttribute(\"d\"));\n }\n function importGradient(node, type) {\n var id = (getValue(node, \"href\", true) || \"\").substring(1), radial = type === \"radialgradient\", gradient;\n if (id) {\n gradient = definitions[id].getGradient();\n if (gradient._radial ^ radial) {\n gradient = gradient.clone();\n gradient._radial = radial;\n }\n } else {\n var nodes = node.childNodes, stops = [];\n for(var i = 0, l = nodes.length; i < l; i++){\n var child = nodes[i];\n if (child.nodeType === 1) stops.push(applyAttributes(new GradientStop(), child));\n }\n gradient = new Gradient(stops, radial);\n }\n var origin, destination, highlight, scaleToBounds = getValue(node, \"gradientUnits\", true) !== \"userSpaceOnUse\";\n if (radial) {\n origin = getPoint(node, \"cx\", \"cy\", false, scaleToBounds, \"50%\", \"50%\");\n destination = origin.add(getValue(node, \"r\", false, false, scaleToBounds, \"50%\"), 0);\n highlight = getPoint(node, \"fx\", \"fy\", true, scaleToBounds);\n } else {\n origin = getPoint(node, \"x1\", \"y1\", false, scaleToBounds, \"0%\", \"0%\");\n destination = getPoint(node, \"x2\", \"y2\", false, scaleToBounds, \"100%\", \"0%\");\n }\n var color = applyAttributes(new Color(gradient, origin, destination, highlight), node);\n color._scaleToBounds = scaleToBounds;\n return null;\n }\n var importers = {\n \"#document\": function(node, type, options, isRoot) {\n var nodes = node.childNodes;\n for(var i = 0, l = nodes.length; i < l; i++){\n var child = nodes[i];\n if (child.nodeType === 1) return importNode(child, options, isRoot);\n }\n },\n g: importGroup,\n svg: importGroup,\n clippath: importGroup,\n polygon: importPoly,\n polyline: importPoly,\n path: importPath,\n lineargradient: importGradient,\n radialgradient: importGradient,\n image: function(node) {\n var raster = new Raster(getValue(node, \"href\", true));\n raster.on(\"load\", function() {\n var size = getSize(node);\n this.setSize(size);\n var center = getPoint(node).add(size.divide(2));\n this._matrix.append(new Matrix().translate(center));\n });\n return raster;\n },\n symbol: function(node, type, options, isRoot) {\n return new SymbolDefinition(importGroup(node, type, options, isRoot), true);\n },\n defs: importGroup,\n use: function(node) {\n var id = (getValue(node, \"href\", true) || \"\").substring(1), definition = definitions[id], point = getPoint(node);\n return definition ? definition instanceof SymbolDefinition ? definition.place(point) : definition.clone().translate(point) : null;\n },\n circle: function(node) {\n return new Shape.Circle(getPoint(node, \"cx\", \"cy\"), getValue(node, \"r\"));\n },\n ellipse: function(node) {\n return new Shape.Ellipse({\n center: getPoint(node, \"cx\", \"cy\"),\n radius: getSize(node, \"rx\", \"ry\")\n });\n },\n rect: function(node) {\n return new Shape.Rectangle(new Rectangle(getPoint(node), getSize(node)), getSize(node, \"rx\", \"ry\"));\n },\n line: function(node) {\n return new Path.Line(getPoint(node, \"x1\", \"y1\"), getPoint(node, \"x2\", \"y2\"));\n },\n text: function(node) {\n var text = new PointText(getPoint(node).add(getPoint(node, \"dx\", \"dy\")));\n text.setContent(node.textContent.trim() || \"\");\n return text;\n },\n switch: importGroup\n };\n function applyTransform(item, value, name, node) {\n if (item.transform) {\n var transforms = (node.getAttribute(name) || \"\").split(/\\)\\s*/g), matrix = new Matrix();\n for(var i = 0, l = transforms.length; i < l; i++){\n var transform = transforms[i];\n if (!transform) break;\n var parts = transform.split(/\\(\\s*/), command = parts[0], v = parts[1].split(/[\\s,]+/g);\n for(var j = 0, m = v.length; j < m; j++)v[j] = parseFloat(v[j]);\n switch(command){\n case \"matrix\":\n matrix.append(new Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n break;\n case \"rotate\":\n matrix.rotate(v[0], v[1] || 0, v[2] || 0);\n break;\n case \"translate\":\n matrix.translate(v[0], v[1] || 0);\n break;\n case \"scale\":\n matrix.scale(v);\n break;\n case \"skewX\":\n matrix.skew(v[0], 0);\n break;\n case \"skewY\":\n matrix.skew(0, v[0]);\n break;\n }\n }\n item.transform(matrix);\n }\n }\n function applyOpacity(item, value, name) {\n var key = name === \"fill-opacity\" ? \"getFillColor\" : \"getStrokeColor\", color = item[key] && item[key]();\n if (color) color.setAlpha(parseFloat(value));\n }\n var attributes = Base.set(Base.each(SvgStyles, function(entry) {\n this[entry.attribute] = function(item, value) {\n if (item[entry.set]) {\n item[entry.set](convertValue(value, entry.type, entry.fromSVG));\n if (entry.type === \"color\") {\n var color = item[entry.get]();\n if (color) {\n if (color._scaleToBounds) {\n var bounds = item.getBounds();\n color.transform(new Matrix().translate(bounds.getPoint()).scale(bounds.getSize()));\n }\n }\n }\n }\n };\n }, {}), {\n id: function(item, value) {\n definitions[value] = item;\n if (item.setName) item.setName(value);\n },\n \"clip-path\": function(item, value) {\n var clip = getDefinition(value);\n if (clip) {\n clip = clip.clone();\n clip.setClipMask(true);\n if (item instanceof Group) item.insertChild(0, clip);\n else return new Group(clip, item);\n }\n },\n gradientTransform: applyTransform,\n transform: applyTransform,\n \"fill-opacity\": applyOpacity,\n \"stroke-opacity\": applyOpacity,\n visibility: function(item, value) {\n if (item.setVisible) item.setVisible(value === \"visible\");\n },\n display: function(item, value) {\n if (item.setVisible) item.setVisible(value !== null);\n },\n \"stop-color\": function(item, value) {\n if (item.setColor) item.setColor(value);\n },\n \"stop-opacity\": function(item, value) {\n if (item._color) item._color.setAlpha(parseFloat(value));\n },\n offset: function(item, value) {\n if (item.setOffset) {\n var percent = value.match(/(.*)%$/);\n item.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n }\n },\n viewBox: function(item, value, name, node, styles) {\n var rect = new Rectangle(convertValue(value, \"array\")), size = getSize(node, null, null, true), group, matrix;\n if (item instanceof Group) {\n var scale = size ? size.divide(rect.getSize()) : 1, matrix = new Matrix().scale(scale).translate(rect.getPoint().negate());\n group = item;\n } else if (item instanceof SymbolDefinition) {\n if (size) rect.setSize(size);\n group = item._item;\n }\n if (group) {\n if (getAttribute(node, \"overflow\", styles) !== \"visible\") {\n var clip = new Shape.Rectangle(rect);\n clip.setClipMask(true);\n group.addChild(clip);\n }\n if (matrix) group.transform(matrix);\n }\n }\n });\n function getAttribute(node, name, styles) {\n var attr = node.attributes[name], value = attr && attr.value;\n if (!value && node.style) {\n var style = Base.camelize(name);\n value = node.style[style];\n if (!value && styles.node[style] !== styles.parent[style]) value = styles.node[style];\n }\n return !value ? undefined : value === \"none\" ? null : value;\n }\n function applyAttributes(item, node, isRoot) {\n var parent = node.parentNode, styles = {\n node: DomElement.getStyles(node) || {},\n parent: !isRoot && !/^defs$/i.test(parent.tagName) && DomElement.getStyles(parent) || {}\n };\n Base.each(attributes, function(apply, name) {\n var value = getAttribute(node, name, styles);\n item = value !== undefined && apply(item, value, name, node, styles) || item;\n });\n return item;\n }\n function getDefinition(value) {\n var match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/), name = match && match[1], res = name && definitions[window ? name.replace(window.location.href.split(\"#\")[0] + \"#\", \"\") : name];\n if (res && res._scaleToBounds) {\n res = res.clone();\n res._scaleToBounds = true;\n }\n return res;\n }\n function importNode(node, options, isRoot) {\n var type = node.nodeName.toLowerCase(), isElement = type !== \"#document\", body = document.body, container, parent, next;\n if (isRoot && isElement) {\n rootSize = paper.getView().getSize();\n rootSize = getSize(node, null, null, true) || rootSize;\n container = SvgElement.create(\"svg\", {\n style: \"stroke-width: 1px; stroke-miterlimit: 10\"\n });\n parent = node.parentNode;\n next = node.nextSibling;\n container.appendChild(node);\n body.appendChild(container);\n }\n var settings = paper.settings, applyMatrix = settings.applyMatrix, insertItems = settings.insertItems;\n settings.applyMatrix = false;\n settings.insertItems = false;\n var importer = importers[type], item = importer && importer(node, type, options, isRoot) || null;\n settings.insertItems = insertItems;\n settings.applyMatrix = applyMatrix;\n if (item) {\n if (isElement && !(item instanceof Group)) item = applyAttributes(item, node, isRoot);\n var onImport = options.onImport, data = isElement && node.getAttribute(\"data-paper-data\");\n if (onImport) item = onImport(node, item, options) || item;\n if (options.expandShapes && item instanceof Shape) {\n item.remove();\n item = item.toPath();\n }\n if (data) item._data = JSON.parse(data);\n }\n if (container) {\n body.removeChild(container);\n if (parent) {\n if (next) parent.insertBefore(node, next);\n else parent.appendChild(node);\n }\n }\n if (isRoot) {\n definitions = {};\n if (item && Base.pick(options.applyMatrix, applyMatrix)) item.matrix.apply(true, true);\n }\n return item;\n }\n function importSVG(source, options, owner) {\n if (!source) return null;\n options = typeof options === \"function\" ? {\n onLoad: options\n } : options || {};\n var scope = paper, item = null;\n function onLoad(svg) {\n try {\n var node = typeof svg === \"object\" ? svg : new self1.DOMParser().parseFromString(svg.trim(), \"image/svg+xml\");\n if (!node.nodeName) {\n node = null;\n throw new Error(\"Unsupported SVG source: \" + source);\n }\n paper = scope;\n item = importNode(node, options, true);\n if (!options || options.insert !== false) owner._insertItem(undefined, item);\n var onLoad = options.onLoad;\n if (onLoad) onLoad(item, svg);\n } catch (e) {\n onError(e);\n }\n }\n function onError(message, status) {\n var onError = options.onError;\n if (onError) onError(message, status);\n else throw new Error(message);\n }\n if (typeof source === \"string\" && !/^[\\s\\S]* 3) {\n cats.sort(function(a, b) {\n return b.length - a.length;\n });\n f += \"switch(str.length){\";\n for(var i = 0; i < cats.length; ++i){\n var cat = cats[i];\n f += \"case \" + cat[0].length + \":\";\n compareTo(cat);\n }\n f += \"}\";\n } else compareTo(words);\n return new Function(\"str\", f);\n }\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u0620-\\u0649\\u0672-\\u06D3\\u06E7-\\u06E8\\u06FB-\\u06FC\\u0730-\\u074A\\u0800-\\u0814\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0840-\\u0857\\u08E4-\\u08FE\\u0900-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09D7\\u09DF-\\u09E0\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B60\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2-\\u0CE3\\u0CE6-\\u0CEF\\u0D02\\u0D03\\u0D46-\\u0D48\\u0D57\\u0D62-\\u0D63\\u0D66-\\u0D6F\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E34-\\u0E3A\\u0E40-\\u0E45\\u0E50-\\u0E59\\u0EB4-\\u0EB9\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F41-\\u0F47\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u170E-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17B2\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1920-\\u192B\\u1930-\\u193B\\u1951-\\u196D\\u19B0-\\u19C0\\u19C8-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A15\\u1A20-\\u1A53\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1B46-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C00-\\u1C22\\u1C40-\\u1C49\\u1C5B-\\u1C7D\\u1CD0-\\u1CD2\\u1D00-\\u1DBE\\u1E01-\\u1F15\\u200C\\u200D\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2D81-\\u2D96\\u2DE0-\\u2DFF\\u3021-\\u3028\\u3099\\u309A\\uA640-\\uA66D\\uA674-\\uA67D\\uA69F\\uA6F0-\\uA6F1\\uA7F8-\\uA800\\uA806\\uA80B\\uA823-\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C4\\uA8D0-\\uA8D9\\uA8F3-\\uA8F7\\uA900-\\uA909\\uA926-\\uA92D\\uA930-\\uA945\\uA980-\\uA983\\uA9B3-\\uA9C0\\uAA00-\\uAA27\\uAA40-\\uAA41\\uAA4C-\\uAA4D\\uAA50-\\uAA59\\uAA7B\\uAAE0-\\uAAE9\\uAAF2-\\uAAF3\\uABC0-\\uABE1\\uABEC\\uABED\\uABF0-\\uABF9\\uFB20-\\uFB28\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n var newline = /[\\n\\r\\u2028\\u2029]/;\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n if (code < 65) return code === 36;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n function line_loc_t() {\n this.line = tokCurLine;\n this.column = tokPos - tokLineStart;\n }\n function initTokenState() {\n tokCurLine = 1;\n tokPos = tokLineStart = 0;\n tokRegexpAllowed = true;\n skipSpace();\n }\n function finishToken(type, val) {\n tokEnd = tokPos;\n if (options.locations) tokEndLoc = new line_loc_t;\n tokType = type;\n skipSpace();\n tokVal = val;\n tokRegexpAllowed = type.beforeExpr;\n }\n function skipBlockComment() {\n var startLoc = options.onComment && options.locations && new line_loc_t;\n var start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n if (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n tokPos = end + 2;\n if (options.locations) {\n lineBreak.lastIndex = start;\n var match;\n while((match = lineBreak.exec(input)) && match.index < tokPos){\n ++tokCurLine;\n tokLineStart = match.index + match[0].length;\n }\n }\n if (options.onComment) options.onComment(true, input.slice(start + 2, end), start, tokPos, startLoc, options.locations && new line_loc_t);\n }\n function skipLineComment() {\n var start = tokPos;\n var startLoc = options.onComment && options.locations && new line_loc_t;\n var ch = input.charCodeAt(tokPos += 2);\n while(tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233){\n ++tokPos;\n ch = input.charCodeAt(tokPos);\n }\n if (options.onComment) options.onComment(false, input.slice(start + 2, tokPos), start, tokPos, startLoc, options.locations && new line_loc_t);\n }\n function skipSpace() {\n while(tokPos < inputLen){\n var ch = input.charCodeAt(tokPos);\n if (ch === 32) ++tokPos;\n else if (ch === 13) {\n ++tokPos;\n var next = input.charCodeAt(tokPos);\n if (next === 10) ++tokPos;\n if (options.locations) {\n ++tokCurLine;\n tokLineStart = tokPos;\n }\n } else if (ch === 10 || ch === 8232 || ch === 8233) {\n ++tokPos;\n if (options.locations) {\n ++tokCurLine;\n tokLineStart = tokPos;\n }\n } else if (ch > 8 && ch < 14) ++tokPos;\n else if (ch === 47) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 42) skipBlockComment();\n else if (next === 47) skipLineComment();\n else break;\n } else if (ch === 160) ++tokPos;\n else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) ++tokPos;\n else break;\n }\n }\n function readToken_dot() {\n var next = input.charCodeAt(tokPos + 1);\n if (next >= 48 && next <= 57) return readNumber(true);\n ++tokPos;\n return finishToken(_dot);\n }\n function readToken_slash() {\n var next = input.charCodeAt(tokPos + 1);\n if (tokRegexpAllowed) {\n ++tokPos;\n return readRegexp();\n }\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_slash, 1);\n }\n function readToken_mult_modulo() {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_multiplyModulo, 1);\n }\n function readToken_pipe_amp(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n function readToken_caret() {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_bitwiseXOR, 1);\n }\n function readToken_plus_min(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === code) {\n if (next == 45 && input.charCodeAt(tokPos + 2) == 62 && newline.test(input.slice(lastEnd, tokPos))) {\n tokPos += 3;\n skipLineComment();\n skipSpace();\n return readToken();\n }\n return finishOp(_incDec, 2);\n }\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_plusMin, 1);\n }\n function readToken_lt_gt(code) {\n var next = input.charCodeAt(tokPos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n return finishOp(_bitShift, size);\n }\n if (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 && input.charCodeAt(tokPos + 3) == 45) {\n tokPos += 4;\n skipLineComment();\n skipSpace();\n return readToken();\n }\n if (next === 61) size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n return finishOp(_relational, size);\n }\n function readToken_eq_excl(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n return finishOp(code === 61 ? _eq : _prefix, 1);\n }\n function getTokenFromCode(code) {\n switch(code){\n case 46:\n return readToken_dot();\n case 40:\n ++tokPos;\n return finishToken(_parenL);\n case 41:\n ++tokPos;\n return finishToken(_parenR);\n case 59:\n ++tokPos;\n return finishToken(_semi);\n case 44:\n ++tokPos;\n return finishToken(_comma);\n case 91:\n ++tokPos;\n return finishToken(_bracketL);\n case 93:\n ++tokPos;\n return finishToken(_bracketR);\n case 123:\n ++tokPos;\n return finishToken(_braceL);\n case 125:\n ++tokPos;\n return finishToken(_braceR);\n case 58:\n ++tokPos;\n return finishToken(_colon);\n case 63:\n ++tokPos;\n return finishToken(_question);\n case 48:\n var next = input.charCodeAt(tokPos + 1);\n if (next === 120 || next === 88) return readHexNumber();\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n return readNumber(false);\n case 34:\n case 39:\n return readString(code);\n case 47:\n return readToken_slash(code);\n case 37:\n case 42:\n return readToken_mult_modulo();\n case 124:\n case 38:\n return readToken_pipe_amp(code);\n case 94:\n return readToken_caret();\n case 43:\n case 45:\n return readToken_plus_min(code);\n case 60:\n case 62:\n return readToken_lt_gt(code);\n case 61:\n case 33:\n return readToken_eq_excl(code);\n case 126:\n return finishOp(_prefix, 1);\n }\n return false;\n }\n function readToken(forceRegexp) {\n if (!forceRegexp) tokStart = tokPos;\n else tokPos = tokStart + 1;\n if (options.locations) tokStartLoc = new line_loc_t;\n if (forceRegexp) return readRegexp();\n if (tokPos >= inputLen) return finishToken(_eof);\n var code = input.charCodeAt(tokPos);\n if (isIdentifierStart(code) || code === 92) return readWord();\n var tok = getTokenFromCode(code);\n if (tok === false) {\n var ch = String.fromCharCode(code);\n if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n }\n return tok;\n }\n function finishOp(type, size) {\n var str = input.slice(tokPos, tokPos + size);\n tokPos += size;\n finishToken(type, str);\n }\n function readRegexp() {\n var content = \"\", escaped, inClass, start = tokPos;\n for(;;){\n if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n var ch = input.charAt(tokPos);\n if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n if (!escaped) {\n if (ch === \"[\") inClass = true;\n else if (ch === \"]\" && inClass) inClass = false;\n else if (ch === \"/\" && !inClass) break;\n escaped = ch === \"\\\\\";\n } else escaped = false;\n ++tokPos;\n }\n var content = input.slice(start, tokPos);\n ++tokPos;\n var mods = readWord1();\n if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n try {\n var value = new RegExp(content, mods);\n } catch (e) {\n if (e instanceof SyntaxError) raise(start, e.message);\n raise(e);\n }\n return finishToken(_regexp, value);\n }\n function readInt(radix, len) {\n var start = tokPos, total = 0;\n for(var i = 0, e = len == null ? Infinity : len; i < e; ++i){\n var code = input.charCodeAt(tokPos), val;\n if (code >= 97) val = code - 97 + 10;\n else if (code >= 65) val = code - 65 + 10;\n else if (code >= 48 && code <= 57) val = code - 48;\n else val = Infinity;\n if (val >= radix) break;\n ++tokPos;\n total = total * radix + val;\n }\n if (tokPos === start || len != null && tokPos - start !== len) return null;\n return total;\n }\n function readHexNumber() {\n tokPos += 2;\n var val = readInt(16);\n if (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n return finishToken(_num, val);\n }\n function readNumber(startsWithDot) {\n var start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n if (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n if (input.charCodeAt(tokPos) === 46) {\n ++tokPos;\n readInt(10);\n isFloat = true;\n }\n var next = input.charCodeAt(tokPos);\n if (next === 69 || next === 101) {\n next = input.charCodeAt(++tokPos);\n if (next === 43 || next === 45) ++tokPos;\n if (readInt(10) === null) raise(start, \"Invalid number\");\n isFloat = true;\n }\n if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n var str = input.slice(start, tokPos), val;\n if (isFloat) val = parseFloat(str);\n else if (!octal || str.length === 1) val = parseInt(str, 10);\n else if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n else val = parseInt(str, 8);\n return finishToken(_num, val);\n }\n function readString(quote) {\n tokPos++;\n var out = \"\";\n for(;;){\n if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n var ch = input.charCodeAt(tokPos);\n if (ch === quote) {\n ++tokPos;\n return finishToken(_string, out);\n }\n if (ch === 92) {\n ch = input.charCodeAt(++tokPos);\n var octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n if (octal) octal = octal[0];\n while(octal && parseInt(octal, 8) > 255)octal = octal.slice(0, -1);\n if (octal === \"0\") octal = null;\n ++tokPos;\n if (octal) {\n if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n out += String.fromCharCode(parseInt(octal, 8));\n tokPos += octal.length - 1;\n } else switch(ch){\n case 110:\n out += \"\\n\";\n break;\n case 114:\n out += \"\\r\";\n break;\n case 120:\n out += String.fromCharCode(readHexChar(2));\n break;\n case 117:\n out += String.fromCharCode(readHexChar(4));\n break;\n case 85:\n out += String.fromCharCode(readHexChar(8));\n break;\n case 116:\n out += \"\t\";\n break;\n case 98:\n out += \"\\b\";\n break;\n case 118:\n out += \"\\v\";\n break;\n case 102:\n out += \"\\f\";\n break;\n case 48:\n out += \"\\x00\";\n break;\n case 13:\n if (input.charCodeAt(tokPos) === 10) ++tokPos;\n case 10:\n if (options.locations) {\n tokLineStart = tokPos;\n ++tokCurLine;\n }\n break;\n default:\n out += String.fromCharCode(ch);\n break;\n }\n } else {\n if (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n out += String.fromCharCode(ch);\n ++tokPos;\n }\n }\n }\n function readHexChar(len) {\n var n = readInt(16, len);\n if (n === null) raise(tokStart, \"Bad character escape sequence\");\n return n;\n }\n var containsEsc;\n function readWord1() {\n containsEsc = false;\n var word, first = true, start = tokPos;\n for(;;){\n var ch = input.charCodeAt(tokPos);\n if (isIdentifierChar(ch)) {\n if (containsEsc) word += input.charAt(tokPos);\n ++tokPos;\n } else if (ch === 92) {\n if (!containsEsc) word = input.slice(start, tokPos);\n containsEsc = true;\n if (input.charCodeAt(++tokPos) != 117) raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n ++tokPos;\n var esc = readHexChar(4);\n var escStr = String.fromCharCode(esc);\n if (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n if (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc))) raise(tokPos - 4, \"Invalid Unicode escape\");\n word += escStr;\n } else break;\n first = false;\n }\n return containsEsc ? word : input.slice(start, tokPos);\n }\n function readWord() {\n var word = readWord1();\n var type = _name;\n if (!containsEsc && isKeyword(word)) type = keywordTypes[word];\n return finishToken(type, word);\n }\n function next() {\n lastStart = tokStart;\n lastEnd = tokEnd;\n lastEndLoc = tokEndLoc;\n readToken();\n }\n function setStrict(strct) {\n strict = strct;\n tokPos = tokStart;\n if (options.locations) while(tokPos < tokLineStart){\n tokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n --tokCurLine;\n }\n skipSpace();\n readToken();\n }\n function node_t() {\n this.type = null;\n this.start = tokStart;\n this.end = null;\n }\n function node_loc_t() {\n this.start = tokStartLoc;\n this.end = null;\n if (sourceFile !== null) this.source = sourceFile;\n }\n function startNode() {\n var node = new node_t();\n if (options.locations) node.loc = new node_loc_t();\n if (options.directSourceFile) node.sourceFile = options.directSourceFile;\n if (options.ranges) node.range = [\n tokStart,\n 0\n ];\n return node;\n }\n function startNodeFrom(other) {\n var node = new node_t();\n node.start = other.start;\n if (options.locations) {\n node.loc = new node_loc_t();\n node.loc.start = other.loc.start;\n }\n if (options.ranges) node.range = [\n other.range[0],\n 0\n ];\n return node;\n }\n function finishNode(node, type) {\n node.type = type;\n node.end = lastEnd;\n if (options.locations) node.loc.end = lastEndLoc;\n if (options.ranges) node.range[1] = lastEnd;\n return node;\n }\n function isUseStrict(stmt) {\n return options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n function eat(type) {\n if (tokType === type) {\n next();\n return true;\n }\n }\n function canInsertSemicolon() {\n return !options.strictSemicolons && (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n function semicolon() {\n if (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n function expect(type) {\n if (tokType === type) next();\n else unexpected();\n }\n function unexpected() {\n raise(tokStart, \"Unexpected token\");\n }\n function checkLVal(expr) {\n if (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\") raise(expr.start, \"Assigning to rvalue\");\n if (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name)) raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n function parseTopLevel(program) {\n lastStart = lastEnd = tokPos;\n if (options.locations) lastEndLoc = new line_loc_t;\n inFunction = strict = null;\n labels = [];\n readToken();\n var node = program || startNode(), first = true;\n if (!program) node.body = [];\n while(tokType !== _eof){\n var stmt = parseStatement();\n node.body.push(stmt);\n if (first && isUseStrict(stmt)) setStrict(true);\n first = false;\n }\n return finishNode(node, \"Program\");\n }\n var loopLabel = {\n kind: \"loop\"\n }, switchLabel = {\n kind: \"switch\"\n };\n function parseStatement() {\n if (tokType === _slash || tokType === _assign && tokVal == \"/=\") readToken(true);\n var starttype = tokType, node = startNode();\n switch(starttype){\n case _break:\n case _continue:\n next();\n var isBreak = starttype === _break;\n if (eat(_semi) || canInsertSemicolon()) node.label = null;\n else if (tokType !== _name) unexpected();\n else {\n node.label = parseIdent();\n semicolon();\n }\n for(var i = 0; i < labels.length; ++i){\n var lab = labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n case _debugger:\n next();\n semicolon();\n return finishNode(node, \"DebuggerStatement\");\n case _do:\n next();\n labels.push(loopLabel);\n node.body = parseStatement();\n labels.pop();\n expect(_while);\n node.test = parseParenExpression();\n semicolon();\n return finishNode(node, \"DoWhileStatement\");\n case _for:\n next();\n labels.push(loopLabel);\n expect(_parenL);\n if (tokType === _semi) return parseFor(node, null);\n if (tokType === _var) {\n var init = startNode();\n next();\n parseVar(init, true);\n finishNode(init, \"VariableDeclaration\");\n if (init.declarations.length === 1 && eat(_in)) return parseForIn(node, init);\n return parseFor(node, init);\n }\n var init = parseExpression(false, true);\n if (eat(_in)) {\n checkLVal(init);\n return parseForIn(node, init);\n }\n return parseFor(node, init);\n case _function:\n next();\n return parseFunction(node, true);\n case _if:\n next();\n node.test = parseParenExpression();\n node.consequent = parseStatement();\n node.alternate = eat(_else) ? parseStatement() : null;\n return finishNode(node, \"IfStatement\");\n case _return:\n if (!inFunction && !options.allowReturnOutsideFunction) raise(tokStart, \"'return' outside of function\");\n next();\n if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n else {\n node.argument = parseExpression();\n semicolon();\n }\n return finishNode(node, \"ReturnStatement\");\n case _switch:\n next();\n node.discriminant = parseParenExpression();\n node.cases = [];\n expect(_braceL);\n labels.push(switchLabel);\n for(var cur, sawDefault; tokType != _braceR;)if (tokType === _case || tokType === _default) {\n var isCase = tokType === _case;\n if (cur) finishNode(cur, \"SwitchCase\");\n node.cases.push(cur = startNode());\n cur.consequent = [];\n next();\n if (isCase) cur.test = parseExpression();\n else {\n if (sawDefault) raise(lastStart, \"Multiple default clauses\");\n sawDefault = true;\n cur.test = null;\n }\n expect(_colon);\n } else {\n if (!cur) unexpected();\n cur.consequent.push(parseStatement());\n }\n if (cur) finishNode(cur, \"SwitchCase\");\n next();\n labels.pop();\n return finishNode(node, \"SwitchStatement\");\n case _throw:\n next();\n if (newline.test(input.slice(lastEnd, tokStart))) raise(lastEnd, \"Illegal newline after throw\");\n node.argument = parseExpression();\n semicolon();\n return finishNode(node, \"ThrowStatement\");\n case _try:\n next();\n node.block = parseBlock();\n node.handler = null;\n if (tokType === _catch) {\n var clause = startNode();\n next();\n expect(_parenL);\n clause.param = parseIdent();\n if (strict && isStrictBadIdWord(clause.param.name)) raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n expect(_parenR);\n clause.guard = null;\n clause.body = parseBlock();\n node.handler = finishNode(clause, \"CatchClause\");\n }\n node.guardedHandlers = empty;\n node.finalizer = eat(_finally) ? parseBlock() : null;\n if (!node.handler && !node.finalizer) raise(node.start, \"Missing catch or finally clause\");\n return finishNode(node, \"TryStatement\");\n case _var:\n next();\n parseVar(node);\n semicolon();\n return finishNode(node, \"VariableDeclaration\");\n case _while:\n next();\n node.test = parseParenExpression();\n labels.push(loopLabel);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"WhileStatement\");\n case _with:\n if (strict) raise(tokStart, \"'with' in strict mode\");\n next();\n node.object = parseParenExpression();\n node.body = parseStatement();\n return finishNode(node, \"WithStatement\");\n case _braceL:\n return parseBlock();\n case _semi:\n next();\n return finishNode(node, \"EmptyStatement\");\n default:\n var maybeName = tokVal, expr = parseExpression();\n if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n for(var i = 0; i < labels.length; ++i)if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n var kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n labels.push({\n name: maybeName,\n kind: kind\n });\n node.body = parseStatement();\n labels.pop();\n node.label = expr;\n return finishNode(node, \"LabeledStatement\");\n } else {\n node.expression = expr;\n semicolon();\n return finishNode(node, \"ExpressionStatement\");\n }\n }\n }\n function parseParenExpression() {\n expect(_parenL);\n var val = parseExpression();\n expect(_parenR);\n return val;\n }\n function parseBlock(allowStrict) {\n var node = startNode(), first = true, strict = false, oldStrict;\n node.body = [];\n expect(_braceL);\n while(!eat(_braceR)){\n var stmt = parseStatement();\n node.body.push(stmt);\n if (first && allowStrict && isUseStrict(stmt)) {\n oldStrict = strict;\n setStrict(strict = true);\n }\n first = false;\n }\n if (strict && !oldStrict) setStrict(false);\n return finishNode(node, \"BlockStatement\");\n }\n function parseFor(node, init) {\n node.init = init;\n expect(_semi);\n node.test = tokType === _semi ? null : parseExpression();\n expect(_semi);\n node.update = tokType === _parenR ? null : parseExpression();\n expect(_parenR);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"ForStatement\");\n }\n function parseForIn(node, init) {\n node.left = init;\n node.right = parseExpression();\n expect(_parenR);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"ForInStatement\");\n }\n function parseVar(node, noIn) {\n node.declarations = [];\n node.kind = \"var\";\n for(;;){\n var decl = startNode();\n decl.id = parseIdent();\n if (strict && isStrictBadIdWord(decl.id.name)) raise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n if (!eat(_comma)) break;\n }\n return node;\n }\n function parseExpression(noComma, noIn) {\n var expr = parseMaybeAssign(noIn);\n if (!noComma && tokType === _comma) {\n var node = startNodeFrom(expr);\n node.expressions = [\n expr\n ];\n while(eat(_comma))node.expressions.push(parseMaybeAssign(noIn));\n return finishNode(node, \"SequenceExpression\");\n }\n return expr;\n }\n function parseMaybeAssign(noIn) {\n var left = parseMaybeConditional(noIn);\n if (tokType.isAssign) {\n var node = startNodeFrom(left);\n node.operator = tokVal;\n node.left = left;\n next();\n node.right = parseMaybeAssign(noIn);\n checkLVal(left);\n return finishNode(node, \"AssignmentExpression\");\n }\n return left;\n }\n function parseMaybeConditional(noIn) {\n var expr = parseExprOps(noIn);\n if (eat(_question)) {\n var node = startNodeFrom(expr);\n node.test = expr;\n node.consequent = parseExpression(true);\n expect(_colon);\n node.alternate = parseExpression(true, noIn);\n return finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n }\n function parseExprOps(noIn) {\n return parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n function parseExprOp(left, minPrec, noIn) {\n var prec = tokType.binop;\n if (prec != null && (!noIn || tokType !== _in)) {\n if (prec > minPrec) {\n var node = startNodeFrom(left);\n node.left = left;\n node.operator = tokVal;\n var op = tokType;\n next();\n node.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n var exprNode = finishNode(node, op === _logicalOR || op === _logicalAND ? \"LogicalExpression\" : \"BinaryExpression\");\n return parseExprOp(exprNode, minPrec, noIn);\n }\n }\n return left;\n }\n function parseMaybeUnary() {\n if (tokType.prefix) {\n var node = startNode(), update = tokType.isUpdate;\n node.operator = tokVal;\n node.prefix = true;\n tokRegexpAllowed = true;\n next();\n node.argument = parseMaybeUnary();\n if (update) checkLVal(node.argument);\n else if (strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") raise(node.start, \"Deleting local variable in strict mode\");\n return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n }\n var expr = parseExprSubscripts();\n while(tokType.postfix && !canInsertSemicolon()){\n var node = startNodeFrom(expr);\n node.operator = tokVal;\n node.prefix = false;\n node.argument = expr;\n checkLVal(expr);\n next();\n expr = finishNode(node, \"UpdateExpression\");\n }\n return expr;\n }\n function parseExprSubscripts() {\n return parseSubscripts(parseExprAtom());\n }\n function parseSubscripts(base, noCalls) {\n if (eat(_dot)) {\n var node = startNodeFrom(base);\n node.object = base;\n node.property = parseIdent(true);\n node.computed = false;\n return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n } else if (eat(_bracketL)) {\n var node = startNodeFrom(base);\n node.object = base;\n node.property = parseExpression();\n node.computed = true;\n expect(_bracketR);\n return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n } else if (!noCalls && eat(_parenL)) {\n var node = startNodeFrom(base);\n node.callee = base;\n node.arguments = parseExprList(_parenR, false);\n return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n } else return base;\n }\n function parseExprAtom() {\n switch(tokType){\n case _this:\n var node = startNode();\n next();\n return finishNode(node, \"ThisExpression\");\n case _name:\n return parseIdent();\n case _num:\n case _string:\n case _regexp:\n var node = startNode();\n node.value = tokVal;\n node.raw = input.slice(tokStart, tokEnd);\n next();\n return finishNode(node, \"Literal\");\n case _null:\n case _true:\n case _false:\n var node = startNode();\n node.value = tokType.atomValue;\n node.raw = tokType.keyword;\n next();\n return finishNode(node, \"Literal\");\n case _parenL:\n var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n next();\n var val = parseExpression();\n val.start = tokStart1;\n val.end = tokEnd;\n if (options.locations) {\n val.loc.start = tokStartLoc1;\n val.loc.end = tokEndLoc;\n }\n if (options.ranges) val.range = [\n tokStart1,\n tokEnd\n ];\n expect(_parenR);\n return val;\n case _bracketL:\n var node = startNode();\n next();\n node.elements = parseExprList(_bracketR, true, true);\n return finishNode(node, \"ArrayExpression\");\n case _braceL:\n return parseObj();\n case _function:\n var node = startNode();\n next();\n return parseFunction(node, false);\n case _new:\n return parseNew();\n default:\n unexpected();\n }\n }\n function parseNew() {\n var node = startNode();\n next();\n node.callee = parseSubscripts(parseExprAtom(), true);\n if (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n else node.arguments = empty;\n return finishNode(node, \"NewExpression\");\n }\n function parseObj() {\n var node = startNode(), first = true, sawGetSet = false;\n node.properties = [];\n next();\n while(!eat(_braceR)){\n if (!first) {\n expect(_comma);\n if (options.allowTrailingCommas && eat(_braceR)) break;\n } else first = false;\n var prop = {\n key: parsePropertyName()\n }, isGetSet = false, kind;\n if (eat(_colon)) {\n prop.value = parseExpression(true);\n kind = prop.kind = \"init\";\n } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n isGetSet = sawGetSet = true;\n kind = prop.kind = prop.key.name;\n prop.key = parsePropertyName();\n if (tokType !== _parenL) unexpected();\n prop.value = parseFunction(startNode(), false);\n } else unexpected();\n if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) for(var i = 0; i < node.properties.length; ++i){\n var other = node.properties[i];\n if (other.key.name === prop.key.name) {\n var conflict = kind == other.kind || isGetSet && other.kind === \"init\" || kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n if (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n if (conflict) raise(prop.key.start, \"Redefinition of property\");\n }\n }\n node.properties.push(prop);\n }\n return finishNode(node, \"ObjectExpression\");\n }\n function parsePropertyName() {\n if (tokType === _num || tokType === _string) return parseExprAtom();\n return parseIdent(true);\n }\n function parseFunction(node, isStatement) {\n if (tokType === _name) node.id = parseIdent();\n else if (isStatement) unexpected();\n else node.id = null;\n node.params = [];\n var first = true;\n expect(_parenL);\n while(!eat(_parenR)){\n if (!first) expect(_comma);\n else first = false;\n node.params.push(parseIdent());\n }\n var oldInFunc = inFunction, oldLabels = labels;\n inFunction = true;\n labels = [];\n node.body = parseBlock(true);\n inFunction = oldInFunc;\n labels = oldLabels;\n if (strict || node.body.body.length && isUseStrict(node.body.body[0])) for(var i = node.id ? -1 : 0; i < node.params.length; ++i){\n var id = i < 0 ? node.id : node.params[i];\n if (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name)) raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n if (i >= 0) {\n for(var j = 0; j < i; ++j)if (id.name === node.params[j].name) raise(id.start, \"Argument name clash in strict mode\");\n }\n }\n return finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n var elts = [], first = true;\n while(!eat(close)){\n if (!first) {\n expect(_comma);\n if (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n } else first = false;\n if (allowEmpty && tokType === _comma) elts.push(null);\n else elts.push(parseExpression(true));\n }\n return elts;\n }\n function parseIdent(liberal) {\n var node = startNode();\n if (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n if (tokType === _name) {\n if (!liberal && (options.forbidReserved && (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) || strict && isStrictReservedWord(tokVal)) && input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1) raise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n node.name = tokVal;\n } else if (liberal && tokType.keyword) node.name = tokType.keyword;\n else unexpected();\n tokRegexpAllowed = false;\n next();\n return finishNode(node, \"Identifier\");\n }\n });\n if (!acorn.version) acorn = null;\n }\n function parse(code, options) {\n return (global.acorn || acorn).parse(code, options);\n }\n var binaryOperators = {\n \"+\": \"__add\",\n \"-\": \"__subtract\",\n \"*\": \"__multiply\",\n \"/\": \"__divide\",\n \"%\": \"__modulo\",\n \"==\": \"__equals\",\n \"!=\": \"__equals\"\n };\n var unaryOperators = {\n \"-\": \"__negate\",\n \"+\": \"__self\"\n };\n var fields = Base.each([\n \"add\",\n \"subtract\",\n \"multiply\",\n \"divide\",\n \"modulo\",\n \"equals\",\n \"negate\"\n ], function(name) {\n this[\"__\" + name] = \"#\" + name;\n }, {\n __self: function() {\n return this;\n }\n });\n Point.inject(fields);\n Size.inject(fields);\n Color.inject(fields);\n function __$__(left, operator, right) {\n var handler = binaryOperators[operator];\n if (left && left[handler]) {\n var res = left[handler](right);\n return operator === \"!=\" ? !res : res;\n }\n switch(operator){\n case \"+\":\n return left + right;\n case \"-\":\n return left - right;\n case \"*\":\n return left * right;\n case \"/\":\n return left / right;\n case \"%\":\n return left % right;\n case \"==\":\n return left == right;\n case \"!=\":\n return left != right;\n }\n }\n function $__(operator, value) {\n var handler = unaryOperators[operator];\n if (value && value[handler]) return value[handler]();\n switch(operator){\n case \"+\":\n return +value;\n case \"-\":\n return -value;\n }\n }\n function compile(code, options) {\n if (!code) return \"\";\n options = options || {};\n var insertions = [];\n function getOffset(offset) {\n for(var i = 0, l = insertions.length; i < l; i++){\n var insertion = insertions[i];\n if (insertion[0] >= offset) break;\n offset += insertion[1];\n }\n return offset;\n }\n function getCode(node) {\n return code.substring(getOffset(node.range[0]), getOffset(node.range[1]));\n }\n function getBetween(left, right) {\n return code.substring(getOffset(left.range[1]), getOffset(right.range[0]));\n }\n function replaceCode(node, str) {\n var start = getOffset(node.range[0]), end = getOffset(node.range[1]), insert = 0;\n for(var i = insertions.length - 1; i >= 0; i--)if (start > insertions[i][0]) {\n insert = i + 1;\n break;\n }\n insertions.splice(insert, 0, [\n start,\n str.length - end + start\n ]);\n code = code.substring(0, start) + str + code.substring(end);\n }\n function handleOverloading(node, parent) {\n switch(node.type){\n case \"UnaryExpression\":\n if (node.operator in unaryOperators && node.argument.type !== \"Literal\") {\n var arg = getCode(node.argument);\n replaceCode(node, '$__(\"' + node.operator + '\", ' + arg + \")\");\n }\n break;\n case \"BinaryExpression\":\n if (node.operator in binaryOperators && node.left.type !== \"Literal\") {\n var left = getCode(node.left), right = getCode(node.right), between = getBetween(node.left, node.right), operator = node.operator;\n replaceCode(node, \"__$__(\" + left + \",\" + between.replace(new RegExp(\"\\\\\" + operator), '\"' + operator + '\"') + \", \" + right + \")\");\n }\n break;\n case \"UpdateExpression\":\n case \"AssignmentExpression\":\n var parentType = parent && parent.type;\n if (!(parentType === \"ForStatement\" || parentType === \"BinaryExpression\" && /^[=!<>]/.test(parent.operator) || parentType === \"MemberExpression\" && parent.computed)) {\n if (node.type === \"UpdateExpression\") {\n var arg = getCode(node.argument), exp = \"__$__(\" + arg + ', \"' + node.operator[0] + '\", 1)', str = arg + \" = \" + exp;\n if (node.prefix) str = \"(\" + str + \")\";\n else if (parentType === \"AssignmentExpression\" || parentType === \"VariableDeclarator\" || parentType === \"BinaryExpression\") {\n if (getCode(parent.left || parent.id) === arg) str = exp;\n str = arg + \"; \" + str;\n }\n replaceCode(node, str);\n } else if (/^.=$/.test(node.operator) && node.left.type !== \"Literal\") {\n var left = getCode(node.left), right = getCode(node.right), exp = left + \" = __$__(\" + left + ', \"' + node.operator[0] + '\", ' + right + \")\";\n replaceCode(node, /^\\(.*\\)$/.test(getCode(node)) ? \"(\" + exp + \")\" : exp);\n }\n }\n break;\n }\n }\n function handleExports(node) {\n switch(node.type){\n case \"ExportDefaultDeclaration\":\n replaceCode({\n range: [\n node.start,\n node.declaration.start\n ]\n }, \"module.exports = \");\n break;\n case \"ExportNamedDeclaration\":\n var declaration = node.declaration;\n var specifiers = node.specifiers;\n if (declaration) {\n var declarations = declaration.declarations;\n if (declarations) {\n declarations.forEach(function(dec) {\n replaceCode(dec, \"module.exports.\" + getCode(dec));\n });\n replaceCode({\n range: [\n node.start,\n declaration.start + declaration.kind.length\n ]\n }, \"\");\n }\n } else if (specifiers) {\n var exports = specifiers.map(function(specifier) {\n var name = getCode(specifier);\n return \"module.exports.\" + name + \" = \" + name + \"; \";\n }).join(\"\");\n if (exports) replaceCode(node, exports);\n }\n break;\n }\n }\n function walkAST(node, parent, paperFeatures) {\n if (node) {\n for(var key in node)if (key !== \"range\" && key !== \"loc\") {\n var value = node[key];\n if (Array.isArray(value)) for(var i = 0, l = value.length; i < l; i++)walkAST(value[i], node, paperFeatures);\n else if (value && typeof value === \"object\") walkAST(value, node, paperFeatures);\n }\n if (paperFeatures.operatorOverloading !== false) handleOverloading(node, parent);\n if (paperFeatures.moduleExports !== false) handleExports(node);\n }\n }\n function encodeVLQ(value) {\n var res = \"\", base64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n value = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n while(value || !res){\n var next = value & 31;\n value >>= 5;\n if (value) next |= 32;\n res += base64[next];\n }\n return res;\n }\n var url = options.url || \"\", sourceMaps = options.sourceMaps, paperFeatures = options.paperFeatures || {}, source = options.source || code, offset = options.offset || 0, agent = paper.agent, version = agent.versionNumber, offsetCode = false, lineBreaks = /\\r\\n|\\n|\\r/mg, map;\n if (sourceMaps && (agent.chrome && version >= 30 || agent.webkit && version >= 537.76 || agent.firefox && version >= 23 || agent.node)) {\n if (agent.node) offset -= 2;\n else if (window && url && !window.location.href.indexOf(url)) {\n var html = document.getElementsByTagName(\"html\")[0].innerHTML;\n offset = html.substr(0, html.indexOf(code) + 1).match(lineBreaks).length + 1;\n }\n offsetCode = offset > 0 && !(agent.chrome && version >= 36 || agent.safari && version >= 600 || agent.firefox && version >= 40 || agent.node);\n var mappings = [\n \"AA\" + encodeVLQ(offsetCode ? 0 : offset) + \"A\"\n ];\n mappings.length = (code.match(lineBreaks) || []).length + 1 + (offsetCode ? offset : 0);\n map = {\n version: 3,\n file: url,\n names: [],\n mappings: mappings.join(\";AACA\"),\n sourceRoot: \"\",\n sources: [\n url\n ],\n sourcesContent: [\n source\n ]\n };\n }\n if (paperFeatures.operatorOverloading !== false || paperFeatures.moduleExports !== false) walkAST(parse(code, {\n ranges: true,\n preserveParens: true,\n sourceType: \"module\"\n }), null, paperFeatures);\n if (map) {\n if (offsetCode) code = new Array(offset + 1).join(\"\\n\") + code;\n if (/^(inline|both)$/.test(sourceMaps)) code += \"\\n//# sourceMappingURL=data:application/json;base64,\" + self1.btoa(unescape(encodeURIComponent(JSON.stringify(map))));\n code += \"\\n//# sourceURL=\" + (url || \"paperscript\");\n }\n return {\n url: url,\n source: source,\n code: code,\n map: map\n };\n }\n function execute(code, scope, options) {\n paper = scope;\n var view = scope.getView(), tool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/.test(code) && !/\\bnew\\s+Tool\\b/.test(code) ? new Tool() : null, toolHandlers = tool ? tool._events : [], handlers = [\n \"onFrame\",\n \"onResize\"\n ].concat(toolHandlers), params = [], args = [], func, compiled = typeof code === \"object\" ? code : compile(code, options);\n code = compiled.code;\n function expose(scope, hidden) {\n for(var key in scope)if ((hidden || !/^_/.test(key)) && new RegExp(\"([\\\\b\\\\s\\\\W]|^)\" + key.replace(/\\$/g, \"\\\\$\") + \"\\\\b\").test(code)) {\n params.push(key);\n args.push(scope[key]);\n }\n }\n expose({\n __$__: __$__,\n $__: $__,\n paper: scope,\n tool: tool\n }, true);\n expose(scope);\n code = \"var module = { exports: {} }; \" + code;\n var exports = Base.each(handlers, function(key) {\n if (new RegExp(\"\\\\s+\" + key + \"\\\\b\").test(code)) {\n params.push(key);\n this.push(\"module.exports.\" + key + \" = \" + key + \";\");\n }\n }, []).join(\"\\n\");\n if (exports) code += \"\\n\" + exports;\n code += \"\\nreturn module.exports;\";\n var agent = paper.agent;\n if (document && (agent.chrome || agent.firefox && agent.versionNumber < 40)) {\n var script = document.createElement(\"script\"), head = document.head || document.getElementsByTagName(\"head\")[0];\n if (agent.firefox) code = \"\\n\" + code;\n script.appendChild(document.createTextNode(\"document.__paperscript__ = function(\" + params + \") {\" + code + \"\\n}\"));\n head.appendChild(script);\n func = document.__paperscript__;\n delete document.__paperscript__;\n head.removeChild(script);\n } else func = Function(params, code);\n var exports = func && func.apply(scope, args);\n var obj = exports || {};\n Base.each(toolHandlers, function(key) {\n var value = obj[key];\n if (value) tool[key] = value;\n });\n if (view) {\n if (obj.onResize) view.setOnResize(obj.onResize);\n view.emit(\"resize\", {\n size: view.size,\n delta: new Point()\n });\n if (obj.onFrame) view.setOnFrame(obj.onFrame);\n view.requestUpdate();\n }\n return exports;\n }\n function loadScript(script) {\n if (/^text\\/(?:x-|)paperscript$/.test(script.type) && PaperScope.getAttribute(script, \"ignore\") !== \"true\") {\n var canvasId = PaperScope.getAttribute(script, \"canvas\"), canvas = document.getElementById(canvasId), src = script.src || script.getAttribute(\"data-src\"), async = PaperScope.hasAttribute(script, \"async\"), scopeAttribute = \"data-paper-scope\";\n if (!canvas) throw new Error('Unable to find canvas with id \"' + canvasId + '\"');\n var scope = PaperScope.get(canvas.getAttribute(scopeAttribute)) || new PaperScope().setup(canvas);\n canvas.setAttribute(scopeAttribute, scope._id);\n if (src) Http.request({\n url: src,\n async: async,\n mimeType: \"text/plain\",\n onLoad: function(code) {\n execute(code, scope, src);\n }\n });\n else execute(script.innerHTML, scope, script.baseURI);\n script.setAttribute(\"data-paper-ignore\", \"true\");\n return scope;\n }\n }\n function loadAll() {\n Base.each(document && document.getElementsByTagName(\"script\"), loadScript);\n }\n function load(script) {\n return script ? loadScript(script) : loadAll();\n }\n if (window) {\n if (document.readyState === \"complete\") setTimeout(loadAll);\n else DomEvent.add(window, {\n load: loadAll\n });\n }\n return {\n compile: compile,\n execute: execute,\n load: load,\n parse: parse,\n calculateBinary: __$__,\n calculateUnary: $__\n };\n }).call(this);\n var paper = new (PaperScope.inject(Base.exports, {\n Base: Base,\n Numerical: Numerical,\n Key: Key,\n DomEvent: DomEvent,\n DomElement: DomElement,\n document: document,\n window: window,\n Symbol: SymbolDefinition,\n PlacedSymbol: SymbolItem\n }))();\n if (paper.agent.node) (parcelRequire(\"gFNhN\"))(paper);\n if (typeof define === \"function\" && define.amd) define(\"paper\", paper);\n else if (module) module.exports = paper;\n return paper;\n}).call(this, typeof self === \"object\" ? self : null);\n\n});\nparcelRegister(\"gFNhN\", function(module, exports) {\n\"use strict\";\n\n});\n\nparcelRegister(\"7bbl5\", function(module, exports) {\n\n$parcel$export(module.exports, \"isIdentifierStart\", function () { return $f0e98b2c23d58ac9$export$56b48cc5d7560ffb; });\n$parcel$export(module.exports, \"isIdentifierChar\", function () { return $f0e98b2c23d58ac9$export$332f4d7bee38db93; });\n$parcel$export(module.exports, \"TokenType\", function () { return $f0e98b2c23d58ac9$export$f435f793048e7a0f; });\n$parcel$export(module.exports, \"keywordTypes\", function () { return $f0e98b2c23d58ac9$export$d53f8326294b31d8; });\n$parcel$export(module.exports, \"tokTypes\", function () { return $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8; });\n$parcel$export(module.exports, \"lineBreak\", function () { return $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6; });\n$parcel$export(module.exports, \"lineBreakG\", function () { return $f0e98b2c23d58ac9$export$866e20207bbc41f2; });\n$parcel$export(module.exports, \"isNewLine\", function () { return $f0e98b2c23d58ac9$export$2c19a3e3b4008fff; });\n$parcel$export(module.exports, \"nonASCIIwhitespace\", function () { return $f0e98b2c23d58ac9$export$268622f0f1cbc82b; });\n$parcel$export(module.exports, \"Position\", function () { return $f0e98b2c23d58ac9$export$13807d9ee5a34a42; });\n$parcel$export(module.exports, \"SourceLocation\", function () { return $f0e98b2c23d58ac9$export$7387db7caf96fcdb; });\n$parcel$export(module.exports, \"getLineInfo\", function () { return $f0e98b2c23d58ac9$export$7af82191547c5ff7; });\n$parcel$export(module.exports, \"defaultOptions\", function () { return $f0e98b2c23d58ac9$export$ba43bf67f3d48107; });\n$parcel$export(module.exports, \"Parser\", function () { return $f0e98b2c23d58ac9$export$7acfa6ed01010e37; });\n$parcel$export(module.exports, \"TokContext\", function () { return $f0e98b2c23d58ac9$export$68e7b4c4d99215d9; });\n$parcel$export(module.exports, \"tokContexts\", function () { return $f0e98b2c23d58ac9$export$2b5f701edfbd6f00; });\n$parcel$export(module.exports, \"Node\", function () { return $f0e98b2c23d58ac9$export$85c928794f8d04d4; });\n$parcel$export(module.exports, \"Token\", function () { return $f0e98b2c23d58ac9$export$50792b0e93539fde; });\n$parcel$export(module.exports, \"version\", function () { return $f0e98b2c23d58ac9$export$83d89fbfd8236492; });\n$parcel$export(module.exports, \"parse\", function () { return $f0e98b2c23d58ac9$export$98e6a39c04603d36; });\n$parcel$export(module.exports, \"parseExpressionAt\", function () { return $f0e98b2c23d58ac9$export$61f24eb03dd7ce92; });\n$parcel$export(module.exports, \"tokenizer\", function () { return $f0e98b2c23d58ac9$export$5f8c09e3ae6f64e1; });\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$astralIdentifierCodes = [\n 509,\n 0,\n 227,\n 0,\n 150,\n 4,\n 294,\n 9,\n 1368,\n 2,\n 2,\n 1,\n 6,\n 3,\n 41,\n 2,\n 5,\n 0,\n 166,\n 1,\n 574,\n 3,\n 9,\n 9,\n 370,\n 1,\n 81,\n 2,\n 71,\n 10,\n 50,\n 3,\n 123,\n 2,\n 54,\n 14,\n 32,\n 10,\n 3,\n 1,\n 11,\n 3,\n 46,\n 10,\n 8,\n 0,\n 46,\n 9,\n 7,\n 2,\n 37,\n 13,\n 2,\n 9,\n 6,\n 1,\n 45,\n 0,\n 13,\n 2,\n 49,\n 13,\n 9,\n 3,\n 2,\n 11,\n 83,\n 11,\n 7,\n 0,\n 3,\n 0,\n 158,\n 11,\n 6,\n 9,\n 7,\n 3,\n 56,\n 1,\n 2,\n 6,\n 3,\n 1,\n 3,\n 2,\n 10,\n 0,\n 11,\n 1,\n 3,\n 6,\n 4,\n 4,\n 193,\n 17,\n 10,\n 9,\n 5,\n 0,\n 82,\n 19,\n 13,\n 9,\n 214,\n 6,\n 3,\n 8,\n 28,\n 1,\n 83,\n 16,\n 16,\n 9,\n 82,\n 12,\n 9,\n 9,\n 84,\n 14,\n 5,\n 9,\n 243,\n 14,\n 166,\n 9,\n 71,\n 5,\n 2,\n 1,\n 3,\n 3,\n 2,\n 0,\n 2,\n 1,\n 13,\n 9,\n 120,\n 6,\n 3,\n 6,\n 4,\n 0,\n 29,\n 9,\n 41,\n 6,\n 2,\n 3,\n 9,\n 0,\n 10,\n 10,\n 47,\n 15,\n 406,\n 7,\n 2,\n 7,\n 17,\n 9,\n 57,\n 21,\n 2,\n 13,\n 123,\n 5,\n 4,\n 0,\n 2,\n 1,\n 2,\n 6,\n 2,\n 0,\n 9,\n 9,\n 49,\n 4,\n 2,\n 1,\n 2,\n 4,\n 9,\n 9,\n 330,\n 3,\n 10,\n 1,\n 2,\n 0,\n 49,\n 6,\n 4,\n 4,\n 14,\n 9,\n 5351,\n 0,\n 7,\n 14,\n 13835,\n 9,\n 87,\n 9,\n 39,\n 4,\n 60,\n 6,\n 26,\n 9,\n 1014,\n 0,\n 2,\n 54,\n 8,\n 3,\n 82,\n 0,\n 12,\n 1,\n 19628,\n 1,\n 4706,\n 45,\n 3,\n 22,\n 543,\n 4,\n 4,\n 5,\n 9,\n 7,\n 3,\n 6,\n 31,\n 3,\n 149,\n 2,\n 1418,\n 49,\n 513,\n 54,\n 5,\n 49,\n 9,\n 0,\n 15,\n 0,\n 23,\n 4,\n 2,\n 14,\n 1361,\n 6,\n 2,\n 16,\n 3,\n 6,\n 2,\n 1,\n 2,\n 4,\n 101,\n 0,\n 161,\n 6,\n 10,\n 9,\n 357,\n 0,\n 62,\n 13,\n 499,\n 13,\n 983,\n 6,\n 110,\n 6,\n 6,\n 9,\n 4759,\n 9,\n 787719,\n 239\n];\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$astralIdentifierStartCodes = [\n 0,\n 11,\n 2,\n 25,\n 2,\n 18,\n 2,\n 1,\n 2,\n 14,\n 3,\n 13,\n 35,\n 122,\n 70,\n 52,\n 268,\n 28,\n 4,\n 48,\n 48,\n 31,\n 14,\n 29,\n 6,\n 37,\n 11,\n 29,\n 3,\n 35,\n 5,\n 7,\n 2,\n 4,\n 43,\n 157,\n 19,\n 35,\n 5,\n 35,\n 5,\n 39,\n 9,\n 51,\n 13,\n 10,\n 2,\n 14,\n 2,\n 6,\n 2,\n 1,\n 2,\n 10,\n 2,\n 14,\n 2,\n 6,\n 2,\n 1,\n 68,\n 310,\n 10,\n 21,\n 11,\n 7,\n 25,\n 5,\n 2,\n 41,\n 2,\n 8,\n 70,\n 5,\n 3,\n 0,\n 2,\n 43,\n 2,\n 1,\n 4,\n 0,\n 3,\n 22,\n 11,\n 22,\n 10,\n 30,\n 66,\n 18,\n 2,\n 1,\n 11,\n 21,\n 11,\n 25,\n 71,\n 55,\n 7,\n 1,\n 65,\n 0,\n 16,\n 3,\n 2,\n 2,\n 2,\n 28,\n 43,\n 28,\n 4,\n 28,\n 36,\n 7,\n 2,\n 27,\n 28,\n 53,\n 11,\n 21,\n 11,\n 18,\n 14,\n 17,\n 111,\n 72,\n 56,\n 50,\n 14,\n 50,\n 14,\n 35,\n 349,\n 41,\n 7,\n 1,\n 79,\n 28,\n 11,\n 0,\n 9,\n 21,\n 43,\n 17,\n 47,\n 20,\n 28,\n 22,\n 13,\n 52,\n 58,\n 1,\n 3,\n 0,\n 14,\n 44,\n 33,\n 24,\n 27,\n 35,\n 30,\n 0,\n 3,\n 0,\n 9,\n 34,\n 4,\n 0,\n 13,\n 47,\n 15,\n 3,\n 22,\n 0,\n 2,\n 0,\n 36,\n 17,\n 2,\n 24,\n 20,\n 1,\n 64,\n 6,\n 2,\n 0,\n 2,\n 3,\n 2,\n 14,\n 2,\n 9,\n 8,\n 46,\n 39,\n 7,\n 3,\n 1,\n 3,\n 21,\n 2,\n 6,\n 2,\n 1,\n 2,\n 4,\n 4,\n 0,\n 19,\n 0,\n 13,\n 4,\n 159,\n 52,\n 19,\n 3,\n 21,\n 2,\n 31,\n 47,\n 21,\n 1,\n 2,\n 0,\n 185,\n 46,\n 42,\n 3,\n 37,\n 47,\n 21,\n 0,\n 60,\n 42,\n 14,\n 0,\n 72,\n 26,\n 38,\n 6,\n 186,\n 43,\n 117,\n 63,\n 32,\n 7,\n 3,\n 0,\n 3,\n 7,\n 2,\n 1,\n 2,\n 23,\n 16,\n 0,\n 2,\n 0,\n 95,\n 7,\n 3,\n 38,\n 17,\n 0,\n 2,\n 0,\n 29,\n 0,\n 11,\n 39,\n 8,\n 0,\n 22,\n 0,\n 12,\n 45,\n 20,\n 0,\n 19,\n 72,\n 264,\n 8,\n 2,\n 36,\n 18,\n 0,\n 50,\n 29,\n 113,\n 6,\n 2,\n 1,\n 2,\n 37,\n 22,\n 0,\n 26,\n 5,\n 2,\n 1,\n 2,\n 31,\n 15,\n 0,\n 328,\n 18,\n 16,\n 0,\n 2,\n 12,\n 2,\n 33,\n 125,\n 0,\n 80,\n 921,\n 103,\n 110,\n 18,\n 195,\n 2637,\n 96,\n 16,\n 1071,\n 18,\n 5,\n 4026,\n 582,\n 8634,\n 568,\n 8,\n 30,\n 18,\n 78,\n 18,\n 29,\n 19,\n 47,\n 17,\n 3,\n 32,\n 20,\n 6,\n 18,\n 689,\n 63,\n 129,\n 74,\n 6,\n 0,\n 67,\n 12,\n 65,\n 1,\n 2,\n 0,\n 29,\n 6135,\n 9,\n 1237,\n 43,\n 8,\n 8936,\n 3,\n 2,\n 6,\n 2,\n 1,\n 2,\n 290,\n 16,\n 0,\n 30,\n 2,\n 3,\n 0,\n 15,\n 3,\n 9,\n 395,\n 2309,\n 106,\n 6,\n 12,\n 4,\n 8,\n 8,\n 9,\n 5991,\n 84,\n 2,\n 70,\n 2,\n 1,\n 3,\n 0,\n 3,\n 1,\n 3,\n 3,\n 2,\n 11,\n 2,\n 0,\n 2,\n 6,\n 2,\n 64,\n 2,\n 3,\n 3,\n 7,\n 2,\n 6,\n 2,\n 27,\n 2,\n 3,\n 2,\n 4,\n 2,\n 0,\n 4,\n 6,\n 2,\n 339,\n 3,\n 24,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 7,\n 1845,\n 30,\n 7,\n 5,\n 262,\n 61,\n 147,\n 44,\n 11,\n 6,\n 17,\n 0,\n 322,\n 29,\n 19,\n 43,\n 485,\n 27,\n 757,\n 6,\n 2,\n 3,\n 2,\n 1,\n 2,\n 14,\n 2,\n 196,\n 60,\n 67,\n 8,\n 0,\n 1205,\n 3,\n 2,\n 26,\n 2,\n 1,\n 2,\n 0,\n 3,\n 0,\n 2,\n 9,\n 2,\n 3,\n 2,\n 0,\n 2,\n 0,\n 7,\n 0,\n 5,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 2,\n 2,\n 1,\n 2,\n 0,\n 3,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 1,\n 2,\n 0,\n 3,\n 3,\n 2,\n 6,\n 2,\n 3,\n 2,\n 3,\n 2,\n 0,\n 2,\n 9,\n 2,\n 16,\n 6,\n 2,\n 2,\n 4,\n 2,\n 16,\n 4421,\n 42719,\n 33,\n 4153,\n 7,\n 221,\n 3,\n 5761,\n 15,\n 7472,\n 3104,\n 541,\n 1507,\n 4938,\n 6,\n 4191\n];\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifierChars = \"\\u200C\\u200D\\xb7\\u0300-\\u036F\\u0387\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u0669\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u06F0-\\u06F9\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07C0-\\u07C9\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09E6-\\u09EF\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AE6-\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CE6-\\u0CEF\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D66-\\u0D6F\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0E50-\\u0E59\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1040-\\u1049\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u180F-\\u1819\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u194F\\u19D0-\\u19DA\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1C40-\\u1C49\\u1C50-\\u1C59\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA620-\\uA629\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F1\\uA8FF-\\uA909\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9D0-\\uA9D9\\uA9E5\\uA9F0-\\uA9F9\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA50-\\uAA59\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n// Reserved word lists for various dialects of the language\nvar $f0e98b2c23d58ac9$var$reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n// And the keywords\nvar $f0e98b2c23d58ac9$var$ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\nvar $f0e98b2c23d58ac9$var$keywords$1 = {\n 5: $f0e98b2c23d58ac9$var$ecma5AndLessKeywords,\n \"5module\": $f0e98b2c23d58ac9$var$ecma5AndLessKeywords + \" export import\",\n 6: $f0e98b2c23d58ac9$var$ecma5AndLessKeywords + \" const class extends export import super\"\n};\nvar $f0e98b2c23d58ac9$var$keywordRelationalOperator = /^in(stanceof)?$/;\n// ## Character categories\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifierStart = new RegExp(\"[\" + $f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars + \"]\");\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifier = new RegExp(\"[\" + $f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars + $f0e98b2c23d58ac9$var$nonASCIIidentifierChars + \"]\");\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction $f0e98b2c23d58ac9$var$isInAstralSet(code, set) {\n var pos = 0x10000;\n for(var i = 0; i < set.length; i += 2){\n pos += set[i];\n if (pos > code) return false;\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n// Test whether a given character code starts an identifier.\nfunction $f0e98b2c23d58ac9$export$56b48cc5d7560ffb(code, astral) {\n if (code < 65) return code === 36;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code <= 0xffff) return code >= 0xaa && $f0e98b2c23d58ac9$var$nonASCIIidentifierStart.test(String.fromCharCode(code));\n if (astral === false) return false;\n return $f0e98b2c23d58ac9$var$isInAstralSet(code, $f0e98b2c23d58ac9$var$astralIdentifierStartCodes);\n}\n// Test whether a given character is part of an identifier.\nfunction $f0e98b2c23d58ac9$export$332f4d7bee38db93(code, astral) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code <= 0xffff) return code >= 0xaa && $f0e98b2c23d58ac9$var$nonASCIIidentifier.test(String.fromCharCode(code));\n if (astral === false) return false;\n return $f0e98b2c23d58ac9$var$isInAstralSet(code, $f0e98b2c23d58ac9$var$astralIdentifierStartCodes) || $f0e98b2c23d58ac9$var$isInAstralSet(code, $f0e98b2c23d58ac9$var$astralIdentifierCodes);\n}\n// ## Token types\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\nvar $f0e98b2c23d58ac9$export$f435f793048e7a0f = function TokenType(label, conf) {\n if (conf === void 0) conf = {};\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\nfunction $f0e98b2c23d58ac9$var$binop(name, prec) {\n return new $f0e98b2c23d58ac9$export$f435f793048e7a0f(name, {\n beforeExpr: true,\n binop: prec\n });\n}\nvar $f0e98b2c23d58ac9$var$beforeExpr = {\n beforeExpr: true\n}, $f0e98b2c23d58ac9$var$startsExpr = {\n startsExpr: true\n};\n// Map keyword names to token types.\nvar $f0e98b2c23d58ac9$export$d53f8326294b31d8 = {};\n// Succinct definitions of keyword token types\nfunction $f0e98b2c23d58ac9$var$kw(name, options) {\n if (options === void 0) options = {};\n options.keyword = name;\n return $f0e98b2c23d58ac9$export$d53f8326294b31d8[name] = new $f0e98b2c23d58ac9$export$f435f793048e7a0f(name, options);\n}\nvar $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8 = {\n num: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"num\", $f0e98b2c23d58ac9$var$startsExpr),\n regexp: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"regexp\", $f0e98b2c23d58ac9$var$startsExpr),\n string: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"string\", $f0e98b2c23d58ac9$var$startsExpr),\n name: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"name\", $f0e98b2c23d58ac9$var$startsExpr),\n privateId: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"privateId\", $f0e98b2c23d58ac9$var$startsExpr),\n eof: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"eof\"),\n // Punctuation token types.\n bracketL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"[\", {\n beforeExpr: true,\n startsExpr: true\n }),\n bracketR: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"]\"),\n braceL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"{\", {\n beforeExpr: true,\n startsExpr: true\n }),\n braceR: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"}\"),\n parenL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"(\", {\n beforeExpr: true,\n startsExpr: true\n }),\n parenR: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\")\"),\n comma: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\",\", $f0e98b2c23d58ac9$var$beforeExpr),\n semi: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\";\", $f0e98b2c23d58ac9$var$beforeExpr),\n colon: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\":\", $f0e98b2c23d58ac9$var$beforeExpr),\n dot: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\".\"),\n question: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"?\", $f0e98b2c23d58ac9$var$beforeExpr),\n questionDot: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"?.\"),\n arrow: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"=>\", $f0e98b2c23d58ac9$var$beforeExpr),\n template: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"template\"),\n invalidTemplate: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"invalidTemplate\"),\n ellipsis: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"...\", $f0e98b2c23d58ac9$var$beforeExpr),\n backQuote: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"`\", $f0e98b2c23d58ac9$var$startsExpr),\n dollarBraceL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"${\", {\n beforeExpr: true,\n startsExpr: true\n }),\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n eq: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"=\", {\n beforeExpr: true,\n isAssign: true\n }),\n assign: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"_=\", {\n beforeExpr: true,\n isAssign: true\n }),\n incDec: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"++/--\", {\n prefix: true,\n postfix: true,\n startsExpr: true\n }),\n prefix: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"!/~\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n logicalOR: $f0e98b2c23d58ac9$var$binop(\"||\", 1),\n logicalAND: $f0e98b2c23d58ac9$var$binop(\"&&\", 2),\n bitwiseOR: $f0e98b2c23d58ac9$var$binop(\"|\", 3),\n bitwiseXOR: $f0e98b2c23d58ac9$var$binop(\"^\", 4),\n bitwiseAND: $f0e98b2c23d58ac9$var$binop(\"&\", 5),\n equality: $f0e98b2c23d58ac9$var$binop(\"==/!=/===/!==\", 6),\n relational: $f0e98b2c23d58ac9$var$binop(\"/<=/>=\", 7),\n bitShift: $f0e98b2c23d58ac9$var$binop(\"<>/>>>\", 8),\n plusMin: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"+/-\", {\n beforeExpr: true,\n binop: 9,\n prefix: true,\n startsExpr: true\n }),\n modulo: $f0e98b2c23d58ac9$var$binop(\"%\", 10),\n star: $f0e98b2c23d58ac9$var$binop(\"*\", 10),\n slash: $f0e98b2c23d58ac9$var$binop(\"/\", 10),\n starstar: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"**\", {\n beforeExpr: true\n }),\n coalesce: $f0e98b2c23d58ac9$var$binop(\"??\", 1),\n // Keyword token types.\n _break: $f0e98b2c23d58ac9$var$kw(\"break\"),\n _case: $f0e98b2c23d58ac9$var$kw(\"case\", $f0e98b2c23d58ac9$var$beforeExpr),\n _catch: $f0e98b2c23d58ac9$var$kw(\"catch\"),\n _continue: $f0e98b2c23d58ac9$var$kw(\"continue\"),\n _debugger: $f0e98b2c23d58ac9$var$kw(\"debugger\"),\n _default: $f0e98b2c23d58ac9$var$kw(\"default\", $f0e98b2c23d58ac9$var$beforeExpr),\n _do: $f0e98b2c23d58ac9$var$kw(\"do\", {\n isLoop: true,\n beforeExpr: true\n }),\n _else: $f0e98b2c23d58ac9$var$kw(\"else\", $f0e98b2c23d58ac9$var$beforeExpr),\n _finally: $f0e98b2c23d58ac9$var$kw(\"finally\"),\n _for: $f0e98b2c23d58ac9$var$kw(\"for\", {\n isLoop: true\n }),\n _function: $f0e98b2c23d58ac9$var$kw(\"function\", $f0e98b2c23d58ac9$var$startsExpr),\n _if: $f0e98b2c23d58ac9$var$kw(\"if\"),\n _return: $f0e98b2c23d58ac9$var$kw(\"return\", $f0e98b2c23d58ac9$var$beforeExpr),\n _switch: $f0e98b2c23d58ac9$var$kw(\"switch\"),\n _throw: $f0e98b2c23d58ac9$var$kw(\"throw\", $f0e98b2c23d58ac9$var$beforeExpr),\n _try: $f0e98b2c23d58ac9$var$kw(\"try\"),\n _var: $f0e98b2c23d58ac9$var$kw(\"var\"),\n _const: $f0e98b2c23d58ac9$var$kw(\"const\"),\n _while: $f0e98b2c23d58ac9$var$kw(\"while\", {\n isLoop: true\n }),\n _with: $f0e98b2c23d58ac9$var$kw(\"with\"),\n _new: $f0e98b2c23d58ac9$var$kw(\"new\", {\n beforeExpr: true,\n startsExpr: true\n }),\n _this: $f0e98b2c23d58ac9$var$kw(\"this\", $f0e98b2c23d58ac9$var$startsExpr),\n _super: $f0e98b2c23d58ac9$var$kw(\"super\", $f0e98b2c23d58ac9$var$startsExpr),\n _class: $f0e98b2c23d58ac9$var$kw(\"class\", $f0e98b2c23d58ac9$var$startsExpr),\n _extends: $f0e98b2c23d58ac9$var$kw(\"extends\", $f0e98b2c23d58ac9$var$beforeExpr),\n _export: $f0e98b2c23d58ac9$var$kw(\"export\"),\n _import: $f0e98b2c23d58ac9$var$kw(\"import\", $f0e98b2c23d58ac9$var$startsExpr),\n _null: $f0e98b2c23d58ac9$var$kw(\"null\", $f0e98b2c23d58ac9$var$startsExpr),\n _true: $f0e98b2c23d58ac9$var$kw(\"true\", $f0e98b2c23d58ac9$var$startsExpr),\n _false: $f0e98b2c23d58ac9$var$kw(\"false\", $f0e98b2c23d58ac9$var$startsExpr),\n _in: $f0e98b2c23d58ac9$var$kw(\"in\", {\n beforeExpr: true,\n binop: 7\n }),\n _instanceof: $f0e98b2c23d58ac9$var$kw(\"instanceof\", {\n beforeExpr: true,\n binop: 7\n }),\n _typeof: $f0e98b2c23d58ac9$var$kw(\"typeof\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n _void: $f0e98b2c23d58ac9$var$kw(\"void\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n _delete: $f0e98b2c23d58ac9$var$kw(\"delete\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n })\n};\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nvar $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6 = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar $f0e98b2c23d58ac9$export$866e20207bbc41f2 = new RegExp($f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.source, \"g\");\nfunction $f0e98b2c23d58ac9$export$2c19a3e3b4008fff(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029;\n}\nfunction $f0e98b2c23d58ac9$var$nextLineBreak(code, from, end) {\n if (end === void 0) end = code.length;\n for(var i = from; i < end; i++){\n var next = code.charCodeAt(i);\n if ($f0e98b2c23d58ac9$export$2c19a3e3b4008fff(next)) return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1;\n }\n return -1;\n}\nvar $f0e98b2c23d58ac9$export$268622f0f1cbc82b = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\nvar $f0e98b2c23d58ac9$var$skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nvar $f0e98b2c23d58ac9$var$ref = Object.prototype;\nvar $f0e98b2c23d58ac9$var$hasOwnProperty = $f0e98b2c23d58ac9$var$ref.hasOwnProperty;\nvar $f0e98b2c23d58ac9$var$toString = $f0e98b2c23d58ac9$var$ref.toString;\nvar $f0e98b2c23d58ac9$var$hasOwn = Object.hasOwn || function(obj, propName) {\n return $f0e98b2c23d58ac9$var$hasOwnProperty.call(obj, propName);\n};\nvar $f0e98b2c23d58ac9$var$isArray = Array.isArray || function(obj) {\n return $f0e98b2c23d58ac9$var$toString.call(obj) === \"[object Array]\";\n};\nfunction $f0e98b2c23d58ac9$var$wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\");\n}\nfunction $f0e98b2c23d58ac9$var$codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) return String.fromCharCode(code);\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00);\n}\nvar $f0e98b2c23d58ac9$var$loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\nvar $f0e98b2c23d58ac9$export$13807d9ee5a34a42 = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n$f0e98b2c23d58ac9$export$13807d9ee5a34a42.prototype.offset = function offset(n) {\n return new $f0e98b2c23d58ac9$export$13807d9ee5a34a42(this.line, this.column + n);\n};\nvar $f0e98b2c23d58ac9$export$7387db7caf96fcdb = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) this.source = p.sourceFile;\n};\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\nfunction $f0e98b2c23d58ac9$export$7af82191547c5ff7(input, offset) {\n for(var line = 1, cur = 0;;){\n var nextBreak = $f0e98b2c23d58ac9$var$nextLineBreak(input, cur, offset);\n if (nextBreak < 0) return new $f0e98b2c23d58ac9$export$13807d9ee5a34a42(line, offset - cur);\n ++line;\n cur = nextBreak;\n }\n}\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\nvar $f0e98b2c23d58ac9$export$ba43bf67f3d48107 = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n// Interpret and default an options object\nvar $f0e98b2c23d58ac9$var$warnedAboutEcmaVersion = false;\nfunction $f0e98b2c23d58ac9$var$getOptions(opts) {\n var options = {};\n for(var opt in $f0e98b2c23d58ac9$export$ba43bf67f3d48107)options[opt] = opts && $f0e98b2c23d58ac9$var$hasOwn(opts, opt) ? opts[opt] : $f0e98b2c23d58ac9$export$ba43bf67f3d48107[opt];\n if (options.ecmaVersion === \"latest\") options.ecmaVersion = 1e8;\n else if (options.ecmaVersion == null) {\n if (!$f0e98b2c23d58ac9$var$warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n $f0e98b2c23d58ac9$var$warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) options.ecmaVersion -= 2009;\n if (options.allowReserved == null) options.allowReserved = options.ecmaVersion < 5;\n if (!opts || opts.allowHashBang == null) options.allowHashBang = options.ecmaVersion >= 14;\n if ($f0e98b2c23d58ac9$var$isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function(token) {\n return tokens.push(token);\n };\n }\n if ($f0e98b2c23d58ac9$var$isArray(options.onComment)) options.onComment = $f0e98b2c23d58ac9$var$pushComment(options, options.onComment);\n return options;\n}\nfunction $f0e98b2c23d58ac9$var$pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations) comment.loc = new $f0e98b2c23d58ac9$export$7387db7caf96fcdb(this, startLoc, endLoc);\n if (options.ranges) comment.range = [\n start,\n end\n ];\n array.push(comment);\n };\n}\n// Each scope gets a bitset that may contain these flags\nvar $f0e98b2c23d58ac9$var$SCOPE_TOP = 1, $f0e98b2c23d58ac9$var$SCOPE_FUNCTION = 2, $f0e98b2c23d58ac9$var$SCOPE_ASYNC = 4, $f0e98b2c23d58ac9$var$SCOPE_GENERATOR = 8, $f0e98b2c23d58ac9$var$SCOPE_ARROW = 16, $f0e98b2c23d58ac9$var$SCOPE_SIMPLE_CATCH = 32, $f0e98b2c23d58ac9$var$SCOPE_SUPER = 64, $f0e98b2c23d58ac9$var$SCOPE_DIRECT_SUPER = 128, $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK = 256, $f0e98b2c23d58ac9$var$SCOPE_VAR = $f0e98b2c23d58ac9$var$SCOPE_TOP | $f0e98b2c23d58ac9$var$SCOPE_FUNCTION | $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK;\nfunction $f0e98b2c23d58ac9$var$functionFlags(async, generator) {\n return $f0e98b2c23d58ac9$var$SCOPE_FUNCTION | (async ? $f0e98b2c23d58ac9$var$SCOPE_ASYNC : 0) | (generator ? $f0e98b2c23d58ac9$var$SCOPE_GENERATOR : 0);\n}\n// Used in checkLVal* and declareName to determine the type of a binding\nvar $f0e98b2c23d58ac9$var$BIND_NONE = 0, $f0e98b2c23d58ac9$var$BIND_VAR = 1, $f0e98b2c23d58ac9$var$BIND_LEXICAL = 2, $f0e98b2c23d58ac9$var$BIND_FUNCTION = 3, $f0e98b2c23d58ac9$var$BIND_SIMPLE_CATCH = 4, $f0e98b2c23d58ac9$var$BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\nvar $f0e98b2c23d58ac9$export$7acfa6ed01010e37 = function Parser(options, input, startPos) {\n this.options = options = $f0e98b2c23d58ac9$var$getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = $f0e98b2c23d58ac9$var$reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") reserved += \" await\";\n }\n this.reservedWords = $f0e98b2c23d58ac9$var$wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + $f0e98b2c23d58ac9$var$reservedWords.strict;\n this.reservedWordsStrict = $f0e98b2c23d58ac9$var$wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = $f0e98b2c23d58ac9$var$wordsRegexp(reservedStrict + \" \" + $f0e98b2c23d58ac9$var$reservedWords.strictBind);\n this.input = String(input);\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n // Set up token state\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split($f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n // Properties of the current token:\n // Its type\n this.type = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\") this.skipLineComment(2);\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope($f0e98b2c23d58ac9$var$SCOPE_TOP);\n // For RegExp validation\n this.regexpState = null;\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\nvar $f0e98b2c23d58ac9$var$prototypeAccessors = {\n inFunction: {\n configurable: true\n },\n inGenerator: {\n configurable: true\n },\n inAsync: {\n configurable: true\n },\n canAwait: {\n configurable: true\n },\n allowSuper: {\n configurable: true\n },\n allowDirectSuper: {\n configurable: true\n },\n treatFunctionsAsVar: {\n configurable: true\n },\n allowNewDotTarget: {\n configurable: true\n },\n inClassStaticBlock: {\n configurable: true\n }\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype.parse = function parse() {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node);\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inFunction.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_FUNCTION) > 0;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inGenerator.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inAsync.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.canAwait.get = function() {\n for(var i = this.scopeStack.length - 1; i >= 0; i--){\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK) return false;\n if (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_FUNCTION) return (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_ASYNC) > 0;\n }\n return this.inModule && this.options.ecmaVersion >= 13 || this.options.allowAwaitOutsideFunction;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.allowSuper.get = function() {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & $f0e98b2c23d58ac9$var$SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.allowDirectSuper.get = function() {\n return (this.currentThisScope().flags & $f0e98b2c23d58ac9$var$SCOPE_DIRECT_SUPER) > 0;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.treatFunctionsAsVar.get = function() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.allowNewDotTarget.get = function() {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & ($f0e98b2c23d58ac9$var$SCOPE_FUNCTION | $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inClassStaticBlock.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK) > 0;\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.extend = function extend() {\n var plugins = [], len = arguments.length;\n while(len--)plugins[len] = arguments[len];\n var cls = this;\n for(var i = 0; i < plugins.length; i++)cls = plugins[i](cls);\n return cls;\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.parse = function parse(input, options) {\n return new this(options, input).parse();\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.parseExpressionAt = function parseExpressionAt(input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression();\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.tokenizer = function tokenizer(input, options) {\n return new this(options, input);\n};\nObject.defineProperties($f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype, $f0e98b2c23d58ac9$var$prototypeAccessors);\nvar $f0e98b2c23d58ac9$var$pp$9 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// ## Parser utilities\nvar $f0e98b2c23d58ac9$var$literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n$f0e98b2c23d58ac9$var$pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) return false;\n for(;;){\n // Try to find string literal.\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = start;\n start += $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input)[0].length;\n var match = $f0e98b2c23d58ac9$var$literal.exec(this.input.slice(start));\n if (!match) return false;\n if ((match[1] || match[2]) === \"use strict\") {\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" || $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(spaceAfter[0]) && !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\");\n }\n start += match[0].length;\n // Skip semicolon, if any.\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = start;\n start += $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\") start++;\n }\n};\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n$f0e98b2c23d58ac9$var$pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true;\n } else return false;\n};\n// Tests whether parsed token is a contextual keyword.\n$f0e98b2c23d58ac9$var$pp$9.isContextual = function(name) {\n return this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && this.value === name && !this.containsEsc;\n};\n// Consumes contextual keyword if possible.\n$f0e98b2c23d58ac9$var$pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) return false;\n this.next();\n return true;\n};\n// Asserts that following token is given contextual keyword.\n$f0e98b2c23d58ac9$var$pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) this.unexpected();\n};\n// Test whether a semicolon can be inserted at the current position.\n$f0e98b2c23d58ac9$var$pp$9.canInsertSemicolon = function() {\n return this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR || $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n};\n$f0e98b2c23d58ac9$var$pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon) this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc);\n return true;\n }\n};\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n$f0e98b2c23d58ac9$var$pp$9.semicolon = function() {\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) && !this.insertSemicolon()) this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma) this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc);\n if (!notNext) this.next();\n return true;\n }\n};\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n$f0e98b2c23d58ac9$var$pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n// Raise an unexpected token error.\n$f0e98b2c23d58ac9$var$pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\nvar $f0e98b2c23d58ac9$var$DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1;\n};\n$f0e98b2c23d58ac9$var$pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) return;\n if (refDestructuringErrors.trailingComma > -1) this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\");\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\");\n};\n$f0e98b2c23d58ac9$var$pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) return false;\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0;\n if (shorthandAssign >= 0) this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\");\n if (doubleProto >= 0) this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\");\n};\n$f0e98b2c23d58ac9$var$pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) this.raise(this.yieldPos, \"Yield expression cannot be a default value\");\n if (this.awaitPos) this.raise(this.awaitPos, \"Await expression cannot be a default value\");\n};\n$f0e98b2c23d58ac9$var$pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\") return this.isSimpleAssignTarget(expr.expression);\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\";\n};\nvar $f0e98b2c23d58ac9$var$pp$8 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// ### Statement parsing\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n$f0e98b2c23d58ac9$var$pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) node.body = [];\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof){\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule) for(var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1){\n var name = list[i];\n this.raiseRecoverable(this.undefinedExports[name].start, \"Export '\" + name + \"' is not defined\");\n }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\");\n};\nvar $f0e98b2c23d58ac9$var$loopLabel = {\n kind: \"loop\"\n}, $f0e98b2c23d58ac9$var$switchLabel = {\n kind: \"switch\"\n};\n$f0e98b2c23d58ac9$var$pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) return false;\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) return true;\n // '[', '/'\n if (context) return false;\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) return true;\n // '{', astral\n if ($f0e98b2c23d58ac9$export$56b48cc5d7560ffb(nextCh, true)) {\n var pos = next + 1;\n while($f0e98b2c23d58ac9$export$332f4d7bee38db93(nextCh = this.input.charCodeAt(pos), true))++pos;\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) return true;\n var ident = this.input.slice(next, pos);\n if (!$f0e98b2c23d58ac9$var$keywordRelationalOperator.test(ident)) return true;\n }\n return false;\n};\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\n$f0e98b2c23d58ac9$var$pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\")) return false;\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !$f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === \"function\" && (next + 8 === this.input.length || !($f0e98b2c23d58ac9$export$332f4d7bee38db93(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00));\n};\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n$f0e98b2c23d58ac9$var$pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n if (this.isLet(context)) {\n starttype = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var;\n kind = \"let\";\n }\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n switch(starttype){\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._break:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._continue:\n return this.parseBreakContinueStatement(node, starttype.keyword);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._debugger:\n return this.parseDebuggerStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._do:\n return this.parseDoStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._for:\n return this.parseForStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if (context && (this.strict || context !== \"if\" && context !== \"label\") && this.options.ecmaVersion >= 6) this.unexpected();\n return this.parseFunctionStatement(node, false, !context);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class:\n if (context) this.unexpected();\n return this.parseClass(node, true);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._if:\n return this.parseIfStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._return:\n return this.parseReturnStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._switch:\n return this.parseSwitchStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._throw:\n return this.parseThrowStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._try:\n return this.parseTryStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._const:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") this.unexpected();\n return this.parseVarStatement(node, kind);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._while:\n return this.parseWhileStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._with:\n return this.parseWithStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL:\n return this.parseBlock(true, node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi:\n return this.parseEmptyStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._export:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import:\n if (this.options.ecmaVersion > 10 && starttype === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import) {\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) return this.parseExpressionStatement(node, this.parseExpression());\n }\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel) this.raise(this.start, \"'import' and 'export' may only appear at the top level\");\n if (!this.inModule) this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\");\n }\n return starttype === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import ? this.parseImport(node) : this.parseExport(node, exports);\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) this.unexpected();\n this.next();\n return this.parseFunctionStatement(node, true, !context);\n }\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && expr.type === \"Identifier\" && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon)) return this.parseLabeledStatement(node, maybeName, expr, context);\n else return this.parseExpressionStatement(node, expr);\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) || this.insertSemicolon()) node.label = null;\n else if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) this.unexpected();\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for(; i < this.labels.length; ++i){\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === this.labels.length) this.raise(node.start, \"Unsyntactic \" + keyword);\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push($f0e98b2c23d58ac9$var$loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6) this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi);\n else this.semicolon();\n return this.finishNode(node, \"DoWhileStatement\");\n};\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n$f0e98b2c23d58ac9$var$pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\") ? this.lastTokStart : -1;\n this.labels.push($f0e98b2c23d58ac9$var$loopLabel);\n this.enterScope(0);\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, null);\n }\n var isLet = this.isLet();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\")) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else node.await = awaitAt > -1;\n }\n return this.parseForIn(node, init$1);\n }\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, init$1);\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else node.await = awaitAt > -1;\n }\n if (startsWithLet && isForOf) this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\");\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init);\n } else this.checkExpressionErrors(refDestructuringErrors, true);\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, init);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, $f0e98b2c23d58ac9$var$FUNC_STATEMENT | (declarationPosition ? 0 : $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT), false, isAsync);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction) this.raise(this.start, \"'return' outside of function\");\n this.next();\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) || this.insertSemicolon()) node.argument = null;\n else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n return this.finishNode(node, \"ReturnStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n this.labels.push($f0e98b2c23d58ac9$var$switchLabel);\n this.enterScope(0);\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n var cur;\n for(var sawDefault = false; this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR;)if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._case || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._default) {\n var isCase = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._case;\n if (cur) this.finishNode(cur, \"SwitchCase\");\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) cur.test = this.parseExpression();\n else {\n if (sawDefault) this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\");\n sawDefault = true;\n cur.test = null;\n }\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon);\n } else {\n if (!cur) this.unexpected();\n cur.consequent.push(this.parseStatement(null));\n }\n this.exitScope();\n if (cur) this.finishNode(cur, \"SwitchCase\");\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseThrowStatement = function(node) {\n this.next();\n if ($f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start))) this.raise(this.lastTokEnd, \"Illegal newline after throw\");\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\");\n};\n// Reused empty array added for node fields that are always empty.\nvar $f0e98b2c23d58ac9$var$empty$1 = [];\n$f0e98b2c23d58ac9$var$pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? $f0e98b2c23d58ac9$var$SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? $f0e98b2c23d58ac9$var$BIND_SIMPLE_CATCH : $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n return param;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL)) clause.param = this.parseCatchClauseParam();\n else {\n if (this.options.ecmaVersion < 10) this.unexpected();\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer) this.raise(node.start, \"Missing catch or finally clause\");\n return this.finishNode(node, \"TryStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push($f0e98b2c23d58ac9$var$loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseWithStatement = function(node) {\n if (this.strict) this.raise(this.start, \"'with' in strict mode\");\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for(var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1){\n var label = list[i$1];\n if (label.name === maybeName) this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n }\n var kind = this.type.isLoop ? \"loop\" : this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._switch ? \"switch\" : null;\n for(var i = this.labels.length - 1; i >= 0; i--){\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else break;\n }\n this.labels.push({\n name: maybeName,\n kind: kind,\n statementStart: this.start\n });\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\");\n};\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n$f0e98b2c23d58ac9$var$pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if (createNewLexicalScope === void 0) createNewLexicalScope = true;\n if (node === void 0) node = this.startNode();\n node.body = [];\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n if (createNewLexicalScope) this.enterScope(0);\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR){\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) this.strict = false;\n this.next();\n if (createNewLexicalScope) this.exitScope();\n return this.finishNode(node, \"BlockStatement\");\n};\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n$f0e98b2c23d58ac9$var$pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi);\n node.test = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi ? null : this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi);\n node.update = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR ? null : this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\");\n};\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n$f0e98b2c23d58ac9$var$pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in;\n this.next();\n if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.options.ecmaVersion < 8 || this.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) this.raise(init.start, (isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\");\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n};\n// Parse a list of variable declarations.\n$f0e98b2c23d58ac9$var$pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for(;;){\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq)) decl.init = this.parseMaybeAssign(isFor);\n else if (!allowMissingInitializer && kind === \"const\" && !(this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) this.unexpected();\n else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || this.isContextual(\"of\")))) this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n else decl.init = null;\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma)) break;\n }\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? $f0e98b2c23d58ac9$var$BIND_VAR : $f0e98b2c23d58ac9$var$BIND_LEXICAL, false);\n};\nvar $f0e98b2c23d58ac9$var$FUNC_STATEMENT = 1, $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT = 2, $f0e98b2c23d58ac9$var$FUNC_NULLABLE_ID = 4;\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n$f0e98b2c23d58ac9$var$pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star && statement & $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT) this.unexpected();\n node.generator = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n }\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n if (statement & $f0e98b2c23d58ac9$var$FUNC_STATEMENT) {\n node.id = statement & $f0e98b2c23d58ac9$var$FUNC_NULLABLE_ID && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name ? null : this.parseIdent();\n if (node.id && !(statement & $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT)) this.checkLValSimple(node.id, this.strict || node.generator || node.async ? this.treatFunctionsAsVar ? $f0e98b2c23d58ac9$var$BIND_VAR : $f0e98b2c23d58ac9$var$BIND_LEXICAL : $f0e98b2c23d58ac9$var$BIND_FUNCTION);\n }\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope($f0e98b2c23d58ac9$var$functionFlags(node.async, node.generator));\n if (!(statement & $f0e98b2c23d58ac9$var$FUNC_STATEMENT)) node.id = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name ? this.parseIdent() : null;\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, statement & $f0e98b2c23d58ac9$var$FUNC_STATEMENT ? \"FunctionDeclaration\" : \"FunctionExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseFunctionParams = function(node) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n node.params = this.parseBindingList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n$f0e98b2c23d58ac9$var$pp$8.parseClass = function(node, isStatement) {\n this.next();\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR){\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\");\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && $f0e98b2c23d58ac9$var$isPrivateNameConflicted(privateNameMap, element)) this.raiseRecoverable(element.key.start, \"Identifier '#\" + element.key.name + \"' has already been declared\");\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi)) return null;\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL)) {\n this.parseClassStaticBlock(node);\n return node;\n }\n if (this.isClassElementNameStart() || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) isStatic = true;\n else keyName = \"static\";\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) && !this.canInsertSemicolon()) isAsync = true;\n else keyName = \"async\";\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star)) isGenerator = true;\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) kind = lastValue;\n else keyName = lastValue;\n }\n }\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else this.parseClassElementName(node);\n // Parse element value\n if (ecmaVersion < 13 || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && $f0e98b2c23d58ac9$var$checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") this.raise(node.key.start, \"Constructor can't have get/set modifier\");\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else this.parseClassField(node);\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$8.isClassElementNameStart = function() {\n return this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL || this.type.keyword;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassElementName = function(element) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId) {\n if (this.value === \"constructor\") this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else this.parsePropertyName(element);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) this.raise(key.start, \"Constructor can't be a generator\");\n if (isAsync) this.raise(key.start, \"Constructor can't be an async method\");\n } else if (method.static && $f0e98b2c23d58ac9$var$checkKeyName(method, \"prototype\")) this.raise(key.start, \"Classes may not have a static property named prototype\");\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0) this.raiseRecoverable(value.start, \"getter should have no params\");\n if (method.kind === \"set\" && value.params.length !== 1) this.raiseRecoverable(value.start, \"setter should have exactly one param\");\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\") this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\");\n return this.finishNode(method, \"MethodDefinition\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassField = function(field) {\n if ($f0e98b2c23d58ac9$var$checkKeyName(field, \"constructor\")) this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n else if (field.static && $f0e98b2c23d58ac9$var$checkKeyName(field, \"prototype\")) this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else field.value = null;\n this.semicolon();\n return this.finishNode(field, \"PropertyDefinition\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope($f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK | $f0e98b2c23d58ac9$var$SCOPE_SUPER);\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR){\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n return this.finishNode(node, \"StaticBlock\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassId = function(node, isStatement) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) {\n node.id = this.parseIdent();\n if (isStatement) this.checkLValSimple(node.id, $f0e98b2c23d58ac9$var$BIND_LEXICAL, false);\n } else {\n if (isStatement === true) this.unexpected();\n node.id = null;\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n$f0e98b2c23d58ac9$var$pp$8.enterClassBody = function() {\n var element = {\n declared: Object.create(null),\n used: []\n };\n this.privateNameStack.push(element);\n return element.declared;\n};\n$f0e98b2c23d58ac9$var$pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) return;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for(var i = 0; i < used.length; ++i){\n var id = used[i];\n if (!$f0e98b2c23d58ac9$var$hasOwn(declared, id.name)) {\n if (parent) parent.used.push(id);\n else this.raiseRecoverable(id.start, \"Private field '#\" + id.name + \"' must be declared in an enclosing class\");\n }\n }\n};\nfunction $f0e98b2c23d58ac9$var$isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) next = (element.static ? \"s\" : \"i\") + element.kind;\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (curr === \"iget\" && next === \"iset\" || curr === \"iset\" && next === \"iget\" || curr === \"sget\" && next === \"sset\" || curr === \"sset\" && next === \"sget\") {\n privateNameMap[name] = \"true\";\n return false;\n } else if (!curr) {\n privateNameMap[name] = next;\n return false;\n } else return true;\n}\nfunction $f0e98b2c23d58ac9$var$checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (key.type === \"Identifier\" && key.name === name || key.type === \"Literal\" && key.value === name);\n}\n// Parses module export declaration.\n$f0e98b2c23d58ac9$var$pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else node.exported = null;\n }\n this.expectContextual(\"from\");\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) this.unexpected();\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star)) return this.parseExportAllDeclaration(node, exports);\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._default)) {\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\");\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\") this.checkVariableExport(exports, node.declaration.declarations);\n else this.checkExport(exports, node.declaration.id, node.declaration.id.start);\n node.specifiers = [];\n node.source = null;\n } else {\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) this.unexpected();\n node.source = this.parseExprAtom();\n } else {\n for(var i = 0, list = node.specifiers; i < list.length; i += 1){\n // check for keywords used as local names\n var spec = list[i];\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n if (spec.local.type === \"Literal\") this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) this.next();\n return this.parseFunction(fNode, $f0e98b2c23d58ac9$var$FUNC_STATEMENT | $f0e98b2c23d58ac9$var$FUNC_NULLABLE_ID, false, isAsync);\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\");\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration;\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.checkExport = function(exports, name, pos) {\n if (!exports) return;\n if (typeof name !== \"string\") name = name.type === \"Identifier\" ? name.name : name.value;\n if ($f0e98b2c23d58ac9$var$hasOwn(exports, name)) this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\");\n exports[name] = true;\n};\n$f0e98b2c23d58ac9$var$pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\") this.checkExport(exports, pat, pat.start);\n else if (type === \"ObjectPattern\") for(var i = 0, list = pat.properties; i < list.length; i += 1){\n var prop = list[i];\n this.checkPatternExport(exports, prop);\n }\n else if (type === \"ArrayPattern\") for(var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1){\n var elt = list$1[i$1];\n if (elt) this.checkPatternExport(exports, elt);\n }\n else if (type === \"Property\") this.checkPatternExport(exports, pat.value);\n else if (type === \"AssignmentPattern\") this.checkPatternExport(exports, pat.left);\n else if (type === \"RestElement\") this.checkPatternExport(exports, pat.argument);\n else if (type === \"ParenthesizedExpression\") this.checkPatternExport(exports, pat.expression);\n};\n$f0e98b2c23d58ac9$var$pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) return;\n for(var i = 0, list = decls; i < list.length; i += 1){\n var decl = list[i];\n this.checkPatternExport(exports, decl.id);\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" || this.type.keyword === \"const\" || this.type.keyword === \"class\" || this.type.keyword === \"function\" || this.isLet() || this.isAsyncFunction();\n};\n// Parses a comma-separated list of module exports.\n$f0e98b2c23d58ac9$var$pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(exports, node.exported, node.exported.start);\n return this.finishNode(node, \"ExportSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n while(!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes;\n};\n// Parses import declaration.\n$f0e98b2c23d58ac9$var$pp$8.parseImport = function(node) {\n this.next();\n // import '...'\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) {\n node.specifiers = $f0e98b2c23d58ac9$var$empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n};\n// Parses a comma-separated list of module imports.\n$f0e98b2c23d58ac9$var$pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n if (this.eatContextual(\"as\")) node.local = this.parseIdent();\n else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma)) return nodes;\n }\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes;\n }\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n while(!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n nodes.push(this.parseImportSpecifier());\n }\n return nodes;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if ($f0e98b2c23d58ac9$var$loneSurrogate.test(stringLiteral.value)) this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n return stringLiteral;\n }\n return this.parseIdent(true);\n};\n// Set `ExpressionStatement#directive` property for directive prologues.\n$f0e98b2c23d58ac9$var$pp$8.adaptDirectivePrologue = function(statements) {\n for(var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i)statements[i].directive = statements[i].expression.raw.slice(1, -1);\n};\n$f0e98b2c23d58ac9$var$pp$8.isDirectiveCandidate = function(statement) {\n return this.options.ecmaVersion >= 5 && statement.type === \"ExpressionStatement\" && statement.expression.type === \"Literal\" && typeof statement.expression.value === \"string\" && // Reject parenthesized strings.\n (this.input[statement.start] === '\"' || this.input[statement.start] === \"'\");\n};\nvar $f0e98b2c23d58ac9$var$pp$7 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// Convert existing expression atom to assignable pattern\n// if possible.\n$f0e98b2c23d58ac9$var$pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) switch(node.type){\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\") this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\");\n break;\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break;\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n for(var i = 0, list = node.properties; i < list.length; i += 1){\n var prop = list[i];\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (prop.type === \"RestElement\" && (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")) this.raise(prop.argument.start, \"Unexpected token\");\n }\n break;\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") this.raise(node.key.start, \"Object pattern can't contain getter or setter\");\n this.toAssignable(node.value, isBinding);\n break;\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n this.toAssignableList(node.elements, isBinding);\n break;\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\") this.raise(node.argument.start, \"Rest elements cannot have a default value\");\n break;\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\");\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break;\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break;\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break;\n case \"MemberExpression\":\n if (!isBinding) break;\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n else if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n return node;\n};\n// Convert list of expression atoms to binding list.\n$f0e98b2c23d58ac9$var$pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for(var i = 0; i < end; i++){\n var elt = exprList[i];\n if (elt) this.toAssignable(elt, isBinding);\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\") this.unexpected(last.argument.start);\n }\n return exprList;\n};\n// Parses spread element.\n$f0e98b2c23d58ac9$var$pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\");\n};\n$f0e98b2c23d58ac9$var$pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) this.unexpected();\n node.argument = this.parseBindingAtom();\n return this.finishNode(node, \"RestElement\");\n};\n// Parses lvalue (assignable) atom.\n$f0e98b2c23d58ac9$var$pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) switch(this.type){\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL:\n return this.parseObj(true);\n }\n return this.parseIdent();\n};\n$f0e98b2c23d58ac9$var$pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while(!this.eat(close)){\n if (first) first = false;\n else this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (allowEmpty && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) elts.push(null);\n else if (allowTrailingComma && this.afterTrailingComma(close)) break;\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n this.expect(close);\n break;\n } else elts.push(this.parseAssignableListItem(allowModifiers));\n }\n return elts;\n};\n$f0e98b2c23d58ac9$var$pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem;\n};\n$f0e98b2c23d58ac9$var$pp$7.parseBindingListItem = function(param) {\n return param;\n};\n// Parses assignment pattern around given atom if possible.\n$f0e98b2c23d58ac9$var$pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq)) return left;\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\");\n};\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n$f0e98b2c23d58ac9$var$pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $f0e98b2c23d58ac9$var$BIND_NONE;\n var isBind = bindingType !== $f0e98b2c23d58ac9$var$BIND_NONE;\n switch(expr.type){\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name)) this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\");\n if (isBind) {\n if (bindingType === $f0e98b2c23d58ac9$var$BIND_LEXICAL && expr.name === \"let\") this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\");\n if (checkClashes) {\n if ($f0e98b2c23d58ac9$var$hasOwn(checkClashes, expr.name)) this.raiseRecoverable(expr.start, \"Argument name clash\");\n checkClashes[expr.name] = true;\n }\n if (bindingType !== $f0e98b2c23d58ac9$var$BIND_OUTSIDE) this.declareName(expr.name, bindingType, expr.start);\n }\n break;\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break;\n case \"MemberExpression\":\n if (isBind) this.raiseRecoverable(expr.start, \"Binding member expression\");\n break;\n case \"ParenthesizedExpression\":\n if (isBind) this.raiseRecoverable(expr.start, \"Binding parenthesized expression\");\n return this.checkLValSimple(expr.expression, bindingType, checkClashes);\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n$f0e98b2c23d58ac9$var$pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $f0e98b2c23d58ac9$var$BIND_NONE;\n switch(expr.type){\n case \"ObjectPattern\":\n for(var i = 0, list = expr.properties; i < list.length; i += 1){\n var prop = list[i];\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break;\n case \"ArrayPattern\":\n for(var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1){\n var elem = list$1[i$1];\n if (elem) this.checkLValInnerPattern(elem, bindingType, checkClashes);\n }\n break;\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n$f0e98b2c23d58ac9$var$pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $f0e98b2c23d58ac9$var$BIND_NONE;\n switch(expr.type){\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break;\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break;\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break;\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\nvar $f0e98b2c23d58ac9$export$68e7b4c4d99215d9 = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\nvar $f0e98b2c23d58ac9$export$2b5f701edfbd6f00 = {\n b_stat: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"{\", false),\n b_expr: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"{\", true),\n b_tmpl: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"${\", false),\n p_stat: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"(\", false),\n p_expr: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"(\", true),\n q_tmpl: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"`\", true, true, function(p) {\n return p.tryReadTemplateToken();\n }),\n f_stat: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", false),\n f_expr: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", true),\n f_expr_gen: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", true, false, null, true),\n f_gen: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", false, false, null, true)\n};\nvar $f0e98b2c23d58ac9$var$pp$6 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n$f0e98b2c23d58ac9$var$pp$6.initialContext = function() {\n return [\n $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat\n ];\n};\n$f0e98b2c23d58ac9$var$pp$6.curContext = function() {\n return this.context[this.context.length - 1];\n};\n$f0e98b2c23d58ac9$var$pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr || parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_stat) return true;\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon && (parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat || parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_expr)) return !parent.isExpr;\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._return || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && this.exprAllowed) return $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._else || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow) return true;\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL) return parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat;\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._const || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) return false;\n return !this.exprAllowed;\n};\n$f0e98b2c23d58ac9$var$pp$6.inGeneratorContext = function() {\n for(var i = this.context.length - 1; i >= 1; i--){\n var context = this.context[i];\n if (context.token === \"function\") return context.generator;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot) this.exprAllowed = false;\n else if (update = type.updateContext) update.call(this, prevType);\n else this.exprAllowed = type.beforeExpr;\n};\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n$f0e98b2c23d58ac9$var$pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) this.context[this.context.length - 1] = tokenCtx;\n};\n// Token-specific context update code\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR.updateContext = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return;\n }\n var out = this.context.pop();\n if (out === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat && this.curContext().token === \"function\") out = this.context.pop();\n this.exprAllowed = !out.isExpr;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat : $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_expr);\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dollarBraceL.updateContext = function() {\n this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_tmpl);\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL.updateContext = function(prevType) {\n var statementParens = prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._if || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._for || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._with || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._while;\n this.context.push(statementParens ? $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.p_stat : $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.p_expr);\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.incDec.updateContext = function() {\n// tokExprAllowed stays unchanged\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function.updateContext = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._else && !(prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi && this.curContext() !== $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.p_stat) && !(prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._return && $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start))) && !((prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL) && this.curContext() === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat)) this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr);\n else this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_stat);\n this.exprAllowed = false;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote.updateContext = function() {\n if (this.curContext() === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.q_tmpl) this.context.pop();\n else this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.q_tmpl);\n this.exprAllowed = false;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star.updateContext = function(prevType) {\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function) {\n var index = this.context.length - 1;\n if (this.context[index] === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr) this.context[index] = $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr_gen;\n else this.context[index] = $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_gen;\n }\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot) {\n if (this.value === \"of\" && !this.exprAllowed || this.value === \"yield\" && this.inGeneratorContext()) allowed = true;\n }\n this.exprAllowed = allowed;\n};\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\nvar $f0e98b2c23d58ac9$var$pp$5 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n$f0e98b2c23d58ac9$var$pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\") return;\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) return;\n var key = prop.key;\n var name;\n switch(key.type){\n case \"Identifier\":\n name = key.name;\n break;\n case \"Literal\":\n name = String(key.value);\n break;\n default:\n return;\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) refDestructuringErrors.doubleProto = key.start;\n } else this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n propHash.proto = true;\n }\n return;\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") redefinition = this.strict && other.init || other.get || other.set;\n else redefinition = other.init || other[kind];\n if (redefinition) this.raiseRecoverable(key.start, \"Redefinition of property\");\n } else other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n other[kind] = true;\n};\n// ### Expression parsing\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n$f0e98b2c23d58ac9$var$pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [\n expr\n ];\n while(this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma))node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors));\n return this.finishNode(node, \"SequenceExpression\");\n }\n return expr;\n};\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n$f0e98b2c23d58ac9$var$pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) return this.parseYield(forInit);\n else this.exprAllowed = false;\n }\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors;\n ownDestructuringErrors = true;\n }\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc);\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq) left = this.toAssignable(left, false, refDestructuringErrors);\n if (!ownDestructuringErrors) refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n if (refDestructuringErrors.shorthandAssign >= left.start) refDestructuringErrors.shorthandAssign = -1;\n // reset because shorthand default was used correctly\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq) this.checkLValPattern(left);\n else this.checkLValSimple(left);\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) refDestructuringErrors.doubleProto = oldDoubleProto;\n return this.finishNode(node, \"AssignmentExpression\");\n } else if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true);\n if (oldParenAssign > -1) refDestructuringErrors.parenthesizedAssign = oldParenAssign;\n if (oldTrailingComma > -1) refDestructuringErrors.trailingComma = oldTrailingComma;\n return left;\n};\n// Parse a ternary conditional (`?:`) operator.\n$f0e98b2c23d58ac9$var$pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n};\n// Start the precedence parser.\n$f0e98b2c23d58ac9$var$pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit);\n};\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n$f0e98b2c23d58ac9$var$pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in)) {\n if (prec > minPrec) {\n var logical = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalOR || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND;\n var coalesce = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.coalesce;\n if (coalesce) // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND.binop;\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if (logical && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.coalesce || coalesce && (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalOR || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND)) this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit);\n }\n }\n return left;\n};\n$f0e98b2c23d58ac9$var$pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") this.raise(right.start, \"Private identifier can only be left side of binary expression\");\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\");\n};\n// Parse unary operators, both prefix and postfix.\n$f0e98b2c23d58ac9$var$pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) this.checkLValSimple(node.argument);\n else if (this.strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\");\n else if (node.operator === \"delete\" && $f0e98b2c23d58ac9$var$isPrivateFieldAccess(node.argument)) this.raiseRecoverable(node.start, \"Private fields can not be deleted\");\n else sawUnary = true;\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) this.unexpected();\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in) this.unexpected();\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n while(this.type.postfix && !this.canInsertSemicolon()){\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n if (!incDec && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.starstar)) {\n if (sawUnary) this.unexpected(this.lastTokStart);\n else return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false);\n } else return expr;\n};\nfunction $f0e98b2c23d58ac9$var$isPrivateFieldAccess(node) {\n return node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" || node.type === \"ChainExpression\" && $f0e98b2c23d58ac9$var$isPrivateFieldAccess(node.expression);\n}\n// Parse call, dot, and `[]`-subscript expressions.\n$f0e98b2c23d58ac9$var$pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\") return expr;\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1;\n if (refDestructuringErrors.parenthesizedBind >= result.start) refDestructuringErrors.parenthesizedBind = -1;\n if (refDestructuringErrors.trailingComma >= result.start) refDestructuringErrors.trailingComma = -1;\n }\n return result;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && this.potentialArrowAt === base.start;\n var optionalChained = false;\n while(true){\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n if (element.optional) optionalChained = true;\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element;\n }\n base = element;\n }\n};\n$f0e98b2c23d58ac9$var$pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow);\n};\n$f0e98b2c23d58ac9$var$pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit);\n};\n$f0e98b2c23d58ac9$var$pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.questionDot);\n if (noCalls && optional) this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\");\n var computed = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL);\n if (computed || optional && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote || this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR);\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId && base.type !== \"Super\") node.property = this.parsePrivateIdent();\n else node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n node.computed = !!computed;\n if (optionalSupported) node.optional = optional;\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL)) {\n var refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0) this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\");\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit);\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) node$1.optional = optional;\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote) {\n if (optional || optionalChained) this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({\n isTagged: true\n });\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base;\n};\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n$f0e98b2c23d58ac9$var$pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.slash) this.readRegexp();\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch(this.type){\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._super:\n if (!this.allowSuper) this.raise(this.start, \"'super' keyword outside a method\");\n node = this.startNode();\n this.next();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL && !this.allowDirectSuper) this.raise(node.start, \"super() call outside constructor of a subclass\");\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL) this.unexpected();\n return this.finishNode(node, \"Super\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function)) {\n this.overrideContext($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit);\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow)) return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [\n id\n ], false, forInit);\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && !containsEsc && (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow)) this.unexpected();\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [\n id\n ], true, forInit);\n }\n }\n return id;\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {\n pattern: value.pattern,\n flags: value.flags\n };\n return node;\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string:\n return this.parseLiteral(this.value);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._null:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._true:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._false:\n node = this.startNode();\n node.value = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._null ? null : this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) refDestructuringErrors.parenthesizedAssign = start;\n if (refDestructuringErrors.parenthesizedBind < 0) refDestructuringErrors.parenthesizedBind = start;\n }\n return expr;\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL:\n this.overrideContext($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_expr);\n return this.parseObj(false, refDestructuringErrors);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class:\n return this.parseClass(this.startNode(), false);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._new:\n return this.parseNew();\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote:\n return this.parseTemplate();\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import:\n if (this.options.ecmaVersion >= 11) return this.parseExprImport(forNew);\n else return this.unexpected();\n default:\n return this.parseExprAtomDefault();\n }\n};\n$f0e98b2c23d58ac9$var$pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword import\");\n var meta = this.parseIdent(true);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL && !forNew) return this.parseDynamicImport(node);\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot) {\n node.meta = meta;\n return this.parseImportMeta(node);\n } else this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n // Verify ending.\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR)) {\n var errorPos = this.start;\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR)) this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n else this.unexpected(errorPos);\n }\n return this.finishNode(node, \"ImportExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"meta\") this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\");\n if (containsEsc) this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\");\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere) this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\");\n return this.finishNode(node, \"MetaProperty\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\");\n this.next();\n return this.finishNode(node, \"Literal\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenExpression = function() {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n var val = this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n return val;\n};\n$f0e98b2c23d58ac9$var$pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon();\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR){\n first ? first = false : this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (allowTrailingComma && this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, true)) {\n lastIsComma = true;\n break;\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n break;\n } else exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit);\n }\n if (!exprList.length || lastIsComma) this.unexpected(this.lastTokStart);\n if (spreadStart) this.unexpected(spreadStart);\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else val = exprList[0];\n } else val = this.parseParenExpression();\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\");\n } else return val;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenItem = function(item) {\n return item;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit);\n};\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\nvar $f0e98b2c23d58ac9$var$empty = [];\n$f0e98b2c23d58ac9$var$pp$5.parseNew = function() {\n if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword new\");\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\") this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\");\n if (containsEsc) this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\");\n if (!this.allowNewDotTarget) this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\");\n return this.finishNode(node, \"MetaProperty\");\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL)) node.arguments = this.parseExprList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, this.options.ecmaVersion >= 8, false);\n else node.arguments = $f0e98b2c23d58ac9$var$empty;\n return this.finishNode(node, \"NewExpression\");\n};\n// Parse template expression.\n$f0e98b2c23d58ac9$var$pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n var elem = this.startNode();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.invalidTemplate) {\n if (!isTagged) this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n this.next();\n elem.tail = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote;\n return this.finishNode(elem, \"TemplateElement\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseTemplate = function(ref) {\n if (ref === void 0) ref = {};\n var isTagged = ref.isTagged;\n if (isTagged === void 0) isTagged = false;\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({\n isTagged: isTagged\n });\n node.quasis = [\n curElt\n ];\n while(!curElt.tail){\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof) this.raise(this.pos, \"Unterminated template literal\");\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({\n isTagged: isTagged\n }));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\");\n};\n$f0e98b2c23d58ac9$var$pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" && (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL || this.type.keyword || this.options.ecmaVersion >= 9 && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) && !$f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n};\n// Parse an object literal or binding pattern.\n$f0e98b2c23d58ac9$var$pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while(!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) this.checkPropClash(prop, propHash, refDestructuringErrors);\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n return this.finishNode(prop, \"RestElement\");\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) refDestructuringErrors.trailingComma = this.start;\n // Finish\n return this.finishNode(prop, \"SpreadElement\");\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern) isGenerator = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n this.parsePropertyName(prop);\n } else isAsync = false;\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\") this.raiseRecoverable(start, \"getter should have no params\");\n else this.raiseRecoverable(start, \"setter should have exactly one param\");\n } else if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\") this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon) this.unexpected();\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL) {\n if (isPattern) this.unexpected();\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\") && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq) {\n if (isGenerator || isAsync) this.unexpected();\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) this.unexpected();\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos) this.awaitIdentPos = startPos;\n prop.kind = \"init\";\n if (isPattern) prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0) refDestructuringErrors.shorthandAssign = this.start;\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else prop.value = this.copyNode(prop.key);\n prop.shorthand = true;\n } else this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR);\n return prop.key;\n } else prop.computed = false;\n }\n return prop.key = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n};\n// Initialize empty function node.\n$f0e98b2c23d58ac9$var$pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) node.generator = node.expression = false;\n if (this.options.ecmaVersion >= 8) node.async = false;\n};\n// Parse object or class method.\n$f0e98b2c23d58ac9$var$pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6) node.generator = isGenerator;\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope($f0e98b2c23d58ac9$var$functionFlags(isAsync, node.generator) | $f0e98b2c23d58ac9$var$SCOPE_SUPER | (allowDirectSuper ? $f0e98b2c23d58ac9$var$SCOPE_DIRECT_SUPER : 0));\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n node.params = this.parseBindingList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\");\n};\n// Parse arrow function expression with given parameters.\n$f0e98b2c23d58ac9$var$pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.enterScope($f0e98b2c23d58ac9$var$functionFlags(isAsync, false) | $f0e98b2c23d58ac9$var$SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\");\n};\n// Parse function body and check parameters.\n$f0e98b2c23d58ac9$var$pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL;\n var oldStrict = this.strict, useStrict = false;\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple) this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\");\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) this.strict = true;\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) this.checkLValSimple(node.id, $f0e98b2c23d58ac9$var$BIND_OUTSIDE);\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n$f0e98b2c23d58ac9$var$pp$5.isSimpleParamList = function(params) {\n for(var i = 0, list = params; i < list.length; i += 1){\n var param = list[i];\n if (param.type !== \"Identifier\") return false;\n }\n return true;\n};\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n$f0e98b2c23d58ac9$var$pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for(var i = 0, list = node.params; i < list.length; i += 1){\n var param = list[i];\n this.checkLValInnerPattern(param, $f0e98b2c23d58ac9$var$BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n$f0e98b2c23d58ac9$var$pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while(!this.eat(close)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) break;\n } else first = false;\n var elt = void 0;\n if (allowEmpty && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) elt = null;\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma && refDestructuringErrors.trailingComma < 0) refDestructuringErrors.trailingComma = this.start;\n } else elt = this.parseMaybeAssign(false, refDestructuringErrors);\n elts.push(elt);\n }\n return elts;\n};\n$f0e98b2c23d58ac9$var$pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n if (this.inGenerator && name === \"yield\") this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\");\n if (this.inAsync && name === \"await\") this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\");\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\") this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\");\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\")) this.raise(start, \"Cannot use \" + name + \" in class static initialization block\");\n if (this.keywords.test(name)) this.raise(start, \"Unexpected keyword '\" + name + \"'\");\n if (this.options.ecmaVersion < 6 && this.input.slice(start, end).indexOf(\"\\\\\") !== -1) return;\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\") this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\");\n this.raiseRecoverable(start, \"The keyword '\" + name + \"' is reserved\");\n }\n};\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n$f0e98b2c23d58ac9$var$pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos) this.awaitIdentPos = node.start;\n }\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) node.name = this.value;\n else if (this.type.keyword) {\n node.name = this.type.keyword;\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") && (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) this.context.pop();\n } else this.unexpected();\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId) node.name = this.value;\n else this.unexpected();\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) this.raise(node.start, \"Private field '#\" + node.name + \"' must be declared in an enclosing class\");\n else this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n return node;\n};\n// Parses yield expression inside generator.\n$f0e98b2c23d58ac9$var$pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) this.yieldPos = this.start;\n var node = this.startNode();\n this.next();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi || this.canInsertSemicolon() || this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star && !this.type.startsExpr) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) this.awaitPos = this.start;\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\");\n};\nvar $f0e98b2c23d58ac9$var$pp$4 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n$f0e98b2c23d58ac9$var$pp$4.raise = function(pos, message) {\n var loc = $f0e98b2c23d58ac9$export$7af82191547c5ff7(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos;\n err.loc = loc;\n err.raisedAt = this.pos;\n throw err;\n};\n$f0e98b2c23d58ac9$var$pp$4.raiseRecoverable = $f0e98b2c23d58ac9$var$pp$4.raise;\n$f0e98b2c23d58ac9$var$pp$4.curPosition = function() {\n if (this.options.locations) return new $f0e98b2c23d58ac9$export$13807d9ee5a34a42(this.curLine, this.pos - this.lineStart);\n};\nvar $f0e98b2c23d58ac9$var$pp$3 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\nvar $f0e98b2c23d58ac9$var$Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n$f0e98b2c23d58ac9$var$pp$3.enterScope = function(flags) {\n this.scopeStack.push(new $f0e98b2c23d58ac9$var$Scope(flags));\n};\n$f0e98b2c23d58ac9$var$pp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\n$f0e98b2c23d58ac9$var$pp$3.treatFunctionsAsVarInScope = function(scope) {\n return scope.flags & $f0e98b2c23d58ac9$var$SCOPE_FUNCTION || !this.inModule && scope.flags & $f0e98b2c23d58ac9$var$SCOPE_TOP;\n};\n$f0e98b2c23d58ac9$var$pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === $f0e98b2c23d58ac9$var$BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && scope.flags & $f0e98b2c23d58ac9$var$SCOPE_TOP) delete this.undefinedExports[name];\n } else if (bindingType === $f0e98b2c23d58ac9$var$BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === $f0e98b2c23d58ac9$var$BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar) redeclared = scope$2.lexical.indexOf(name) > -1;\n else redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1;\n scope$2.functions.push(name);\n } else for(var i = this.scopeStack.length - 1; i >= 0; --i){\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !(scope$3.flags & $f0e98b2c23d58ac9$var$SCOPE_SIMPLE_CATCH && scope$3.lexical[0] === name) || !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break;\n }\n scope$3.var.push(name);\n if (this.inModule && scope$3.flags & $f0e98b2c23d58ac9$var$SCOPE_TOP) delete this.undefinedExports[name];\n if (scope$3.flags & $f0e98b2c23d58ac9$var$SCOPE_VAR) break;\n }\n if (redeclared) this.raiseRecoverable(pos, \"Identifier '\" + name + \"' has already been declared\");\n};\n$f0e98b2c23d58ac9$var$pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && this.scopeStack[0].var.indexOf(id.name) === -1) this.undefinedExports[id.name] = id;\n};\n$f0e98b2c23d58ac9$var$pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1];\n};\n$f0e98b2c23d58ac9$var$pp$3.currentVarScope = function() {\n for(var i = this.scopeStack.length - 1;; i--){\n var scope = this.scopeStack[i];\n if (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_VAR) return scope;\n }\n};\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n$f0e98b2c23d58ac9$var$pp$3.currentThisScope = function() {\n for(var i = this.scopeStack.length - 1;; i--){\n var scope = this.scopeStack[i];\n if (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_VAR && !(scope.flags & $f0e98b2c23d58ac9$var$SCOPE_ARROW)) return scope;\n }\n};\nvar $f0e98b2c23d58ac9$export$85c928794f8d04d4 = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations) this.loc = new $f0e98b2c23d58ac9$export$7387db7caf96fcdb(parser, loc);\n if (parser.options.directSourceFile) this.sourceFile = parser.options.directSourceFile;\n if (parser.options.ranges) this.range = [\n pos,\n 0\n ];\n};\n// Start an AST node, attaching a start offset.\nvar $f0e98b2c23d58ac9$var$pp$2 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n$f0e98b2c23d58ac9$var$pp$2.startNode = function() {\n return new $f0e98b2c23d58ac9$export$85c928794f8d04d4(this, this.start, this.startLoc);\n};\n$f0e98b2c23d58ac9$var$pp$2.startNodeAt = function(pos, loc) {\n return new $f0e98b2c23d58ac9$export$85c928794f8d04d4(this, pos, loc);\n};\n// Finish an AST node, adding `type` and `end` properties.\nfunction $f0e98b2c23d58ac9$var$finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations) node.loc.end = loc;\n if (this.options.ranges) node.range[1] = pos;\n return node;\n}\n$f0e98b2c23d58ac9$var$pp$2.finishNode = function(node, type) {\n return $f0e98b2c23d58ac9$var$finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc);\n};\n// Finish node at given position\n$f0e98b2c23d58ac9$var$pp$2.finishNodeAt = function(node, type, pos, loc) {\n return $f0e98b2c23d58ac9$var$finishNodeAt.call(this, node, type, pos, loc);\n};\n$f0e98b2c23d58ac9$var$pp$2.copyNode = function(node) {\n var newNode = new $f0e98b2c23d58ac9$export$85c928794f8d04d4(this, node.start, this.startLoc);\n for(var prop in node)newNode[prop] = node[prop];\n return newNode;\n};\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n// #table-binary-unicode-properties\nvar $f0e98b2c23d58ac9$var$ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar $f0e98b2c23d58ac9$var$ecma10BinaryProperties = $f0e98b2c23d58ac9$var$ecma9BinaryProperties + \" Extended_Pictographic\";\nvar $f0e98b2c23d58ac9$var$ecma11BinaryProperties = $f0e98b2c23d58ac9$var$ecma10BinaryProperties;\nvar $f0e98b2c23d58ac9$var$ecma12BinaryProperties = $f0e98b2c23d58ac9$var$ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar $f0e98b2c23d58ac9$var$ecma13BinaryProperties = $f0e98b2c23d58ac9$var$ecma12BinaryProperties;\nvar $f0e98b2c23d58ac9$var$ecma14BinaryProperties = $f0e98b2c23d58ac9$var$ecma13BinaryProperties;\nvar $f0e98b2c23d58ac9$var$unicodeBinaryProperties = {\n 9: $f0e98b2c23d58ac9$var$ecma9BinaryProperties,\n 10: $f0e98b2c23d58ac9$var$ecma10BinaryProperties,\n 11: $f0e98b2c23d58ac9$var$ecma11BinaryProperties,\n 12: $f0e98b2c23d58ac9$var$ecma12BinaryProperties,\n 13: $f0e98b2c23d58ac9$var$ecma13BinaryProperties,\n 14: $f0e98b2c23d58ac9$var$ecma14BinaryProperties\n};\n// #table-binary-unicode-properties-of-strings\nvar $f0e98b2c23d58ac9$var$ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\nvar $f0e98b2c23d58ac9$var$unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: $f0e98b2c23d58ac9$var$ecma14BinaryPropertiesOfStrings\n};\n// #table-unicode-general-category-values\nvar $f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n// #table-unicode-script-values\nvar $f0e98b2c23d58ac9$var$ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar $f0e98b2c23d58ac9$var$ecma10ScriptValues = $f0e98b2c23d58ac9$var$ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar $f0e98b2c23d58ac9$var$ecma11ScriptValues = $f0e98b2c23d58ac9$var$ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar $f0e98b2c23d58ac9$var$ecma12ScriptValues = $f0e98b2c23d58ac9$var$ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar $f0e98b2c23d58ac9$var$ecma13ScriptValues = $f0e98b2c23d58ac9$var$ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar $f0e98b2c23d58ac9$var$ecma14ScriptValues = $f0e98b2c23d58ac9$var$ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\nvar $f0e98b2c23d58ac9$var$unicodeScriptValues = {\n 9: $f0e98b2c23d58ac9$var$ecma9ScriptValues,\n 10: $f0e98b2c23d58ac9$var$ecma10ScriptValues,\n 11: $f0e98b2c23d58ac9$var$ecma11ScriptValues,\n 12: $f0e98b2c23d58ac9$var$ecma12ScriptValues,\n 13: $f0e98b2c23d58ac9$var$ecma13ScriptValues,\n 14: $f0e98b2c23d58ac9$var$ecma14ScriptValues\n};\nvar $f0e98b2c23d58ac9$var$data = {};\nfunction $f0e98b2c23d58ac9$var$buildUnicodeData(ecmaVersion) {\n var d = $f0e98b2c23d58ac9$var$data[ecmaVersion] = {\n binary: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeBinaryProperties[ecmaVersion] + \" \" + $f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues),\n binaryOfStrings: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues),\n Script: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\nfor(var $f0e98b2c23d58ac9$var$i = 0, $f0e98b2c23d58ac9$var$list = [\n 9,\n 10,\n 11,\n 12,\n 13,\n 14\n]; $f0e98b2c23d58ac9$var$i < $f0e98b2c23d58ac9$var$list.length; $f0e98b2c23d58ac9$var$i += 1){\n var $f0e98b2c23d58ac9$var$ecmaVersion = $f0e98b2c23d58ac9$var$list[$f0e98b2c23d58ac9$var$i];\n $f0e98b2c23d58ac9$var$buildUnicodeData($f0e98b2c23d58ac9$var$ecmaVersion);\n}\nvar $f0e98b2c23d58ac9$var$pp$1 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\nvar $f0e98b2c23d58ac9$var$RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = $f0e98b2c23d58ac9$var$data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.reset = function reset(start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.raise = function raise(message) {\n this.parser.raiseRecoverable(this.start, \"Invalid regular expression: /\" + this.source + \"/: \" + message);\n};\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.at = function at(i, forceU) {\n if (forceU === void 0) forceU = false;\n var s = this.source;\n var l = s.length;\n if (i >= l) return -1;\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) return c;\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c;\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.nextIndex = function nextIndex(i, forceU) {\n if (forceU === void 0) forceU = false;\n var s = this.source;\n var l = s.length;\n if (i >= l) return l;\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l || (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) return i + 1;\n return i + 2;\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.current = function current(forceU) {\n if (forceU === void 0) forceU = false;\n return this.at(this.pos, forceU);\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.lookahead = function lookahead(forceU) {\n if (forceU === void 0) forceU = false;\n return this.at(this.nextIndex(this.pos, forceU), forceU);\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.advance = function advance(forceU) {\n if (forceU === void 0) forceU = false;\n this.pos = this.nextIndex(this.pos, forceU);\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.eat = function eat(ch, forceU) {\n if (forceU === void 0) forceU = false;\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.eatChars = function eatChars(chs, forceU) {\n if (forceU === void 0) forceU = false;\n var pos = this.pos;\n for(var i = 0, list = chs; i < list.length; i += 1){\n var ch = list[i];\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) return false;\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true;\n};\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */ $f0e98b2c23d58ac9$var$pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n var u = false;\n var v = false;\n for(var i = 0; i < flags.length; i++){\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) this.raise(state.start, \"Invalid regular expression flag\");\n if (flags.indexOf(flag, i + 1) > -1) this.raise(state.start, \"Duplicate regular expression flag\");\n if (flag === \"u\") u = true;\n if (flag === \"v\") v = true;\n }\n if (this.options.ecmaVersion >= 15 && u && v) this.raise(state.start, \"Invalid regular expression flag\");\n};\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */ $f0e98b2c23d58ac9$var$pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n$f0e98b2c23d58ac9$var$pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n this.regexp_disjunction(state);\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */ )) state.raise(\"Unmatched ')'\");\n if (state.eat(0x5D /* ] */ ) || state.eat(0x7D /* } */ )) state.raise(\"Lone quantifier brackets\");\n }\n if (state.maxBackReference > state.numCapturingParens) state.raise(\"Invalid escape\");\n for(var i = 0, list = state.backReferenceNames; i < list.length; i += 1){\n var name = list[i];\n if (state.groupNames.indexOf(name) === -1) state.raise(\"Invalid named capture referenced\");\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n$f0e98b2c23d58ac9$var$pp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while(state.eat(0x7C /* | */ ))this.regexp_alternative(state);\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) state.raise(\"Nothing to repeat\");\n if (state.eat(0x7B /* { */ )) state.raise(\"Lone quantifier brackets\");\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n$f0e98b2c23d58ac9$var$pp$1.regexp_alternative = function(state) {\n while(state.pos < state.source.length && this.regexp_eatTerm(state));\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) // Make the same message as V8.\n {\n if (state.switchU) state.raise(\"Invalid quantifier\");\n }\n return true;\n }\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n // ^, $\n if (state.eat(0x5E /* ^ */ ) || state.eat(0x24 /* $ */ )) return true;\n // \\b \\B\n if (state.eat(0x5C /* \\ */ )) {\n if (state.eat(0x42 /* B */ ) || state.eat(0x62 /* b */ )) return true;\n state.pos = start;\n }\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */ ) && state.eat(0x3F /* ? */ )) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) lookbehind = state.eat(0x3C /* < */ );\n if (state.eat(0x3D /* = */ ) || state.eat(0x21 /* ! */ )) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */ )) state.raise(\"Unterminated group\");\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true;\n }\n }\n state.pos = start;\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatQuantifier = function(state, noError) {\n if (noError === void 0) noError = false;\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */ );\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return state.eat(0x2A /* * */ ) || state.eat(0x2B /* + */ ) || state.eat(0x3F /* ? */ ) || this.regexp_eatBracedQuantifier(state, noError);\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */ )) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */ ) && this.regexp_eatDecimalDigits(state)) max = state.lastIntValue;\n if (state.eat(0x7D /* } */ )) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) state.raise(\"numbers out of order in {} quantifier\");\n return true;\n }\n }\n if (state.switchU && !noError) state.raise(\"Incomplete quantifier\");\n state.pos = start;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatAtom = function(state) {\n return this.regexp_eatPatternCharacters(state) || state.eat(0x2E /* . */ ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state);\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatAtomEscape(state)) return true;\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */ )) {\n if (state.eat(0x3F /* ? */ ) && state.eat(0x3A /* : */ )) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */ )) return true;\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */ )) {\n if (this.options.ecmaVersion >= 9) this.regexp_groupSpecifier(state);\n else if (state.current() === 0x3F /* ? */ ) state.raise(\"Invalid group\");\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */ )) {\n state.numCapturingParens += 1;\n return true;\n }\n state.raise(\"Unterminated group\");\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatExtendedAtom = function(state) {\n return state.eat(0x2E /* . */ ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state) || this.regexp_eatInvalidBracedQuantifier(state) || this.regexp_eatExtendedPatternCharacter(state);\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) state.raise(\"Nothing to repeat\");\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isSyntaxCharacter(ch) {\n return ch === 0x24 /* $ */ || ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ || ch === 0x2E /* . */ || ch === 0x3F /* ? */ || ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ || ch >= 0x7B /* { */ && ch <= 0x7D /* } */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while((ch = state.current()) !== -1 && !$f0e98b2c23d58ac9$var$isSyntaxCharacter(ch))state.advance();\n return state.pos !== start;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (ch !== -1 && ch !== 0x24 /* $ */ && !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ) && ch !== 0x2E /* . */ && ch !== 0x3F /* ? */ && ch !== 0x5B /* [ */ && ch !== 0x5E /* ^ */ && ch !== 0x7C /* | */ ) {\n state.advance();\n return true;\n }\n return false;\n};\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\n$f0e98b2c23d58ac9$var$pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */ )) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) state.raise(\"Duplicate capture group name\");\n state.groupNames.push(state.lastStringValue);\n return;\n }\n state.raise(\"Invalid group\");\n }\n};\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */ )) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */ )) return true;\n state.raise(\"Invalid capture group name\");\n }\n return false;\n};\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(state.lastIntValue);\n while(this.regexp_eatRegExpIdentifierPart(state))state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(state.lastIntValue);\n return true;\n }\n return false;\n};\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) ch = state.lastIntValue;\n if ($f0e98b2c23d58ac9$var$isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true;\n }\n state.pos = start;\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isRegExpIdentifierStart(ch) {\n return $f0e98b2c23d58ac9$export$56b48cc5d7560ffb(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ ;\n}\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) ch = state.lastIntValue;\n if ($f0e98b2c23d58ac9$var$isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true;\n }\n state.pos = start;\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isRegExpIdentifierPart(ch) {\n return $f0e98b2c23d58ac9$export$332f4d7bee38db93(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatAtomEscape = function(state) {\n if (this.regexp_eatBackReference(state) || this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state) || state.switchN && this.regexp_eatKGroupName(state)) return true;\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */ ) state.raise(\"Invalid unicode escape\");\n state.raise(\"Invalid escape\");\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) state.maxBackReference = n;\n return true;\n }\n if (n <= state.numCapturingParens) return true;\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */ )) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true;\n }\n state.raise(\"Invalid named reference\");\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCharacterEscape = function(state) {\n return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state, false) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state);\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */ )) {\n if (this.regexp_eatControlLetter(state)) return true;\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !$f0e98b2c23d58ac9$var$isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */ ) {\n state.lastIntValue = 0x09; /* \\t */ \n state.advance();\n return true;\n }\n if (ch === 0x6E /* n */ ) {\n state.lastIntValue = 0x0A; /* \\n */ \n state.advance();\n return true;\n }\n if (ch === 0x76 /* v */ ) {\n state.lastIntValue = 0x0B; /* \\v */ \n state.advance();\n return true;\n }\n if (ch === 0x66 /* f */ ) {\n state.lastIntValue = 0x0C; /* \\f */ \n state.advance();\n return true;\n }\n if (ch === 0x72 /* r */ ) {\n state.lastIntValue = 0x0D; /* \\r */ \n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true;\n }\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isControlLetter(ch) {\n return ch >= 0x41 /* A */ && ch <= 0x5A /* Z */ || ch >= 0x61 /* a */ && ch <= 0x7A /* z */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if (forceU === void 0) forceU = false;\n var start = state.pos;\n var switchU = forceU || state.switchU;\n if (state.eat(0x75 /* u */ )) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */ ) && state.eat(0x75 /* u */ ) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true;\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true;\n }\n if (switchU && state.eat(0x7B /* { */ ) && this.regexp_eatHexDigits(state) && state.eat(0x7D /* } */ ) && $f0e98b2c23d58ac9$var$isValidUnicode(state.lastIntValue)) return true;\n if (switchU) state.raise(\"Invalid unicode escape\");\n state.pos = start;\n }\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) return true;\n if (state.eat(0x2F /* / */ )) {\n state.lastIntValue = 0x2F; /* / */ \n return true;\n }\n return false;\n }\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */ )) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */ ) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */ );\n state.advance();\n }while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ );\n return true;\n }\n return false;\n};\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar $f0e98b2c23d58ac9$var$CharSetNone = 0; // Nothing parsed\nvar $f0e98b2c23d58ac9$var$CharSetOk = 1; // Construct parsed, cannot contain strings\nvar $f0e98b2c23d58ac9$var$CharSetString = 2; // Construct parsed, can contain strings\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return $f0e98b2c23d58ac9$var$CharSetOk;\n }\n var negate = false;\n if (state.switchU && this.options.ecmaVersion >= 9 && ((negate = ch === 0x50 /* P */ ) || ch === 0x70 /* p */ )) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (state.eat(0x7B /* { */ ) && (result = this.regexp_eatUnicodePropertyValueExpression(state)) && state.eat(0x7D /* } */ )) {\n if (negate && result === $f0e98b2c23d58ac9$var$CharSetString) state.raise(\"Invalid property name\");\n return result;\n }\n state.raise(\"Invalid property name\");\n }\n return $f0e98b2c23d58ac9$var$CharSetNone;\n};\nfunction $f0e98b2c23d58ac9$var$isCharacterClassEscape(ch) {\n return ch === 0x64 /* d */ || ch === 0x44 /* D */ || ch === 0x73 /* s */ || ch === 0x53 /* S */ || ch === 0x77 /* w */ || ch === 0x57 /* W */ ;\n}\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */ )) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return $f0e98b2c23d58ac9$var$CharSetOk;\n }\n }\n state.pos = start;\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n }\n return $f0e98b2c23d58ac9$var$CharSetNone;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!$f0e98b2c23d58ac9$var$hasOwn(state.unicodeProperties.nonBinary, name)) state.raise(\"Invalid property name\");\n if (!state.unicodeProperties.nonBinary[name].test(value)) state.raise(\"Invalid property value\");\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) return $f0e98b2c23d58ac9$var$CharSetOk;\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) return $f0e98b2c23d58ac9$var$CharSetString;\n state.raise(\"Invalid property name\");\n};\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while($f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter(ch = state.current())){\n state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\";\n};\nfunction $f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter(ch) {\n return $f0e98b2c23d58ac9$var$isControlLetter(ch) || ch === 0x5F /* _ */ ;\n}\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while($f0e98b2c23d58ac9$var$isUnicodePropertyValueCharacter(ch = state.current())){\n state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\";\n};\nfunction $f0e98b2c23d58ac9$var$isUnicodePropertyValueCharacter(ch) {\n return $f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter(ch) || $f0e98b2c23d58ac9$var$isDecimalDigit(ch);\n}\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state);\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */ )) {\n var negate = state.eat(0x5E /* ^ */ );\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */ )) state.raise(\"Unterminated character class\");\n if (negate && result === $f0e98b2c23d58ac9$var$CharSetString) state.raise(\"Negated character class may contain strings\");\n return true;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n$f0e98b2c23d58ac9$var$pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */ ) return $f0e98b2c23d58ac9$var$CharSetOk;\n if (state.switchV) return this.regexp_classSetExpression(state);\n this.regexp_nonEmptyClassRanges(state);\n return $f0e98b2c23d58ac9$var$CharSetOk;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n$f0e98b2c23d58ac9$var$pp$1.regexp_nonEmptyClassRanges = function(state) {\n while(this.regexp_eatClassAtom(state)){\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */ ) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) state.raise(\"Invalid character class\");\n if (left !== -1 && right !== -1 && left > right) state.raise(\"Range out of order in character class\");\n }\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatClassEscape(state)) return true;\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || $f0e98b2c23d58ac9$var$isOctalDigit(ch$1)) state.raise(\"Invalid class escape\");\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n var ch = state.current();\n if (ch !== 0x5D /* ] */ ) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x62 /* b */ )) {\n state.lastIntValue = 0x08; /* */ \n return true;\n }\n if (state.switchU && state.eat(0x2D /* - */ )) {\n state.lastIntValue = 0x2D; /* - */ \n return true;\n }\n if (!state.switchU && state.eat(0x63 /* c */ )) {\n if (this.regexp_eatClassControlLetter(state)) return true;\n state.pos = start;\n }\n return this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state);\n};\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\n$f0e98b2c23d58ac9$var$pp$1.regexp_classSetExpression = function(state) {\n var result = $f0e98b2c23d58ac9$var$CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ;\n else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetString;\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while(state.eatChars([\n 0x26,\n 0x26\n ])){\n if (state.current() !== 0x26 /* & */ && (subResult = this.regexp_eatClassSetOperand(state))) {\n if (subResult !== $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetOk;\n continue;\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) return result;\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while(state.eatChars([\n 0x2D,\n 0x2D\n ])){\n if (this.regexp_eatClassSetOperand(state)) continue;\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) return result;\n } else state.raise(\"Invalid character in character class\");\n // https://tc39.es/ecma262/#prod-ClassUnion\n for(;;){\n if (this.regexp_eatClassSetRange(state)) continue;\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) return result;\n if (subResult === $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetString;\n }\n};\n// https://tc39.es/ecma262/#prod-ClassSetRange\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */ ) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) state.raise(\"Range out of order in character class\");\n return true;\n }\n state.pos = start;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassSetOperand\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) return $f0e98b2c23d58ac9$var$CharSetOk;\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state);\n};\n// https://tc39.es/ecma262/#prod-NestedClass\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */ )) {\n var negate = state.eat(0x5E /* ^ */ );\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */ )) {\n if (negate && result === $f0e98b2c23d58ac9$var$CharSetString) state.raise(\"Negated character class may contain strings\");\n return result;\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */ )) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) return result$1;\n state.pos = start;\n }\n return null;\n};\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([\n 0x5C,\n 0x71\n ])) {\n if (state.eat(0x7B /* { */ )) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */ )) return result;\n } else // Make the same message as V8.\n state.raise(\"Invalid escape\");\n state.pos = start;\n }\n return null;\n};\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n$f0e98b2c23d58ac9$var$pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while(state.eat(0x7C /* | */ ))if (this.regexp_classString(state) === $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetString;\n return result;\n};\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\n$f0e98b2c23d58ac9$var$pp$1.regexp_classString = function(state) {\n var count = 0;\n while(this.regexp_eatClassSetCharacter(state))count++;\n return count === 1 ? $f0e98b2c23d58ac9$var$CharSetOk : $f0e98b2c23d58ac9$var$CharSetString;\n};\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatCharacterEscape(state) || this.regexp_eatClassSetReservedPunctuator(state)) return true;\n if (state.eat(0x62 /* b */ )) {\n state.lastIntValue = 0x08; /* */ \n return true;\n }\n state.pos = start;\n return false;\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && $f0e98b2c23d58ac9$var$isClassSetReservedDoublePunctuatorCharacter(ch)) return false;\n if ($f0e98b2c23d58ac9$var$isClassSetSyntaxCharacter(ch)) return false;\n state.advance();\n state.lastIntValue = ch;\n return true;\n};\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction $f0e98b2c23d58ac9$var$isClassSetReservedDoublePunctuatorCharacter(ch) {\n return ch === 0x21 /* ! */ || ch >= 0x23 /* # */ && ch <= 0x26 /* & */ || ch >= 0x2A /* * */ && ch <= 0x2C /* , */ || ch === 0x2E /* . */ || ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ || ch === 0x5E /* ^ */ || ch === 0x60 /* ` */ || ch === 0x7E /* ~ */ ;\n}\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction $f0e98b2c23d58ac9$var$isClassSetSyntaxCharacter(ch) {\n return ch === 0x28 /* ( */ || ch === 0x29 /* ) */ || ch === 0x2D /* - */ || ch === 0x2F /* / */ || ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ || ch >= 0x7B /* { */ && ch <= 0x7D /* } */ ;\n}\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction $f0e98b2c23d58ac9$var$isClassSetReservedPunctuator(ch) {\n return ch === 0x21 /* ! */ || ch === 0x23 /* # */ || ch === 0x25 /* % */ || ch === 0x26 /* & */ || ch === 0x2C /* , */ || ch === 0x2D /* - */ || ch >= 0x3A /* : */ && ch <= 0x3E /* > */ || ch === 0x40 /* @ */ || ch === 0x60 /* ` */ || ch === 0x7E /* ~ */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isDecimalDigit(ch) || ch === 0x5F /* _ */ ) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */ )) {\n if (this.regexp_eatFixedHexDigits(state, 2)) return true;\n if (state.switchU) state.raise(\"Invalid escape\");\n state.pos = start;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while($f0e98b2c23d58ac9$var$isDecimalDigit(ch = state.current())){\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */ );\n state.advance();\n }\n return state.pos !== start;\n};\nfunction $f0e98b2c23d58ac9$var$isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while($f0e98b2c23d58ac9$var$isHexDigit(ch = state.current())){\n state.lastIntValue = 16 * state.lastIntValue + $f0e98b2c23d58ac9$var$hexToInt(ch);\n state.advance();\n }\n return state.pos !== start;\n};\nfunction $f0e98b2c23d58ac9$var$isHexDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ || ch >= 0x41 /* A */ && ch <= 0x46 /* F */ || ch >= 0x61 /* a */ && ch <= 0x66 /* f */ ;\n}\nfunction $f0e98b2c23d58ac9$var$hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */ ) return 10 + (ch - 0x41 /* A */ );\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */ ) return 10 + (ch - 0x61 /* a */ );\n return ch - 0x30 /* 0 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n else state.lastIntValue = n1 * 8 + n2;\n } else state.lastIntValue = n1;\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */ \n state.advance();\n return true;\n }\n state.lastIntValue = 0;\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for(var i = 0; i < length; ++i){\n var ch = state.current();\n if (!$f0e98b2c23d58ac9$var$isHexDigit(ch)) {\n state.pos = start;\n return false;\n }\n state.lastIntValue = 16 * state.lastIntValue + $f0e98b2c23d58ac9$var$hexToInt(ch);\n state.advance();\n }\n return true;\n};\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\nvar $f0e98b2c23d58ac9$export$50792b0e93539fde = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations) this.loc = new $f0e98b2c23d58ac9$export$7387db7caf96fcdb(p, p.startLoc, p.endLoc);\n if (p.options.ranges) this.range = [\n p.start,\n p.end\n ];\n};\n// ## Tokenizer\nvar $f0e98b2c23d58ac9$var$pp = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// Move to the next token\n$f0e98b2c23d58ac9$var$pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword);\n if (this.options.onToken) this.options.onToken(new $f0e98b2c23d58ac9$export$50792b0e93539fde(this));\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n$f0e98b2c23d58ac9$var$pp.getToken = function() {\n this.next();\n return new $f0e98b2c23d58ac9$export$50792b0e93539fde(this);\n};\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\") $f0e98b2c23d58ac9$var$pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n return {\n next: function() {\n var token = this$1$1.getToken();\n return {\n done: token.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof,\n value: token\n };\n }\n };\n};\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n// Read a single token, updating the parser object's token-related\n// properties.\n$f0e98b2c23d58ac9$var$pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) this.skipSpace();\n this.start = this.pos;\n if (this.options.locations) this.startLoc = this.curPosition();\n if (this.pos >= this.input.length) return this.finishToken($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof);\n if (curContext.override) return curContext.override(this);\n else this.readToken(this.fullCharCodeAtPos());\n};\n$f0e98b2c23d58ac9$var$pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if ($f0e98b2c23d58ac9$export$56b48cc5d7560ffb(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */ ) return this.readWord();\n return this.getTokenFromCode(code);\n};\n$f0e98b2c23d58ac9$var$pp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) return code;\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00;\n};\n$f0e98b2c23d58ac9$var$pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) this.raise(this.pos - 2, \"Unterminated comment\");\n this.pos = end + 2;\n if (this.options.locations) for(var nextBreak = void 0, pos = start; (nextBreak = $f0e98b2c23d58ac9$var$nextLineBreak(this.input, pos, this.pos)) > -1;){\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n if (this.options.onComment) this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition());\n};\n$f0e98b2c23d58ac9$var$pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while(this.pos < this.input.length && !$f0e98b2c23d58ac9$export$2c19a3e3b4008fff(ch))ch = this.input.charCodeAt(++this.pos);\n if (this.options.onComment) this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition());\n};\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n$f0e98b2c23d58ac9$var$pp.skipSpace = function() {\n loop: while(this.pos < this.input.length){\n var ch = this.input.charCodeAt(this.pos);\n switch(ch){\n case 32:\n case 160:\n ++this.pos;\n break;\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) ++this.pos;\n case 10:\n case 8232:\n case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break;\n case 47:\n switch(this.input.charCodeAt(this.pos + 1)){\n case 42:\n this.skipBlockComment();\n break;\n case 47:\n this.skipLineComment(2);\n break;\n default:\n break loop;\n }\n break;\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && $f0e98b2c23d58ac9$export$268622f0f1cbc82b.test(String.fromCharCode(ch))) ++this.pos;\n else break loop;\n }\n }\n};\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n$f0e98b2c23d58ac9$var$pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) this.endLoc = this.curPosition();\n var prevType = this.type;\n this.type = type;\n this.value = val;\n this.updateContext(prevType);\n};\n// ### Token reading\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\n$f0e98b2c23d58ac9$var$pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) return this.readNumber(true);\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) {\n this.pos += 3;\n return this.finishToken($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis);\n } else {\n ++this.pos;\n return this.finishToken($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot);\n }\n};\n$f0e98b2c23d58ac9$var$pp.readToken_slash = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) {\n ++this.pos;\n return this.readRegexp();\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.slash, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_mult_modulo_exp = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star : $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.modulo;\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp(tokentype, size);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_pipe_amp = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 3);\n }\n return this.finishOp(code === 124 ? $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalOR : $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND, 2);\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp(code === 124 ? $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitwiseOR : $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitwiseAND, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_caret = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitwiseXOR, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_plus_min = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken();\n }\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.incDec, 2);\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.plusMin, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_lt_gt = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitShift, size);\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n // operators --> modify existing Colors\n // interpolators\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n // scale\n chroma.scales = scales;\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n var chroma_js = chroma;\n return chroma_js;\n});\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nconst $c5a0b96abcd6dbcd$var$location = window.location;\nconst $c5a0b96abcd6dbcd$export$281ad3752a540efe = new URLSearchParams($c5a0b96abcd6dbcd$var$location.search);\nconst $c5a0b96abcd6dbcd$export$128fa18b7194ef = new URL($c5a0b96abcd6dbcd$var$location);\nconst $c5a0b96abcd6dbcd$export$1bb10639a2cd4297 = $9c36b6a340cabfc4$export$185802fd694ee1f5({\n objectHash: $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a\n});\nfunction $c5a0b96abcd6dbcd$export$d2cf6cd1dc7067d3(className, ...elements) {\n elements.forEach((element)=>element.classList.add(className));\n}\nfunction $c5a0b96abcd6dbcd$export$1a23559e655dacdd(original, degrees) {\n const result = original + degrees;\n if (result < 0) return 360 + result;\n else if (result > 360) return result - 360;\n return result;\n}\nfunction $c5a0b96abcd6dbcd$export$bac4c4504d574f(direction, amount) {\n return (direction + amount + 6) % 6;\n}\nfunction $c5a0b96abcd6dbcd$export$afb15ede80c42aab(string) {\n const binString = window.atob($c5a0b96abcd6dbcd$var$base64unescape(string));\n // noinspection JSCheckFunctionSignatures\n return new TextDecoder().decode((0, $b8ea597934691048$export$2e2bcd8739ae039).inflate(Uint8Array.from(binString, (c)=>c.codePointAt(0))));\n}\nwindow.base64decode = $c5a0b96abcd6dbcd$export$afb15ede80c42aab;\nfunction $c5a0b96abcd6dbcd$export$4e633de97d65d1c8(string) {\n return $c5a0b96abcd6dbcd$var$base64escape(window.btoa(String.fromCodePoint(...(0, $b8ea597934691048$export$2e2bcd8739ae039).deflate(new TextEncoder().encode(string)))));\n}\nwindow.base64encode = $c5a0b96abcd6dbcd$export$4e633de97d65d1c8;\nfunction $c5a0b96abcd6dbcd$var$base64escape(string) {\n // https://en.wikipedia.org/wiki/Base64#URL_applications\n return string.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction $c5a0b96abcd6dbcd$var$base64unescape(string) {\n return (string + \"===\".slice((string.length + 3) % 4)).replace(/-/g, \"+\").replace(/_/g, \"/\");\n}\nfunction $c5a0b96abcd6dbcd$export$9a00dee1beb8f576(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction $c5a0b96abcd6dbcd$export$6e5538615c060df7(...args) {\n return args.findLast((arg)=>arg !== undefined);\n}\nfunction $c5a0b96abcd6dbcd$export$61fc7d43ac8f84b0(func, delay = 500) {\n let timeout;\n return (...args)=>{\n clearTimeout(timeout);\n timeout = setTimeout(()=>{\n func(...args);\n }, delay);\n };\n}\nfunction $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a(x, y) {\n return typeof x === \"object\" && typeof y === \"object\" ? Object.keys(x).length === Object.keys(y).length && Object.keys(x).every((key)=>{\n const xv = x[key];\n const yv = y[key];\n return Object.hasOwn(y, key) && (typeof xv?.equals === \"function\" ? xv.equals(yv) : $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a(xv, yv));\n }) : x === y;\n}\nfunction $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1(event, detail = null) {\n document.dispatchEvent(new CustomEvent(event, {\n detail: detail\n }));\n}\nfunction $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07(pointA, pointB, maxDiff = 0) {\n return pointA && pointB && pointA.round().subtract(pointB.round()).length <= maxDiff;\n}\nfunction $c5a0b96abcd6dbcd$export$836ff99bad0a09da(triangle) {\n const segments = triangle.segments;\n const vertex = segments[0].point;\n const opposite = segments[1].point.subtract(segments[1].point.subtract(segments[2].point).divide(2));\n return vertex.add(opposite.subtract(vertex).multiply(2 / 3));\n}\nfunction $c5a0b96abcd6dbcd$export$3cb91a81090b9eee(color) {\n const span = document.createElement(\"span\");\n span.classList.add(\"beam\");\n span.style.backgroundColor = color;\n span.title = color;\n return span;\n}\nfunction $c5a0b96abcd6dbcd$export$6d3741128bd5bb7d(colors) {\n if (!colors.length) return [];\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(colors).hex();\n const elements = [];\n if (colors.some((other)=>other !== color)) {\n const maxColorIndex = colors.length - 1;\n colors.forEach((color, index)=>{\n elements.push($c5a0b96abcd6dbcd$export$3cb91a81090b9eee(color));\n if (index < maxColorIndex) {\n const plus = document.createElement(\"span\");\n plus.classList.add(\"text\");\n plus.textContent = \"+\";\n elements.push(plus);\n }\n });\n const equals = document.createElement(\"span\");\n equals.classList.add(\"text\");\n equals.textContent = \"=\";\n elements.push(equals);\n }\n elements.push($c5a0b96abcd6dbcd$export$3cb91a81090b9eee(color));\n return elements;\n}\nfunction $c5a0b96abcd6dbcd$export$79376507b09a66f(point) {\n return (a, b)=>a.subtract(point).length - b.subtract(point).length;\n}\nfunction $c5a0b96abcd6dbcd$export$f6292fcace2a1886(name, title) {\n const span = document.createElement(\"span\");\n span.classList.add(\"icon\", \"material-symbols-outlined\");\n span.textContent = name;\n span.title = title ?? $c5a0b96abcd6dbcd$export$9a00dee1beb8f576(name);\n return span;\n}\nfunction $c5a0b96abcd6dbcd$export$78da85ac75754159(pointA, pointB, length = (length)=>length / 2) {\n const vector = pointA.subtract(pointB);\n vector.length = typeof length === \"function\" ? length(vector.length) : length;\n return pointA.subtract(vector);\n}\nfunction $c5a0b96abcd6dbcd$export$bd58da2e19cd17da(point, length, direction) {\n const vector = new (0, $hFpCu.Point)(0, 0);\n vector.length = length;\n vector.angle = $c5a0b96abcd6dbcd$export$c43d7a950587702b(direction) * 60;\n return point.add(vector);\n}\nfunction $c5a0b96abcd6dbcd$export$35d6177dfa7903b5(direction) {\n return direction + (direction >= 3 ? -3 : 3);\n}\nfunction $c5a0b96abcd6dbcd$export$c43d7a950587702b(direction, toPaperJs = true) {\n direction = direction + (toPaperJs ? -1 : 1) * 2;\n if (direction < 0) return direction + 6;\n else if (direction > 5) return direction - 6;\n return direction;\n}\nfunction $c5a0b96abcd6dbcd$export$1690e12b840569b9(line, point) {\n const [a, b] = line;\n const c = point;\n return Math.sign((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));\n}\nfunction $c5a0b96abcd6dbcd$export$17a5d53cd2e4de6c(beamDirection, reflectorDirection) {\n // Have to convert to PaperJS directions on the way in\n const beamAngle = $c5a0b96abcd6dbcd$export$c43d7a950587702b(beamDirection, true) * 60;\n const reflectorAngle = reflectorDirection * 30;\n const reflectedBeamAngle = (reflectorAngle - beamAngle) * 2;\n // And convert back to our normal directions on the way out\n return $c5a0b96abcd6dbcd$export$c43d7a950587702b($c5a0b96abcd6dbcd$export$1a23559e655dacdd(beamAngle, reflectedBeamAngle) / 60 % 6, false);\n}\nfunction $c5a0b96abcd6dbcd$export$43941667eccc070(text) {\n const span = document.createElement(\"span\");\n span.classList.add(\"text\");\n span.textContent = text.toString();\n return span;\n}\nfunction $c5a0b96abcd6dbcd$export$8793edee2d425525(value) {\n if (value) return value;\n}\nfunction $c5a0b96abcd6dbcd$export$c2255604a80b4506(className, ...elements) {\n elements.forEach((element)=>element.classList.remove(className));\n}\nfunction $c5a0b96abcd6dbcd$export$abb49451cc8201c(direction, amount) {\n return $c5a0b96abcd6dbcd$export$bac4c4504d574f(direction, amount * -1);\n}\nfunction $c5a0b96abcd6dbcd$export$abf0e2545164275f(array, key) {\n const values = array.map((value)=>value[key]);\n return array.filter((value, index)=>!values.includes(value[key], index + 1));\n}\n\n\nconst $77e640c1aaab669f$var$console = window.console = window.console || {\n debug: function() {}\n};\nconst $77e640c1aaab669f$var$consoleDebug = $77e640c1aaab669f$var$console.debug;\nfunction $77e640c1aaab669f$export$1c9f709888824e05(debug) {\n $77e640c1aaab669f$var$console.debug = debug ? $77e640c1aaab669f$var$consoleDebug : function() {};\n}\n// Silence debug logging by default\n$77e640c1aaab669f$export$1c9f709888824e05((0, $c5a0b96abcd6dbcd$export$281ad3752a540efe).has(\"debug\") ?? false);\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nclass $1024ef6a63be0e18$export$2e382909194b1aab {\n constructor(r, c){\n this.coordinates = [\n r,\n c\n ];\n this.r = r;\n this.c = c;\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static toAxialCoordinates(offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2;\n return new (0, $3f2d62ea7d5da3d6$export$c56d3ccff2456440)(q, offset.r);\n }\n}\n\n\nclass $3f2d62ea7d5da3d6$export$c56d3ccff2456440 {\n constructor(q, r, s){\n if (!s) s = -q - r;\n this.coordinates = [\n q,\n r,\n s\n ];\n this.q = q;\n this.r = r;\n this.s = s;\n }\n add(other) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.add(this, other);\n }\n equals(other) {\n return this.q === other.q && this.r === other.r && this.s === other.s;\n }\n isNeighbor(other) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.isNeighbor(this, other);\n }\n neighbor(direction) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.neighbor(this, direction);\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static add(a, b) {\n return new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(a.q + b.q, a.r + b.r);\n }\n static direction(direction) {\n if (direction === 0) direction = 6;\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.directions[6 - direction];\n }\n static directions = [\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(1, 0),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(1, -1),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(0, -1),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(-1, 0),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(-1, 1),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(0, 1)\n ];\n static isNeighbor(a, b) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.directions.map((direction)=>$3f2d62ea7d5da3d6$export$c56d3ccff2456440.add(a, direction)).some((neighbor)=>neighbor.equals(b));\n }\n static neighbor(start, direction) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.add(start, $3f2d62ea7d5da3d6$export$c56d3ccff2456440.direction(direction));\n }\n static toOffsetCoordinates(axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2;\n return new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(c, axial.r);\n }\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nclass $92f12ea2067f7a87$export$654f18991713c8c4 {\n #state = {};\n constructor(state){\n this.setState(state);\n }\n getState() {\n return structuredClone(this.#state);\n }\n setState(state) {\n this.#state = structuredClone(state);\n }\n updateState(updater, dispatchEvent = true) {\n updater(this.#state);\n if (dispatchEvent) (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($92f12ea2067f7a87$export$654f18991713c8c4.Events.Update, {\n object: this\n });\n return this.getState();\n }\n static Events = Object.freeze({\n Update: \"state-update\"\n });\n}\n\n\nclass $7f0d958f0726b89e$export$6d08773d2e66f8f2 extends (0, $92f12ea2067f7a87$export$654f18991713c8c4) {\n center;\n data;\n group;\n id = $7f0d958f0726b89e$export$6d08773d2e66f8f2.uniqueId++;\n // Whether the item can be clicked on\n locked;\n parent;\n sortOrder = 100;\n type;\n constructor(parent, state, configuration){\n super(state);\n this.type = state?.type || configuration?.type;\n this.data = Object.assign({\n id: this.id,\n type: this.type\n }, configuration?.data || {});\n this.locked = configuration?.locked !== false;\n if (parent) this.center = parent.center;\n this.parent = parent;\n this.group = new (0, $hFpCu.Group)({\n data: this.data,\n locked: this.locked\n });\n }\n equals(otherItem) {\n return otherItem instanceof $7f0d958f0726b89e$export$6d08773d2e66f8f2 && this.id === otherItem.id;\n }\n getColorElements() {\n return [];\n }\n getCompoundPath() {\n return new (0, $hFpCu.CompoundPath)({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({\n insert: false\n }).children.filter((child)=>child.data.collidable !== false)\n });\n }\n getIndex() {\n return this.group.index;\n }\n getLayer() {\n return this.group.parent;\n }\n onTap() {}\n onCollision({ collisionStep: collisionStep }) {\n return collisionStep;\n }\n onDeselected() {}\n onInitialization() {}\n onSelected() {}\n remove() {\n this.group.remove();\n }\n toString() {\n return `[${this.type}:${this.id}]`;\n }\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"beam\",\n \"collision\",\n \"filter\",\n \"mask\",\n \"portal\",\n \"reflector\",\n \"terminus\",\n \"tile\",\n \"wall\"\n ].map((type)=>[\n type,\n (0, $c5a0b96abcd6dbcd$export$9a00dee1beb8f576)(type)\n ])));\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0;\n}\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\nclass $7cd91973a7925acd$export$b20b719ec758a20f {\n #events = [];\n #options = {\n element: document\n };\n constructor(options = {}){\n this.#options = Object.assign(this.#options, options);\n }\n add(events, options = {}) {\n this.#events = this.#events.concat(events.map((event)=>{\n event = Object.assign({}, this.#options, options, event);\n if (!event.type) throw new Error(\"Event type is required\");\n if (event.context) event.handler = event.handler.bind(event.context);\n event.element.addEventListener(event.type, event.handler, event.options);\n return event;\n }));\n }\n remove() {\n this.#events.forEach((event)=>event.element.removeEventListener(event.type, event.handler));\n this.#events = [];\n }\n}\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nclass $40d8a77a984c51a9$export$94affb487e701bf2 {\n #cache = {};\n #hasKeys;\n #keys;\n constructor(keys = []){\n this.#keys = keys;\n this.#hasKeys = keys.length !== 0;\n keys.forEach((key)=>{\n this.#cache[key] = new $40d8a77a984c51a9$export$94affb487e701bf2();\n });\n }\n set(key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) throw new Error(`Invalid key: ${key}`);\n this.#cache[key] = item;\n }\n get(key) {\n return key === undefined ? this.#cache : this.#cache[key];\n }\n keys(key) {\n return Object.keys(this.#get(key));\n }\n length(key) {\n return this.keys(key).length;\n }\n unset(key) {\n delete this.#cache[key];\n }\n values(key) {\n return Object.values(this.#get(key));\n }\n #get(key) {\n const value = this.get(key);\n return value instanceof $40d8a77a984c51a9$export$94affb487e701bf2 ? value.get() : value;\n }\n}\n\n\n\nclass $b8e3951689bc8f9e$export$b0d759d807f751d4 {\n #bounds;\n #cache = new (0, $40d8a77a984c51a9$export$94affb487e701bf2)(Object.values($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys));\n #element;\n #eventListener = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #offset;\n constructor(element){\n this.#bounds = element.getBoundingClientRect();\n this.#element = element;\n this.#offset = new (0, $hFpCu.Point)(this.#bounds.left, this.#bounds.top);\n this.#eventListener.add([\n {\n type: \"pointercancel\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointermove\",\n handler: this.onPointerMove\n },\n {\n type: \"pointerout\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n },\n {\n type: \"wheel\",\n handler: this.onMouseWheel,\n options: {\n passive: false\n }\n }\n ], {\n element: element\n });\n }\n onMouseWheel(event) {\n event.preventDefault();\n this.#zoom(new (0, $hFpCu.Point)(event.offsetX, event.offsetY), event.deltaY, 1.05);\n }\n onPan(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewToProject($b8e3951689bc8f9e$export$b0d759d807f751d4.point(event));\n const pan = this.#getGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pan);\n if (!pan) {\n this.#setGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pan, {\n from: point\n });\n return;\n }\n const center = pan.from.subtract(point).add((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center);\n // Allow a little wiggle room to prevent panning on tap\n if ((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains(\"grab\")) document.body.classList.add(\"grab\");\n // Center on the cursor\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center = center;\n }\n }\n onPinch(events) {\n const pointer0 = events[0];\n const pointer1 = events[1];\n const point0 = $b8e3951689bc8f9e$export$b0d759d807f751d4.point(pointer0);\n const point1 = $b8e3951689bc8f9e$export$b0d759d807f751d4.point(pointer1);\n const distance = point0.getDistance(point1);\n const pinch = this.#getGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pinch);\n if (!pinch) {\n this.#setGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pinch, {\n distance: distance\n });\n return;\n }\n const center = point0.add(point1).divide(2).subtract(this.#offset);\n const scale = distance / pinch.distance;\n const delta = (pinch.distance - distance) * scale;\n this.#zoom(center, delta, 1.01);\n pinch.distance = distance;\n }\n onPointerDown(event) {\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).set(event.pointerId, event);\n }\n onPointerMove(event) {\n const down = this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) // Ignore events until there is a pointer down event\n return;\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = $b8e3951689bc8f9e$export$b0d759d807f751d4.point(event).subtract($b8e3951689bc8f9e$export$b0d759d807f751d4.point(down)).length;\n if (diff > 1) {\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).set(event.pointerId, event);\n const events = this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).values();\n if (events.length === 2) this.onPinch(events);\n else this.onPan(event);\n }\n }\n onPointerUp(event) {\n const down = this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) return;\n if (this.#cache.length($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down) === 1 && !this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).get(event.pointerId)) this.onTap(down);\n document.body.classList.remove(\"grab\");\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).unset(event.pointerId);\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).unset(event.pointerId);\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).unset($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pan);\n if (this.#cache.length($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move) < 2) this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).unset($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pinch);\n }\n onTap(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewToProject($b8e3951689bc8f9e$export$b0d759d807f751d4.point(event).subtract(this.#offset));\n this.#element.dispatchEvent(new CustomEvent($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Tap, {\n detail: {\n event: event,\n point: point\n }\n }));\n }\n #getGesture(key) {\n return this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).get(key);\n }\n #setGesture(key, value) {\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).set(key, value);\n }\n #zoom(point, delta, factor) {\n const zoom = Math.max(Math.min(delta < 0 ? (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom * factor : (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom / factor, $b8e3951689bc8f9e$export$b0d759d807f751d4.maxZoom), $b8e3951689bc8f9e$export$b0d759d807f751d4.minZoom);\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewToProject(point);\n const touchOffset = touchPoint.subtract((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center);\n // Adjust center towards cursor location\n const zoomOffset = touchPoint.subtract(touchOffset.multiply((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom / zoom)).subtract((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center);\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom = zoom;\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center.add(zoomOffset);\n }\n static point(event) {\n return new (0, $hFpCu.Point)(event.clientX, event.clientY);\n }\n static CacheKeys = Object.freeze({\n Down: \"down\",\n Move: \"move\",\n Gesture: \"gesture\"\n });\n static GestureKeys = Object.freeze({\n Pan: \"pan\",\n Pinch: \"pinch\",\n Tap: \"tap\"\n });\n static maxZoom = 2;\n static minZoom = 0.5;\n static vibratePattern = 25;\n}\n\n\nconst $1f24870028eeabcc$var$modifiersImmutable = document.getElementById(\"modifiers-immutable\");\nconst $1f24870028eeabcc$var$modifiersMutable = document.getElementById(\"modifiers-mutable\");\nconst $1f24870028eeabcc$var$navigator = window.navigator;\nlet $1f24870028eeabcc$var$uniqueId = 0;\nclass $1f24870028eeabcc$export$5acd5e6efc9671b7 extends (0, $92f12ea2067f7a87$export$654f18991713c8c4) {\n #container;\n #down = false;\n #eventListener = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #mask;\n #selectionTime = 500;\n #timeoutId;\n configuration;\n element;\n disabled = false;\n id = $1f24870028eeabcc$var$uniqueId++;\n immutable = false;\n name;\n selected = false;\n tile;\n title;\n type;\n constructor(tile, state){\n super(state);\n this.tile = tile;\n this.type = state.type;\n }\n /**\n * Attach the modifier to the DOM and add listeners.\n */ attach() {\n const li = this.#container = document.createElement(\"li\");\n li.classList.add([\n \"modifier\",\n this.type.toLowerCase()\n ].join(\"-\"));\n if (this.immutable) this.disabled = true;\n const span = this.element = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\", \"fill\");\n li.append(span);\n this.update();\n this.#eventListener.add([\n {\n type: \"deselected\",\n handler: this.onDeselected\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n }\n ], {\n element: li\n });\n this.immutable ? $1f24870028eeabcc$var$modifiersImmutable.append(li) : $1f24870028eeabcc$var$modifiersMutable.append(li);\n }\n /**\n * Remove listeners and the modifier from the DOM.\n */ detach() {\n if (!this.#container) return;\n $1f24870028eeabcc$export$5acd5e6efc9671b7.deselect();\n this.#eventListener.remove();\n this.#container.remove();\n this.selected = false;\n this.element = undefined;\n this.#container = undefined;\n }\n dispatchEvent(event, detail) {\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)(event, Object.assign({}, detail || {}, {\n modifier: this,\n tile: this.tile\n }));\n }\n equals(other) {\n return other instanceof $1f24870028eeabcc$export$5acd5e6efc9671b7 && this.id === other.id;\n }\n move(tile) {\n this.remove();\n tile.addModifier(this);\n this.tile = tile;\n }\n moveFilter(tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier)=>modifier.type === $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.immutable);\n }\n onDeselected() {\n this.update({\n selected: false\n });\n this.tile.afterModify();\n this.dispatchEvent($1f24870028eeabcc$export$5acd5e6efc9671b7.Events.Deselected);\n }\n onPointerDown(event) {\n if (event.button !== 0) // Support toggle on non-primary pointer button\n this.onToggle(event);\n else {\n this.#down = true;\n if (!this.#mask && !this.tile.modifiers.some((modifier)=>[\n $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.immutable,\n $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.lock\n ].includes(modifier.type))) this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime);\n }\n }\n onPointerUp(event) {\n clearTimeout(this.#timeoutId);\n if (this.#down && !this.disabled && !this.selected) switch(event.type){\n case \"pointerleave\":\n // Support swiping up on pointer device\n this.onToggle(event);\n break;\n case \"pointerup\":\n this.onTap(event);\n break;\n }\n this.#down = false;\n }\n onSelected() {\n $1f24870028eeabcc$export$5acd5e6efc9671b7.deselect();\n $1f24870028eeabcc$var$navigator.vibrate((0, $b8e3951689bc8f9e$export$b0d759d807f751d4).vibratePattern);\n this.update({\n selected: true\n });\n const mask = this.#mask = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onMask: ()=>this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n });\n this.dispatchEvent((0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n onTap() {\n this.selected = false;\n }\n onToggle() {\n $1f24870028eeabcc$var$navigator.vibrate((0, $b8e3951689bc8f9e$export$b0d759d807f751d4).vibratePattern);\n }\n remove() {\n this.detach();\n this.tile.removeModifier(this);\n this.tile = null;\n }\n toString() {\n return [\n this.name,\n this.id\n ].join(\":\");\n }\n update(options) {\n options = Object.assign({\n disabled: this.disabled,\n selected: this.selected,\n name: this.name,\n title: this.title\n }, options || {});\n if (!this.immutable) this.disabled = options.disabled;\n this.name = options.name;\n this.title = options.title;\n this.selected = options.selected;\n if (this.#container) {\n this.#container.classList.toggle(\"disabled\", this.disabled);\n this.#container.classList.toggle(\"selected\", this.selected);\n this.element.textContent = this.name;\n this.element.title = this.title;\n }\n }\n #maskOnTap(puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile;\n this.move(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent($1f24870028eeabcc$export$5acd5e6efc9671b7.Events.Moved, {\n fromTile: fromTile\n });\n } else {\n $1f24870028eeabcc$export$5acd5e6efc9671b7.deselect();\n puzzle.unmask();\n }\n this.#mask = undefined;\n this.update({\n selected: false\n });\n }\n #moveFilter(tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile);\n }\n static deselect() {\n const selectedModifier = document.querySelector(\".modifiers .selected\");\n if (selectedModifier) selectedModifier.dispatchEvent(new CustomEvent(\"deselected\"));\n }\n static immutable(modifier) {\n return modifier.type === $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.immutable;\n }\n static Events = Object.freeze({\n Deselected: \"modifier-deselected\",\n Invoked: \"modifier-invoked\",\n Moved: \"modifier-moved\"\n });\n static Types = Object.freeze(Object.fromEntries([\n \"immutable\",\n \"lock\",\n \"move\",\n \"rotate\",\n \"swap\",\n \"toggle\"\n ].map((type)=>[\n type,\n (0, $c5a0b96abcd6dbcd$export$9a00dee1beb8f576)(type)\n ])));\n}\n\n\n\n\n\nclass $f00c5e8e3b24f55c$export$e49a5ad3dd6df925 extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n #mask;\n name = \"drag_pan\";\n title = \"Move\";\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter($f00c5e8e3b24f55c$export$e49a5ad3dd6df925.movable);\n if (this.#mask || !items.length) return;\n const mask = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: ()=>this.tile.beforeModify(),\n onUnmask: ()=>this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n });\n this.#mask = mask;\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)((0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n moveFilter(tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.movable);\n }\n moveItems(tile) {\n const items = this.tile.items.filter($f00c5e8e3b24f55c$export$e49a5ad3dd6df925.movable);\n items.forEach((item)=>item.move(tile));\n return {\n moved: [\n $f00c5e8e3b24f55c$export$e49a5ad3dd6df925.data(this.tile, tile, items)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).immutable) || tile.items.filter((item)=>item.type !== (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam).length > 0 && !(tile === this.tile);\n }\n #maskOnTap(puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked, data);\n } else puzzle.unmask();\n this.#mask = undefined;\n }\n static data(fromTile, toTile, items) {\n return {\n fromTile: fromTile,\n toTile: toTile,\n items: items\n };\n }\n static movable(item) {\n return item.movable;\n }\n}\nconst $f00c5e8e3b24f55c$export$1288a4f7eae890b0 = (SuperClass)=>class MovableItem extends SuperClass {\n movable;\n constructor(parent, configuration){\n super(...arguments);\n this.movable = configuration.movable !== false;\n }\n move(tile) {\n this.parent.removeItem(this);\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center);\n this.group.position = this.group.position.subtract(vector);\n // Update tile reference\n this.parent = tile;\n this.parent.addItem(this);\n this.center = this.parent.center;\n this.onMove();\n }\n onMove() {}\n };\n\n\n\n\n\nclass $268becbe2ffcc8a3$export$fd55ce593607084a {\n color;\n colors;\n connected;\n direction;\n done;\n insertAbove;\n onAdd;\n onRemove;\n point;\n pathIndex;\n segmentIndex;\n state;\n tile;\n constructor(index, tile, colors, direction, point, pathIndex, segmentIndex, connected, insertAbove, done, state, onAdd, onRemove){\n if (state && !(state instanceof $268becbe2ffcc8a3$export$81262d6ca0162a3)) throw new Error(\"Step.state must be instance of StepState\");\n this.colors = colors ? Array.isArray(colors) ? Array.from(colors) : [\n colors\n ] : [];\n if (this.colors.length) this.color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(this.colors).hex();\n this.connected = connected ?? true;\n this.direction = direction;\n this.done = done ?? false;\n this.index = index;\n this.insertAbove = insertAbove;\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.onRemove = onRemove ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.point = point;\n this.pathIndex = pathIndex;\n this.segmentIndex = segmentIndex;\n this.state = state ?? new $268becbe2ffcc8a3$export$81262d6ca0162a3();\n this.tile = tile;\n }\n copy(settings) {\n return new $268becbe2ffcc8a3$export$fd55ce593607084a(settings.index ?? this.index, settings.tile ?? this.tile, settings.colors ?? settings.color ?? this.colors, settings.direction ?? this.direction, settings.point ?? this.point, settings.pathIndex ?? this.pathIndex, settings.segmentIndex ?? this.segmentIndex, settings.connected ?? this.connected, settings.insertAbove ?? this.insertAbove, settings.done ?? this.done, settings.state ?? new $268becbe2ffcc8a3$export$81262d6ca0162a3(this.state), settings.onAdd ?? this.onAdd, settings.onRemove ?? this.onRemove);\n }\n equals(step) {\n return (0, $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a)(this, step);\n }\n}\nclass $268becbe2ffcc8a3$export$81262d6ca0162a3 {\n #cache = {};\n constructor(){\n const settings = Object.assign({}, ...arguments);\n Object.keys(settings).forEach((key)=>{\n this[key] = settings[key];\n });\n }\n copy(...settings) {\n return new $268becbe2ffcc8a3$export$81262d6ca0162a3(...[\n this\n ].concat(settings));\n }\n get(Class) {\n return this.#keys(Class).map((key)=>this[key]).find((value)=>value);\n }\n has(Class) {\n return this.#keys(Class).some((key)=>this[key]);\n }\n #keys(Class) {\n return this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, []));\n }\n static Collision = class StepCollision {\n collision;\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor(collision){\n this.collision = collision;\n }\n };\n static Filter = class StepFilter {\n filter = {};\n };\n static MergeInto = class StepMergeInto {\n mergeInto;\n constructor(beam){\n this.mergeInto = {\n beam: beam\n };\n }\n };\n static MergeWith = class StepMergeWith {\n mergeWith;\n constructor(mergeWith){\n this.mergeWith = mergeWith;\n }\n };\n static Portal = class StepPortal {\n portal;\n constructor(entryPortal, exitPortal){\n this.portal = {\n entryPortal: entryPortal,\n exitPortal: exitPortal\n };\n }\n };\n static Reflector = class StepReflector {\n reflector;\n constructor(item){\n this.reflector = {\n item: item\n };\n }\n };\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection;\n constructor(terminus, opening){\n this.terminusConnection = {\n terminus: terminus,\n opening: opening\n };\n }\n };\n}\n\n\nclass $903d7b3eecd4d3a8$export$ec91da630f36d5ea extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2)) {\n constructor(tile, { color: color }){\n super(...arguments);\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(Array.isArray(color) ? color : [\n color\n ]).hex();\n const fillColor = new (0, $hFpCu.Color)(color);\n fillColor.alpha = 0.25;\n // TODO: update to something else? prism?\n const item = new (0, $hFpCu.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor: fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n getColorElements() {\n return [\n (0, $c5a0b96abcd6dbcd$export$3cb91a81090b9eee)(this.color)\n ];\n }\n onCollision({ currentStep: currentStep, nextStep: nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(currentStep.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Filter) ? {\n colors: nextStep.colors.concat([\n this.color\n ])\n } : {\n state: new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3)({\n insertAbove: this\n }, new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Filter())\n });\n }\n}\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\nclass $f48c890393349af7$export$152db69a76b6b79e extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n clockwise;\n title = \"Rotate\";\n constructor(tile, state, configuration = {}){\n super(...arguments);\n this.clockwise = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(true, state.clockwise, configuration.clockwise);\n this.name = $f48c890393349af7$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"];\n }\n moveFilter(tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.rotatable);\n }\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter((item)=>item.rotatable);\n items.forEach((item)=>item.rotate(this.clockwise));\n this.dispatchEvent((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n onToggle() {\n super.onToggle();\n this.clockwise = !this.clockwise;\n this.updateState((state)=>{\n state.clockwise = this.clockwise;\n });\n this.update({\n name: $f48c890393349af7$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"]\n });\n }\n static Names = Object.freeze({\n left: \"rotate_left\",\n right: \"rotate_right \"\n });\n}\nconst $f48c890393349af7$export$781de49a9284d537 = (SuperClass)=>class RotatableItem extends SuperClass {\n direction;\n rotatable;\n rotation = 0;\n rotationDegrees;\n constructor(parent, state, configuration = {}){\n super(...arguments);\n this.direction = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(state.direction, configuration.direction);\n this.rotatable = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(true, state.rotatable, configuration.rotatable);\n this.rotationDegrees = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(60, state.rotationDegrees, configuration.rotationDegrees);\n this.rotation = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(0, state.rotation, configuration.rotation) % this.getMaxRotation();\n }\n // Get the direction of an item with rotation factored in\n getDirection(direction) {\n direction = direction ?? this.direction;\n return direction === undefined ? direction : (0, $c5a0b96abcd6dbcd$export$bac4c4504d574f)(direction, this.rotation);\n }\n getMaxRotation() {\n return 360 / this.rotationDegrees;\n }\n onInitialization() {\n super.onInitialization();\n this.rotateGroup(this.rotation);\n if (this.direction !== undefined) // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction);\n }\n rotateGroup(rotation) {\n if (this.rotatable) this.group.rotate(rotation * this.rotationDegrees, this.center);\n }\n rotate(clockwise) {\n const rotation = clockwise === false ? -1 : 1;\n this.rotation = (rotation + this.rotation) % this.getMaxRotation();\n this.updateState((state)=>{\n state.rotation = this.rotation;\n });\n this.rotateGroup(rotation);\n }\n };\n\n\n\n\n\nclass $d430de8cd820c3cd$export$602eac185826482c extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2))) {\n #directions = {};\n constructor(tile, state){\n // Only allow rotation if direction is defined\n super(tile, state, {\n rotatable: state.direction !== undefined\n });\n this.direction = state.direction;\n const height = tile.parameters.circumradius / 3;\n const width = tile.parameters.circumradius / 5;\n const style = {\n fillColor: \"black\",\n strokeColor: \"white\",\n strokeWidth: 2\n };\n const children = [];\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new (0, $hFpCu.Path).Ellipse({\n center: tile.center,\n radius: [\n width,\n height\n ],\n style: style\n });\n children.push(ellipse);\n const ring = new (0, $hFpCu.Path).Ellipse({\n center: tile.center,\n radius: [\n width - style.strokeWidth * 2,\n height - style.strokeWidth * 2\n ],\n style: style\n });\n children.push(ring);\n if (this.rotatable) {\n const pointer = new (0, $hFpCu.Path)({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new (0, $hFpCu.Point)(0, height)),\n tile.center.subtract(new (0, $hFpCu.Point)(0, height)),\n tile.center.subtract(new (0, $hFpCu.Point)(width * 2.5, 0))\n ],\n style: {\n fillColor: \"black\"\n }\n }).subtract(ellipse);\n children.unshift(pointer);\n }\n this.group.addChildren(children);\n if (this.rotatable) // Properly align items with hexagonal rotation\n this.rotateGroup(1);\n }\n get(direction) {\n return this.#directions[direction];\n }\n onCollision({ beam: beam, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const portalState = currentStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal);\n if (!portalState) {\n const stepIndex = nextStep.index;\n const entryDirection = (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(nextStep.direction);\n const existing = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(this.get(entryDirection), {\n stepIndex: stepIndex\n });\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(this.toString(), \"ignoring beam trying to enter through a direction which is already occupied:\", entryDirection);\n return;\n }\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: ()=>this.update(entryDirection, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>this.update(entryDirection),\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal(this))\n });\n } else if (portalState.exitPortal === this) // Handle exit collision\n return nextStep.copy({\n insertAbove: this\n });\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [\n this.id,\n nextStep.index\n ].join(\":\");\n const destinationId = beam.getState().moves?.[stateId];\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item)=>item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.portal && !item.equals(this) && // Portal must not already have a beam occupying the desired direction\n !item.get($d430de8cd820c3cd$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, item)) && (destinationId === undefined || item.id === destinationId) && // Entry portals without defined direction can exit from any other portal.\n (this.getDirection() === undefined || // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined || // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()));\n if (destinations.length === 0) {\n console.debug(this.toString(), \"no valid destinations found\");\n // This will cause the beam to stop\n return currentStep;\n }\n if (destinations.length === 1) // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState);\n else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal)=>portal.parent);\n const mask = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Mask({\n beam: beam,\n id: stateId,\n onMask: ()=>currentStep.tile.beforeModify(),\n onTap: (puzzle, tile)=>{\n const destination = destinations.find((portal)=>portal.parent === tile);\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState));\n beam.updateState((state)=>{\n if (!state.moves) state.moves = {};\n // Store this decision in beam state\n state.moves[stateId] = destination.id;\n });\n puzzle.unmask();\n }\n },\n onUnmask: ()=>currentStep.tile.afterModify(),\n tileFilter: (tile)=>{\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile)=>destinationTile === tile));\n }\n });\n puzzle.updateSelectedTile(currentStep.tile);\n puzzle.mask(mask);\n // This will cause the beam to stop\n return currentStep;\n }\n }\n update(direction, data) {\n this.#directions[direction] = data;\n }\n #getStep(beam, portal, nextStep, portalState) {\n const direction = $d430de8cd820c3cd$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, portal);\n const stepIndex = nextStep.index;\n return nextStep.copy({\n connected: false,\n direction: direction,\n insertAbove: portal,\n onAdd: ()=>portal.update(direction, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n });\n }\n static getExitDirection(step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction;\n }\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nclass $6756284c9622095f$export$bea8ebba691c5813 extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n on;\n title = \"Toggle\";\n constructor(tile, { on: on }){\n super(...arguments);\n this.on = on || false;\n this.tile.items.forEach((item)=>{\n item.toggled = this.on;\n });\n }\n attach() {\n this.name = $6756284c9622095f$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"];\n super.attach();\n }\n moveFilter(tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.toggleable);\n }\n onTap(event) {\n super.onTap(event);\n this.on = !this.on;\n const items = this.tile.items.filter((item)=>item.toggleable);\n items.forEach((item)=>item.toggle(this.on));\n this.update({\n name: $6756284c9622095f$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"]\n });\n this.dispatchEvent((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n static Names = Object.freeze({\n on: \"toggle_on\",\n off: \"toggle_off \"\n });\n}\nconst $6756284c9622095f$export$cdb1ce8c4b8a5afe = (SuperClass)=>class ToggleableItem extends SuperClass {\n toggleable;\n toggled;\n constructor(parent, configuration){\n super(...arguments);\n this.toggleable = configuration.toggleable !== false;\n }\n onToggle() {}\n toggle(toggled) {\n this.toggled = toggled;\n this.onToggle();\n }\n };\n\n\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\n\nclass $ff7d3b28e31d2a30$export$88c9f72b40fcdd85 {\n constructor(index, points, beam, item){\n const items = [\n beam\n ];\n if (item !== undefined) items.push(item);\n this.beam = beam;\n this.index = index;\n // The item that was collided with\n this.item = item;\n this.itemIds = items.map((item)=>item.id);\n this.items = items;\n // The first collision point\n this.point = points[0];\n this.points = points;\n // Check if the collision is with self\n this.withSelf = beam.equals(item);\n }\n copy(settings) {\n return new $ff7d3b28e31d2a30$export$88c9f72b40fcdd85(settings.index ?? this.index, settings.points ?? this.points, settings.beam ?? this.beam, settings.item ?? this.item);\n }\n equals(other) {\n return other && other.point.equals(this.point) && other.items.every((item)=>this.has(item));\n }\n has(item) {\n return this.itemIds.includes(item.id);\n }\n mirror() {\n return this.copy({\n beam: this.item,\n item: this.beam\n });\n }\n}\nclass $ff7d3b28e31d2a30$export$20aab196240bbdf2 {\n constructor(beam, step, stepIndex){\n this.beams = [\n beam\n ].concat(step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeWith)?.beams || []);\n this.colors = step.colors.concat(beam.getColors());\n this.stepIndex = stepIndex;\n }\n}\n\n\n\nclass $eb2b229f23b512af$export$693b33588b3dd9d8 extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n done = false;\n path = [];\n sortOrder = 3;\n #cache = new (0, $40d8a77a984c51a9$export$94affb487e701bf2)(Object.values($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys));\n #direction;\n #path;\n #stepIndex = -1;\n #steps = [];\n constructor(terminus, state, configuration){\n super(...arguments);\n this.group = null;\n this.#direction = configuration.direction;\n this.#path = {\n closed: false,\n data: {\n id: this.id,\n type: this.type\n },\n locked: true,\n strokeJoin: \"round\",\n strokeCap: \"round\",\n strokeWidth: terminus.radius / 12\n };\n }\n addStep(step) {\n const lastStepIndex = this.getLastStepIndex();\n // Can't be done if adding a new step\n this.done = false;\n this.#path.strokeColor = step.color;\n if (this.path.length === 0) {\n const path = new (0, $hFpCu.Path)(this.#path);\n this.path.push(path);\n this.getLayer().insertChild(0, path);\n }\n const currentPath = this.path[this.path.length - 1];\n const previousStep = this.#steps[lastStepIndex];\n // Handles cases that require adding a new path item\n if (!step.connected || previousStep && (step.color !== previousStep.color || step.insertAbove !== previousStep.insertAbove)) {\n console.debug(this.toString(), \"adding new path item for step:\", step, \"previous step:\", previousStep);\n const path = new (0, $hFpCu.Path)(this.#path);\n const points = [\n step.point\n ];\n // If the next step is connected, we will link it with the previous step\n if (step.connected) points.unshift(previousStep.point);\n path.add(...points);\n this.path.push(path);\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path);\n // Reset the segmentIndex\n step.segmentIndex = 0;\n } else {\n currentPath.add(step.point);\n step.segmentIndex = currentPath.segments.length - 1;\n }\n step.pathIndex = this.path.length - 1;\n this.#steps.push(step);\n step.index = this.#stepIndex = this.#steps.length - 1;\n if (!step.tile.items.some((item)=>item.equals(this))) // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this);\n step.onAdd(step);\n console.debug(this.toString(), \"added step\", step);\n this.#onUpdate(this.#stepIndex);\n return step;\n }\n getCollision() {\n return this.getStep()?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision);\n }\n getColor() {\n return this.getStep()?.color || this.getOpening().color;\n }\n getColors() {\n return Array.from(this.getStep()?.colors || this.getOpening().colors);\n }\n getColorElements(tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step)=>step.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeWith));\n return step ? (0, $c5a0b96abcd6dbcd$export$6d3741128bd5bb7d)(step.color) : [];\n }\n getCompoundPath() {\n return new (0, $hFpCu.CompoundPath)({\n children: this.path.map((item)=>item.clone({\n insert: false\n }))\n });\n }\n getIndex() {\n return this.path[this.path.length - 1].index;\n }\n getLastStepIndex() {\n return this.length() - 1;\n }\n getLayer() {\n return this.parent.getLayer();\n }\n getMergeWith(beam) {\n return this.#cache.get($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys.MergeWith).get(beam.id);\n }\n getOpening() {\n return this.parent.getOpening(this.#direction);\n }\n getState() {\n return this.parent.getState().openings[this.#direction];\n }\n getStep(stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()];\n }\n getSteps(tile) {\n return tile ? this.#steps.filter((step)=>step.tile === tile) : this.#steps;\n }\n isComplete() {\n return this.isOn() && this.done;\n }\n isConnected() {\n const step = this.getStep();\n return step?.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection) || // Consider beams which have merged into connected beams to also be connected\n step?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto)?.beam.isConnected();\n }\n isOn() {\n const opening = this.getOpening();\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected;\n }\n isPending() {\n return this.isOn() && !this.done;\n }\n length() {\n return this.#steps.length;\n }\n onBeamUpdated(event) {\n const beam = event.detail.beam;\n if (beam.isPending()) // Wait for beam to finish before evaluating\n return;\n const beamLastStep = beam.getStep();\n if (this.isComplete()) {\n const lastStep = this.getStep();\n // Check for invalid collisions\n const collision = lastStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision);\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision))) {\n console.debug(this.toString(), \"re-evaluating collision with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(lastStep.index - 1, 0);\n return;\n }\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto);\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), \"re-evaluating merge into\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0);\n return;\n }\n }\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam);\n if (mergeWith && !beamLastStep?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), \"re-evaluating merge with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0);\n }\n }\n onCollision({ beam: beam, collision: collision, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const isSelf = beam.equals(this);\n console.debug(this.toString(), \"evaluating collision with\", isSelf ? \"self\" : beam.toString());\n if (!beam.isOn()) {\n console.debug(this.toString(), \"ignoring collision with inactive beam\", beam.toString());\n return;\n }\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), \"ignoring collision with sibling beam\", beam.toString());\n return;\n }\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), \"ignoring collision with self while re-evaluating history\");\n return;\n }\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step)=>(0, $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07)(collision.point, step.point));\n if (stepIndex < 0) // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(`Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`);\n const step = this.#steps[stepIndex];\n if (step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), \"ignoring collision with merged beam\", beam.toString());\n return;\n }\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), \"ignoring collision with connected beam in parent terminus\", beam.toString());\n return;\n }\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector) ?? currentStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector);\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(step.point, 1, (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(step.direction));\n const nextStepPoint = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(currentStep.point, 1, (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(currentStep.direction));\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), \"ignoring collision with beam on opposite side of reflector\", beam.toString());\n return;\n }\n }\n const isSameDirection = step.direction === nextStep.direction;\n if (currentStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal)?.exitPortal && !isSameDirection) {\n console.debug(this.toString(), \"ignoring collision with beam using same portal with different exit direction\", beam.toString());\n return;\n }\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), \"has collided with\", isSelf ? \"self\" : this.toString(), collision);\n if (!isSelf) // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision.mirror()))\n });\n else if (!isSameDirection) // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay());\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n });\n }\n console.debug(this.toString(), \"merging with\", beam.toString());\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex);\n const mergeWith = new (0, $ff7d3b28e31d2a30$export$20aab196240bbdf2)(beam, step, stepIndex);\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: ()=>{\n this.#cache.get($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys.MergeWith).set(beam.id, mergeWith);\n },\n onRemove: ()=>{\n this.#cache.get($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys.MergeWith).unset(beam.id);\n },\n state: step.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeWith(mergeWith))\n }));\n console.debug(beam.toString(), \"merging into\", this.toString());\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto(this))\n });\n }\n onModifierInvoked(event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), \"beam has been toggled off\");\n // Also reset any state changes from user move decisions\n this.updateState((state)=>{\n delete state.moves;\n });\n this.remove();\n }\n return;\n }\n const tiles = event.detail.tiles || [\n event.detail.tile\n ];\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step)=>tiles.some((tile)=>tile.equals(step.tile)));\n if (stepIndex >= 0) {\n console.debug(this.toString(), \"re-evaluating due to modifier being invoked in matching tile\", stepIndex);\n // Re-evaluate beginning at the step before the matched one\n this.done = false;\n this.#stepIndex = Math.max(stepIndex - 1, 0);\n return;\n }\n if (this.isComplete()) {\n const lastStep = this.getStep();\n if (lastStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal)?.entryPortal) // Check for valid exit portal\n this.done = false;\n }\n }\n remove(stepIndex = 0) {\n this.#updateHistory(stepIndex);\n }\n selected(selected = true) {\n this.path.forEach((path)=>{\n path.selected = selected;\n });\n }\n startDirection() {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6;\n }\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */ step(puzzle) {\n if (!this.isPending()) return;\n console.debug(this.toString(), \"currentStepIndex\", this.#stepIndex);\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent;\n this.addStep(new (0, $268becbe2ffcc8a3$export$fd55ce593607084a)(0, tile, this.getColor(), this.startDirection(), tile.center));\n }\n const currentStepIndex = this.#stepIndex;\n const currentStep = this.#steps[currentStepIndex];\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction;\n const nextStepPoint = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(currentStep.point, currentStep.tile.parameters.inradius, direction);\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile((0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(currentStep.point, nextStepPoint));\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), \"stopping due to out of bounds\");\n const collision = new (0, $ff7d3b28e31d2a30$export$88c9f72b40fcdd85)(0, [\n currentStep.point\n ], this);\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3)(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision))\n });\n }\n const nextStepIndex = currentStepIndex + 1;\n const existingNextStep = this.#steps[nextStepIndex];\n const lastPathIndex = this.path.length - 1;\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1;\n let nextStep = new (0, $268becbe2ffcc8a3$export$fd55ce593607084a)(nextStepIndex, tile, currentStep.color, direction, nextStepPoint, existingNextStep?.pathIndex || lastPathIndex, existingNextStep?.segmentIndex || lastSegmentIndex);\n const items = (0, $c5a0b96abcd6dbcd$export$abf0e2545164275f)(tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items), \"id\");\n console.debug(this.toString(), \"collision items:\", items);\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle).map((collision, index)=>new (0, $ff7d3b28e31d2a30$export$88c9f72b40fcdd85)(index, collision.points, this, collision.item));\n if (collisions.length) console.debug(this.toString(), \"collisions:\", collisions);\n let collisionStep;\n for(let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++){\n const collision = collisions[collisionIndex];\n console.debug(this.toString(), \"resolving collision:\", collision);\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision))\n });\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision: collision,\n collisions: collisions,\n collisionStep: collisionStep,\n currentStep: currentStep,\n nextStep: nextStep,\n existingNextStep: existingNextStep,\n puzzle: puzzle\n });\n if (collisionStep instanceof (0, $268becbe2ffcc8a3$export$fd55ce593607084a)) break;\n }\n if (collisionStep) nextStep = collisionStep;\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++;\n const lastStepIndex = this.getLastStepIndex();\n console.debug(this.toString(), \"new step is same as existing. new step index:\", this.#stepIndex, \"last step index:\", lastStepIndex);\n if (this.#stepIndex === lastStepIndex) // To ensure we mark as done\n this.#onUpdate(this.#stepIndex);\n return existingNextStep;\n } else {\n console.debug(this.toString(), `is revising history at step index: ${nextStepIndex}`, \"existing step:\", existingNextStep, \"new step:\", nextStep);\n this.#updateHistory(nextStepIndex);\n }\n }\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), \"next step point is same as current step point, stopping.\", nextStep);\n return this.updateStep(currentStepIndex, nextStep.copy({\n done: true\n }));\n }\n return this.addStep(nextStep);\n }\n toString() {\n return `[${this.type}:${this.id}:${(0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports)))(this.getColor()).name()}]`;\n }\n update(stepIndex, settings = {}, timeout) {\n if (typeof settings === \"number\") {\n timeout = settings;\n settings = {};\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout);\n return timeout === undefined ? update() : setTimeout(update, timeout);\n }\n updateState(updater, dispatchEvent = true) {\n return this.parent.updateState((state)=>updater(state.openings[this.#direction]), dispatchEvent);\n }\n updateStep(stepIndex, settings) {\n const step = this.getStep(stepIndex);\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings);\n this.#steps[stepIndex] = updatedStep;\n updatedStep.onAdd(updatedStep);\n console.debug(this.toString(), \"updated step at index\", stepIndex, \"from\", step, \"to\", updatedStep);\n this.#onUpdate(stepIndex);\n return updatedStep;\n }\n }\n #getCollisions(items, currentStep, nextStep, puzzle) {\n const segments = [\n currentStep.point,\n nextStep.point\n ];\n const path = new (0, $hFpCu.Path)({\n segments: segments\n });\n const firstPoint = segments[0];\n return items.map((item)=>{\n const points = [];\n const intersections = path.getIntersections(item.getCompoundPath(), // Ignore first point from self which will always collide\n (curveLocation)=>!(item === this && curveLocation.point.equals(firstPoint)));\n points.push(...new Set(intersections.map((intersection)=>intersection.point)));\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam && item !== this) points.push(...item.getSteps().map((step)=>step.point).filter((point)=>segments.some((segment)=>(0, $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07)(point, segment))));\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort((0, $c5a0b96abcd6dbcd$export$79376507b09a66f)(firstPoint));\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint);\n points.forEach((point)=>puzzle.drawDebugPoint(point, {\n fillColor: \"black\"\n }));\n }\n return {\n points: points,\n item: item\n };\n }).filter((result)=>result.points.length).sort((a, b)=>{\n // Sort items returned by proximity to starting point\n const distance = (0, $c5a0b96abcd6dbcd$export$79376507b09a66f)(firstPoint)(a.points[0], b.points[0]);\n if (distance === 0) // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder;\n return distance;\n });\n }\n #getItemIndex(step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0;\n }\n #getUpdatedStep(step, settings) {\n if (typeof settings === \"function\") settings = settings(step);\n return settings instanceof (0, $268becbe2ffcc8a3$export$fd55ce593607084a) ? settings : step.copy(settings);\n }\n #update(stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex);\n this.addStep(this.#getUpdatedStep(step, settings));\n } else this.updateStep(stepIndex, settings);\n }\n #onUpdate(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n stepIndex ??= lastStepIndex;\n const step = this.getStep(stepIndex);\n if (stepIndex === lastStepIndex) // Update beam status if last step was updated\n this.done = step?.done ?? false;\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($eb2b229f23b512af$export$693b33588b3dd9d8.Events.Update, {\n beam: this,\n state: step?.state,\n step: step,\n stepIndex: stepIndex\n });\n }\n #updateHistory(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n const step = this.#steps[stepIndex];\n console.debug(this.toString(), \"updateHistory\", \"stepIndex:\", stepIndex, \"lastStepIndex:\", lastStepIndex, \"step:\", step);\n if (step) {\n const currentPath = this.path[step.pathIndex];\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex);\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1);\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item)=>item.remove());\n const deletedSteps = this.#steps.splice(stepIndex);\n console.debug(this.toString(), \"removed steps: \", deletedSteps);\n const tiles = [\n ...new Set(deletedSteps.map((step)=>step.tile))\n ];\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile)=>this.getSteps(tile).length === 0).forEach((tile)=>tile.removeItem(this));\n deletedSteps.forEach((step)=>step.onRemove(step));\n this.done = false;\n this.#stepIndex = stepIndex - 1;\n this.#onUpdate(this.#stepIndex);\n }\n return step;\n }\n static CacheKeys = Object.freeze({\n MergeWith: \"mergeWith\"\n });\n static Events = Object.freeze({\n Collision: \"beam-collision\",\n Connection: \"beam-connection\",\n Merge: \"beam-merge\",\n Update: \"beam-update\"\n });\n}\n\n\n\n\nclass $d8b66316ed43c40f$export$3ad31a823e05e6fb extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $6756284c9622095f$export$cdb1ce8c4b8a5afe)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2)))) {\n sortOrder = 2;\n #ui;\n constructor(tile, state){\n super(...arguments);\n const colors = state.openings.filter((opening)=>opening?.color).flatMap((opening)=>Array.isArray(opening.color) ? opening.color : [\n opening.color\n ]);\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(colors.length ? colors : Array.isArray(state.color) ? state.color : [\n state.color\n ]).hex();\n const openings = state.openings.map((state, direction)=>state ? new $d8b66316ed43c40f$export$3ad31a823e05e6fb.#Opening(state.color || color, direction, state.connected, state.on) : state).filter((opening)=>opening);\n this.#ui = $d8b66316ed43c40f$export$3ad31a823e05e6fb.ui(tile, color, openings);\n this.group.addChildren([\n ...this.#ui.openings,\n this.#ui.terminus\n ]);\n this.color = color;\n this.openings = openings;\n this.radius = this.#ui.radius;\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening)=>new (0, $eb2b229f23b512af$export$693b33588b3dd9d8)(this, state.openings[opening.direction], opening));\n this.update();\n }\n getColorElements() {\n return (0, $c5a0b96abcd6dbcd$export$6d3741128bd5bb7d)(this.openings.map((opening)=>opening.color));\n }\n getOpening(direction) {\n return this.openings.find((opening)=>opening.direction === direction);\n }\n onMove() {\n this.beams.forEach((beam)=>beam.remove());\n }\n onCollision({ beam: beam, collisionStep: collisionStep, currentStep: currentStep, existingNextStep: existingNextStep, nextStep: nextStep }) {\n console.debug(this.toString(), \"collision\", beam.toString());\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), \"ignoring starting terminus collision\");\n return;\n }\n const directionFrom = (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(currentStep.direction);\n // Take rotation of terminus into account\n const opening = this.openings.find((opening)=>this.getDirection(opening.direction) === directionFrom);\n if (opening && opening.color === nextStep.color && (!opening.on || // When re-evaluating history of an already connected opening\n opening.connected && existingNextStep?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(this))) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), \"terminus connection\", this.toString(), opening);\n return nextStep.copy({\n done: true,\n onAdd: ()=>{\n nextStep.onAdd();\n this.onConnection(opening.direction);\n },\n onRemove: ()=>{\n nextStep.onRemove();\n this.onDisconnection(opening.direction);\n },\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection(this, opening))\n });\n }\n // Otherwise, treat this as a collision\n return collisionStep;\n }\n onConnection(direction) {\n const opening = this.getOpening(direction);\n if (opening.connected) // Already connected\n return;\n opening.connect();\n this.update();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($d8b66316ed43c40f$export$3ad31a823e05e6fb.Events.Connection, {\n terminus: this,\n opening: opening\n });\n }\n onDisconnection(direction) {\n const opening = this.getOpening(direction);\n if (!opening.connected) // Already disconnected\n return;\n opening.disconnect();\n this.update();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($d8b66316ed43c40f$export$3ad31a823e05e6fb.Events.Disconnection, {\n terminus: this,\n opening: opening\n });\n }\n onToggle() {\n this.updateState((state)=>{\n this.openings.filter((opening)=>!opening.connected).forEach((opening)=>{\n opening.toggle();\n state.openings[opening.direction].on = opening.on;\n });\n });\n this.update();\n }\n update() {\n this.beams.forEach((beam)=>{\n const opening = beam.getOpening();\n const item = this.#ui.openings.find((item)=>item.data.direction === opening.direction);\n item.opacity = opening.on ? 1 : $d8b66316ed43c40f$export$3ad31a823e05e6fb.#openingOffOpacity;\n });\n }\n static #openingOffOpacity = 0.3;\n static ui(tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2;\n const terminus = new (0, $hFpCu.Path).RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n });\n const openings = configuration.map((opening)=>{\n const direction = opening.direction;\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[(0, $c5a0b96abcd6dbcd$export$abb49451cc8201c)(direction, 1)].point;\n const p2 = terminus.segments[(0, $c5a0b96abcd6dbcd$export$bac4c4504d574f)(direction, 2)].point;\n const vector = p2.subtract(p1);\n vector.angle += 120;\n const p3 = p1.subtract(vector);\n return new (0, $hFpCu.Path)({\n closed: true,\n data: {\n collidable: false,\n direction: direction\n },\n fillColor: opening.color,\n opacity: opening.on ? 1 : $d8b66316ed43c40f$export$3ad31a823e05e6fb.#openingOffOpacity,\n segments: [\n p1,\n p2,\n p3\n ]\n });\n });\n return {\n openings: openings,\n radius: radius,\n terminus: terminus\n };\n }\n static #Opening = class {\n constructor(color, direction, connected, on){\n this.colors = Array.isArray(color) ? color : [\n color\n ];\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(this.colors).hex();\n this.direction = direction;\n this.connected = connected === true;\n this.on = on === true;\n }\n connect() {\n this.connected = this.on = true;\n }\n disconnect() {\n this.connected = this.on = false;\n }\n toggle() {\n this.on = !this.on;\n }\n };\n static Events = Object.freeze({\n Connection: \"terminus-connection\",\n Disconnection: \"terminus-disconnection\"\n });\n}\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\n\n\nclass $b41b1d7e9f79d24a$export$edf083caefbff926 extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2))) {\n #item;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 30\n });\n this.color = state.color || \"black\";\n this.#item = $b41b1d7e9f79d24a$export$edf083caefbff926.item(tile, this.color);\n this.group.addChild(this.#item);\n }\n midLine() {\n // Two points which form a line through the mid-point of the reflector\n return [\n (0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(this.#item.segments[3].point, this.#item.segments[0].point),\n (0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(this.#item.segments[1].point, this.#item.segments[2].point)\n ];\n }\n getSide(point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return (0, $c5a0b96abcd6dbcd$export$1690e12b840569b9)(this.midLine(), point);\n }\n isSameSide(pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB);\n }\n onCollision({ beam: beam, collision: collision, collisions: collisions, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep }) {\n const directionFrom = (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(currentStep.direction);\n const directionTo = (0, $c5a0b96abcd6dbcd$export$17a5d53cd2e4de6c)(directionFrom, this.rotation);\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), \"stopping due to collision with non-reflective side of reflector\");\n return collisionStep;\n }\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), \"stopping due to reflection back at self\");\n if (collisions.some((collision)=>collision.item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam)) // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return;\n else // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision.copy({\n points: [\n nextStep.point\n ]\n })))\n });\n }\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector)) return nextStep.copy({\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector(this))\n });\n const point = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(currentStep.point, nextStep.tile.parameters.inradius, directionTo);\n return nextStep.copy({\n direction: directionTo,\n point: point\n });\n }\n static item(tile, color) {\n const length = tile.parameters.circumradius;\n const width = tile.parameters.circumradius / 12;\n const topLeft = tile.center.subtract(new (0, $hFpCu.Point)(width / 2, length / 2));\n const size = new (0, $hFpCu.Size)(width, length);\n return new (0, $hFpCu.Path).Rectangle({\n data: {\n size: size\n },\n fillColor: color,\n point: topLeft,\n size: size\n });\n }\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\nclass $3d5ce7d56315a48f$export$cb4338d67ffa8a1d extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2))) {\n sortOrder = 1;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 60\n });\n const walls = $3d5ce7d56315a48f$export$cb4338d67ffa8a1d.item(tile, state);\n this.group.addChildren(walls);\n }\n static item(tile, configuration) {\n const radius = tile.parameters.circumradius;\n const width = radius / 12;\n const fillColor = tile.styles.default.strokeColor;\n return configuration.directions.map((direction)=>{\n const firstSegment = tile.hexagon.segments[direction].point;\n const nextDirection = (0, $c5a0b96abcd6dbcd$export$bac4c4504d574f)(direction, 1);\n const lastSegment = tile.hexagon.segments[nextDirection].point;\n return new (0, $hFpCu.Path)({\n closed: true,\n fillColor: fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt((direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width),\n tile.hexagon.getLocationAt((nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width),\n lastSegment\n ]\n });\n });\n }\n}\n\n\n\nfunction $f1f4fe4d7a0d7e2f$export$a69a8f92cd2ea310(parent, configuration) {\n let item;\n switch(configuration.type){\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.filter:\n item = new (0, $903d7b3eecd4d3a8$export$ec91da630f36d5ea)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.portal:\n item = new (0, $d430de8cd820c3cd$export$602eac185826482c)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.terminus:\n item = new (0, $d8b66316ed43c40f$export$3ad31a823e05e6fb)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.reflector:\n item = new (0, $b41b1d7e9f79d24a$export$edf083caefbff926)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.wall:\n item = new (0, $3d5ce7d56315a48f$export$cb4338d67ffa8a1d)(parent, configuration);\n break;\n default:\n console.error(\"Ignoring item with unknown type:\", configuration.type);\n break;\n }\n if (item) item.onInitialization();\n return item;\n}\n\n\n\n\nclass $d12f93ae41726cf2$export$4b0ab9e4fad38dea extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"block\";\n title = \"Immutable\";\n}\n\n\n\nclass $54e671c4824aed95$export$5b9db7ce80343746 extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"lock\";\n title = \"Locked\";\n}\n\n\n\n\n\n\n\n\n\nclass $7993f13e9449b6b9$export$bdb5f0a1b77546f4 extends (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925) {\n name = \"swap_horiz\";\n title = \"Swap\";\n moveItems(tile) {\n const toItems = tile.items.filter((0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).movable);\n const fromItems = this.tile.items.filter((0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).movable);\n fromItems.forEach((item)=>item.move(tile));\n toItems.forEach((item)=>item.move(this.tile));\n return {\n moved: [\n (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).data(this.tile, tile, fromItems),\n (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).data(tile, this.tile, toItems)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).immutable) || !tile.items.filter((item)=>item.type !== (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam).length;\n }\n}\n\n\nfunction $86f6b44b69017f0d$export$1d55952676fae128(tile, configuration) {\n let modifier;\n switch(configuration.type){\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.immutable:\n modifier = new (0, $d12f93ae41726cf2$export$4b0ab9e4fad38dea)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.lock:\n modifier = new (0, $54e671c4824aed95$export$5b9db7ce80343746)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.move:\n modifier = new (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.rotate:\n modifier = new (0, $f48c890393349af7$export$152db69a76b6b79e)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.swap:\n modifier = new (0, $7993f13e9449b6b9$export$bdb5f0a1b77546f4)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.toggle:\n modifier = new (0, $6756284c9622095f$export$bea8ebba691c5813)(tile, configuration);\n break;\n default:\n console.error(\"Ignoring modifier with unknown type:\", configuration.type);\n break;\n }\n return modifier;\n}\n\n\nclass $e980209ca439f282$export$235cb65c20ad2b7 extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n selected = false;\n #ui;\n constructor(coordinates, layout, parameters, state){\n super(null, state, {\n locked: false\n });\n this.#ui = $e980209ca439f282$export$235cb65c20ad2b7.ui(layout, parameters, state, {\n coordinates: coordinates,\n type: this.type\n });\n this.center = this.#ui.center;\n this.coordinates = coordinates;\n this.hexagon = this.#ui.hexagon;\n this.parameters = parameters;\n this.styles = this.#ui.styles;\n this.group.addChildren([\n this.#ui.hexagon,\n this.#ui.indicator\n ]);\n // These need to be last, since they reference this\n this.items = (state.items || []).map((state)=>(0, $f1f4fe4d7a0d7e2f$export$a69a8f92cd2ea310)(this, state)).filter((item)=>item !== undefined);\n this.modifiers = (state.modifiers || []).map((state)=>(0, $86f6b44b69017f0d$export$1d55952676fae128)(this, state)).filter((modifier)=>modifier !== undefined);\n this.update();\n }\n addItem(item) {\n this.items.unshift(item);\n this.update();\n }\n addModifier(modifier) {\n this.modifiers.unshift(modifier);\n this.update();\n }\n afterModify() {\n this.setStyle(this.selected ? \"selected\" : \"default\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: false\n }));\n }\n beforeModify() {\n this.group.bringToFront();\n this.setStyle(\"edit\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: true\n }));\n }\n getState() {\n const state = {\n type: this.type\n };\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item)=>item.type !== (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam).map((item)=>item.getState());\n if (items.length) state.items = items;\n const modifiers = this.modifiers.map((modifier)=>modifier.getState());\n if (modifiers.length) state.modifiers = modifiers;\n return state;\n }\n onTap(event) {\n console.debug(this.coordinates.offset.toString(), this);\n this.items.forEach((item)=>item.onTap(event));\n }\n onDeselected(selectedTile) {\n this.selected = false;\n this.#ui.hexagon.style = this.styles.default;\n this.items.forEach((item)=>item.onDeselected());\n this.modifiers.forEach((modifier)=>modifier.detach());\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($e980209ca439f282$export$235cb65c20ad2b7.Events.Deselected, {\n selectedTile: selectedTile,\n deselectedTile: this\n });\n }\n onSelected(deselectedTile) {\n this.selected = true;\n this.group.bringToFront();\n this.#ui.hexagon.style = this.styles.selected;\n this.items.forEach((item)=>item.onSelected());\n this.modifiers.forEach((modifier)=>modifier.attach());\n }\n removeItem(item) {\n const index = this.items.indexOf(item);\n if (index >= 0) {\n this.items.splice(index, 1);\n this.update();\n }\n }\n removeModifier(modifier) {\n const index = this.modifiers.indexOf(modifier);\n if (index >= 0) {\n this.modifiers.splice(index, 1);\n this.update();\n }\n }\n setStyle(style) {\n this.hexagon.set(this.styles[style]);\n }\n teardown() {\n this.modifiers.forEach((modifier)=>modifier.detach());\n }\n toString() {\n return this.coordinates.offset.toString();\n }\n update() {\n super.update();\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0;\n }\n static parameters(height) {\n const circumradius = height / 2;\n const width = Math.sqrt(3) * circumradius;\n const inradius = width / 2;\n const offsetY = height * (3 / 4);\n return {\n circumradius: circumradius,\n height: height,\n inradius: inradius,\n offsetY: offsetY,\n width: width\n };\n }\n static ui(layout, parameters, configuration, data) {\n const center = new (0, $hFpCu.Point)(layout.startingOffsetX + parameters.inradius + layout.column * parameters.width, layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY);\n const dashWidth = parameters.circumradius / 10;\n const styles = Object.assign({}, $e980209ca439f282$export$235cb65c20ad2b7.Styles, {\n edit: Object.assign({\n dashArray: [\n dashWidth,\n dashWidth\n ]\n }, $e980209ca439f282$export$235cb65c20ad2b7.Styles.edit)\n }, configuration.style || {});\n const hexagon = new (0, $hFpCu.Path).RegularPolygon({\n center: center,\n closed: true,\n data: data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n });\n const indicator = new (0, $hFpCu.Path).RegularPolygon({\n center: (0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(hexagon.segments[1].point, center, (length)=>length / 3),\n data: {\n collidable: false\n },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: {\n fillColor: \"#ccc\"\n }\n });\n return {\n center: center,\n hexagon: hexagon,\n indicator: indicator,\n styles: styles\n };\n }\n static Events = Object.freeze({\n Deselected: \"tile-deselected\",\n Selected: \"tile-selected\"\n });\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new (0, $hFpCu.Color)(\"white\"),\n strokeColor: new (0, $hFpCu.Color)(\"#666\"),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new (0, $hFpCu.Color)(\"black\"),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new (0, $hFpCu.Color)(\"black\"),\n strokeWidth: 2\n }\n });\n}\n\n\n\n\nclass $99408c3658777a44$export$c84671f46d6a1ca extends (0, $92f12ea2067f7a87$export$654f18991713c8c4) {\n #tilesByAxial = [];\n #tilesByOffset = [];\n items = [];\n layers = {};\n tiles = [];\n tileSize = 120;\n constructor(state){\n super(state);\n this.type = state.type || $99408c3658777a44$export$c84671f46d6a1ca.Types.oddR;\n const center = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center;\n const parameters = (0, $e980209ca439f282$export$235cb65c20ad2b7).parameters(this.tileSize);\n const tiles = state.tiles;\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width;\n const startingOffsetY = center.y - height / 2;\n this.layers.tiles = new (0, $hFpCu.Layer)();\n this.layers.items = new (0, $hFpCu.Layer)();\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index)=>{\n const length = row.length;\n // Favor offset rows, since they will be wider\n if (length > current.length || length === current.length && this.#isOffsetRow(index)) return {\n index: index,\n length: length\n };\n return current;\n }, {\n index: 0,\n length: 0\n });\n const width = widestRow.length * parameters.width + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0);\n const startingOffsetX = center.x - width / 2;\n for(let r = 0; r < tiles.length; r++){\n const row = tiles[r];\n const rowByAxial = new Array(row.length).fill(null);\n const rowByOffset = new Array(row.length).fill(null);\n const rowOffset = Math.floor(r / 2);\n for(let c = 0; c < row.length; c++){\n const axial = new (0, $3f2d62ea7d5da3d6$export$c56d3ccff2456440)(c - rowOffset, r);\n const offset = new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(r, c);\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY: startingOffsetY\n };\n const state = row[c];\n if (!state) continue;\n const tile = new (0, $e980209ca439f282$export$235cb65c20ad2b7)({\n axial: axial,\n offset: offset\n }, layout, parameters, state);\n this.layers.tiles.addChild(tile.group);\n if (tile.items.length) {\n this.items.push(...tile.items);\n this.layers.items.addChildren(tile.items.map((item)=>item.group));\n }\n this.tiles.push(tile);\n rowByAxial[axial.q] = tile;\n rowByOffset[offset.c] = tile;\n }\n this.#tilesByAxial.push(rowByAxial);\n this.#tilesByOffset.push(rowByOffset);\n }\n }\n getTileByAxial(axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q];\n }\n getTileByOffset(offset) {\n return this.#tilesByOffset[offset.r][offset.c];\n }\n getState() {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row)=>row.map((tile)=>tile?.getState() || null))\n });\n }\n getNeighboringTile(axial, direction) {\n return this.getTileByAxial((0, $3f2d62ea7d5da3d6$export$c56d3ccff2456440).neighbor(axial, (0, $c5a0b96abcd6dbcd$export$c43d7a950587702b)(direction)));\n }\n teardown() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n }\n #isOffsetRow(index) {\n return index % 2 === 0 ? this.type === $99408c3658777a44$export$c84671f46d6a1ca.Types.evenR : this.type === $99408c3658777a44$export$c84671f46d6a1ca.Types.oddR;\n }\n static Types = Object.freeze({\n evenR: \"even-r\",\n oddR: \"odd-r\"\n });\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nclass $01f46eb6f3519d51$export$991dcf7284de63d extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n constructor(tile, style){\n super(null, style, {\n locked: false,\n type: (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.mask\n });\n const data = {\n type: this.type\n };\n const item = new (0, $hFpCu.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n data: data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({\n fillColor: \"black\"\n }, style)\n });\n this.center = tile.center;\n this.group.addChild(item);\n }\n}\n\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nclass $d156ca7729efc9b3$export$88c9f72b40fcdd85 extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n constructor(state){\n super(null, state, {\n type: (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.collision\n });\n const { center: center, color: color } = state;\n this.center = center;\n this.color = color;\n const item = new (0, $hFpCu.Path).Circle({\n center: center,\n closed: true,\n radius: 4,\n style: {\n fillColor: \"white\",\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n}\n\n\n\n\nvar $f9851db314e87bfb$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $c6cc40588dc8d09f$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n clockwise: false,\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $60a14eb6e89203b2$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n clockwise: false,\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $d24fb2f3f110a5d1$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $e1adabb25bb9496f$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n },\n {\n clockwise: false,\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 2,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $b595f519c8ed1bec$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n {\n color: \"red\",\n type: \"Beam\"\n },\n null,\n {\n color: \"blue\",\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n {\n color: \"blue\",\n type: \"Beam\"\n },\n null,\n {\n color: \"red\",\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 2,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $34b0ef4eb47c0c31$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n {\n type: \"Beam\"\n },\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n {\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n {\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 3,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n null,\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 3,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 3,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n {\n on: true,\n type: \"Beam\"\n },\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 0,\n type: \"Connections\"\n },\n {\n amount: 6,\n type: \"Moves\"\n }\n ],\n version: 1\n};\n\n\nvar $a0051f8ff8dcf093$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: [\n \"red\",\n \"blue\"\n ],\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n type: \"Filter\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n type: \"Filter\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n null,\n {\n items: [\n {\n color: [\n \"red\",\n \"blue\"\n ],\n openings: [\n null,\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 2,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $247d1abe788d0b93$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $8a5feaabc9575237$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $987075d417401505$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 5,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n {\n color: \"blue\",\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n null,\n null,\n {\n color: \"blue\",\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n direction: 5,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 5,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ],\n version: 1\n};\n\n\nconst $cd73c3f23e791522$var$layout = [\n [\n \"o\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"x\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"x\",\n \"x\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"x\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"o\",\n \"x\",\n \"x\",\n \"x\"\n ]\n];\nvar $cd73c3f23e791522$export$2e2bcd8739ae039 = {\n layout: {\n tiles: $cd73c3f23e791522$var$layout.map((column)=>column.map((item)=>item === \"x\" ? {\n type: \"Tile\"\n } : null))\n },\n solution: [\n {\n amount: 100,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $8b3360f8e0a3e2d1$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n {\n color: [\n \"red\",\n \"blue\"\n ],\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n null,\n {\n color: \"green\",\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n openings: [\n {\n color: \"red\",\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n {\n color: \"blue\",\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $acc46a994c7278cf$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 999,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $3d0696c83dd98640$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n null,\n {\n items: [\n {\n rotation: 4,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 100,\n type: \"Connections\"\n }\n ]\n};\n\n\n// Ensure puzzle configuration is valid JSON\nconst $b090bea9f5eab78e$var$configuration = Object.fromEntries(Object.entries({\n \"001\": (0, $f9851db314e87bfb$export$2e2bcd8739ae039),\n \"002\": (0, $c6cc40588dc8d09f$export$2e2bcd8739ae039),\n \"003\": (0, $60a14eb6e89203b2$export$2e2bcd8739ae039),\n \"004\": (0, $d24fb2f3f110a5d1$export$2e2bcd8739ae039),\n \"005\": (0, $e1adabb25bb9496f$export$2e2bcd8739ae039),\n \"006\": (0, $b595f519c8ed1bec$export$2e2bcd8739ae039),\n \"007\": (0, $34b0ef4eb47c0c31$export$2e2bcd8739ae039),\n \"008\": (0, $a0051f8ff8dcf093$export$2e2bcd8739ae039),\n \"009\": (0, $247d1abe788d0b93$export$2e2bcd8739ae039),\n \"010\": (0, $8a5feaabc9575237$export$2e2bcd8739ae039),\n \"011\": (0, $987075d417401505$export$2e2bcd8739ae039),\n test_infinite_loop: (0, $3d0696c83dd98640$export$2e2bcd8739ae039),\n test_layout: (0, $cd73c3f23e791522$export$2e2bcd8739ae039),\n test_portal: (0, $8b3360f8e0a3e2d1$export$2e2bcd8739ae039),\n test_reflector: (0, $acc46a994c7278cf$export$2e2bcd8739ae039)\n}).map(([k, v])=>[\n k,\n JSON.parse(JSON.stringify(v))\n ]));\nfunction $b090bea9f5eab78e$var$traverse(ids, id, amount) {\n const index = ids.indexOf(id);\n return ids[index < 0 ? index : index + amount];\n}\nclass $b090bea9f5eab78e$var$PuzzleGroup {\n ids;\n constructor(ids){\n this.firstId = ids[0];\n this.ids = ids;\n this.lastId = ids[ids.length - 1];\n }\n get(id) {\n if (this.has(id)) // Note: deep cloning configuration to prevent mutation\n return structuredClone($b090bea9f5eab78e$var$configuration[id]);\n }\n has(id) {\n return this.ids.includes(id);\n }\n nextId(id) {\n return $b090bea9f5eab78e$var$traverse(this.ids, id, 1);\n }\n previousId(id) {\n return $b090bea9f5eab78e$var$traverse(this.ids, id, -1);\n }\n}\nconst $b090bea9f5eab78e$export$f68871ba002ca835 = new $b090bea9f5eab78e$var$PuzzleGroup(Object.keys($b090bea9f5eab78e$var$configuration).sort());\n$b090bea9f5eab78e$export$f68871ba002ca835.hidden = new $b090bea9f5eab78e$var$PuzzleGroup($b090bea9f5eab78e$export$f68871ba002ca835.ids.filter((id)=>id.startsWith(\"test_\")));\n$b090bea9f5eab78e$export$f68871ba002ca835.titles = Object.fromEntries($b090bea9f5eab78e$export$f68871ba002ca835.ids.map((id)=>[\n id,\n $b090bea9f5eab78e$var$configuration[id].title || id\n ]));\n$b090bea9f5eab78e$export$f68871ba002ca835.visible = new $b090bea9f5eab78e$var$PuzzleGroup($b090bea9f5eab78e$export$f68871ba002ca835.ids.filter((id)=>!$b090bea9f5eab78e$export$f68871ba002ca835.hidden.has(id)));\n\n\n\nconst $4c3397e7d04ad378$var$history = window.history;\nconst $4c3397e7d04ad378$var$localStorage = window.localStorage;\nclass $4c3397e7d04ad378$export$7254cc27399e90bd {\n #current;\n #deltas;\n #id;\n #index;\n #original;\n #selectedTile;\n #version;\n constructor(id, original, deltas, deltasIndex, selectedTile, version){\n this.#id = id;\n this.#original = original;\n this.#deltas = deltas || [];\n this.#index = deltasIndex || this.#lastIndex();\n this.#selectedTile = selectedTile;\n this.#version = version ?? original.version;\n // Update current state\n this.#current = structuredClone(original);\n this.#deltas.filter((delta, index)=>index <= this.#index).forEach((delta)=>this.apply(delta));\n this.#updateCache(id);\n }\n apply(delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === \"string\") delta = JSON.parse(delta);\n console.debug(\"StateManager: applying delta\", delta);\n return (0, $c5a0b96abcd6dbcd$export$1bb10639a2cd4297).patch(this.#current, delta);\n }\n canRedo() {\n return this.#index < this.#lastIndex();\n }\n canUndo() {\n return this.#index >= 0;\n }\n encode() {\n return (0, $c5a0b96abcd6dbcd$export$4e633de97d65d1c8)(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: (0, $b090bea9f5eab78e$export$f68871ba002ca835).has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }));\n }\n getCurrent() {\n return structuredClone(this.#current);\n }\n getId() {\n return this.#id;\n }\n getTitle() {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : \"\");\n }\n getSelectedTile() {\n return this.#selectedTile;\n }\n moves() {\n return this.#index + 1;\n }\n length() {\n return this.#deltas.length;\n }\n redo() {\n const nextIndex = this.#index + 1;\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= nextIndex).forEach((delta)=>this.apply(delta));\n this.#index = nextIndex;\n this.#updateCache();\n }\n }\n reset() {\n this.#current = structuredClone(this.#original);\n this.#deltas = [];\n this.#index = this.#lastIndex();\n this.#selectedTile = undefined;\n $4c3397e7d04ad378$export$7254cc27399e90bd.clearCache(this.getId());\n this.#updateCache();\n }\n setSelectedTile(tile) {\n const id = tile?.coordinates.offset.toString();\n if (this.#selectedTile !== id) {\n this.#selectedTile = id;\n this.#updateCache();\n }\n }\n undo() {\n const previousIndex = this.#index - 1;\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= previousIndex).forEach((delta)=>this.apply(delta));\n this.#index = previousIndex;\n this.#updateCache();\n }\n }\n update(newState) {\n const delta = (0, $c5a0b96abcd6dbcd$export$1bb10639a2cd4297).diff(this.#current, newState);\n console.debug(\"delta\", delta);\n if (delta === undefined) // Nothing to do\n return;\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1);\n this.apply(delta);\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta));\n this.#index = this.#lastIndex();\n this.#updateCache();\n }\n #key(key) {\n return $4c3397e7d04ad378$export$7254cc27399e90bd.key(key, this.getId());\n }\n #lastIndex() {\n return this.#deltas.length - 1;\n }\n #updateCache() {\n const id = this.getId();\n const state = this.encode();\n (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash = [\n \"\",\n id,\n state\n ].join(\"/\");\n $4c3397e7d04ad378$var$history.pushState({\n id: id,\n state: state\n }, \"\", (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef));\n $4c3397e7d04ad378$var$localStorage.setItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id, id);\n $4c3397e7d04ad378$var$localStorage.setItem(this.#key($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.state), state);\n }\n static clearCache(id) {\n if (!id) {\n // Clear everything\n (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash = \"\";\n $4c3397e7d04ad378$var$history.pushState({}, \"\", (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef));\n id = $4c3397e7d04ad378$var$localStorage.getItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id);\n $4c3397e7d04ad378$var$localStorage.clear();\n // Keep current puzzle ID\n $4c3397e7d04ad378$var$localStorage.setItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id, id);\n } else {\n // Clear a single puzzle\n (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash = `/${id}`;\n $4c3397e7d04ad378$var$history.pushState({\n id: id\n }, \"\", (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef));\n $4c3397e7d04ad378$var$localStorage.removeItem($4c3397e7d04ad378$export$7254cc27399e90bd.key($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.state, id));\n }\n }\n static fromEncoded(state) {\n state = JSON.parse((0, $c5a0b96abcd6dbcd$export$afb15ede80c42aab)(state));\n state.original = state.original || (0, $b090bea9f5eab78e$export$f68871ba002ca835).get(state.id);\n state.original.version ??= 0;\n return new $4c3397e7d04ad378$export$7254cc27399e90bd(state.id, state.original, state.deltas, state.deltasIndex, state.selectedTile, state.version);\n }\n static fromId(id) {\n return new $4c3397e7d04ad378$export$7254cc27399e90bd(id, (0, $b090bea9f5eab78e$export$f68871ba002ca835).get(id));\n }\n static resolve(id) {\n let state;\n // Allow cache to be cleared via URL param\n if ((0, $c5a0b96abcd6dbcd$export$281ad3752a540efe).has($4c3397e7d04ad378$export$7254cc27399e90bd.ParamKeys.clearCache)) $4c3397e7d04ad378$export$7254cc27399e90bd.clearCache((0, $c5a0b96abcd6dbcd$export$281ad3752a540efe).get($4c3397e7d04ad378$export$7254cc27399e90bd.ParamKeys.clearCache));\n const pathSegments = (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash.substring(1).split(\"/\").filter((path)=>path !== \"\");\n if (!id) // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path)=>!(0, $b090bea9f5eab78e$export$f68871ba002ca835).has(path)).some((segment, index)=>{\n try {\n state = $4c3397e7d04ad378$export$7254cc27399e90bd.fromEncoded(segment);\n id = state.getId();\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e);\n }\n return state !== undefined;\n });\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || $4c3397e7d04ad378$var$localStorage.getItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id) || (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.firstId;\n const localState = $4c3397e7d04ad378$var$localStorage.getItem($4c3397e7d04ad378$export$7254cc27399e90bd.key($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.state, id));\n if (localState) try {\n state = $4c3397e7d04ad378$export$7254cc27399e90bd.fromEncoded(localState);\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e);\n }\n }\n if (state) {\n const cachedVersion = state.#version;\n const originalVersion = state.#original.version;\n if (cachedVersion !== originalVersion) {\n console.debug(`Invalidating cache for ID ${id} due to version mismatch. ` + `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`);\n state = undefined;\n $4c3397e7d04ad378$export$7254cc27399e90bd.clearCache(id);\n }\n }\n if (!state) // Fall back to loading state from Puzzles cache by ID\n state = $4c3397e7d04ad378$export$7254cc27399e90bd.fromId(id);\n if (!state) throw new Error(`Unable to resolve state for ID '${id}'`);\n return state;\n }\n static key(key, id) {\n return `${key}:${id}`;\n }\n static CacheKeys = Object.freeze({\n center: \"center\",\n id: \"id\",\n state: \"state\",\n zoom: \"zoom\"\n });\n static ParamKeys = Object.freeze({\n clearCache: \"clearCache\"\n });\n}\n\n\n\n\n\n\n\n\n\nclass $784ae6de7637c8a9$export$a337a674d761bdc2 {\n #conditions = [];\n constructor(state){\n state.forEach((condition)=>this.#conditionFactory(condition));\n }\n teardown() {\n this.#conditions.forEach((condition)=>condition.teardown());\n $784ae6de7637c8a9$export$a337a674d761bdc2.element.replaceChildren();\n }\n isSolved() {\n return this.#conditions.every((condition)=>condition.isMet());\n }\n #conditionFactory(condition) {\n switch(condition.type){\n case $784ae6de7637c8a9$var$SolutionCondition.Types.connections:\n this.#conditions.push(new $784ae6de7637c8a9$var$Connections(condition));\n break;\n case $784ae6de7637c8a9$var$SolutionCondition.Types.moves:\n this.#conditions.push(new $784ae6de7637c8a9$var$Moves(condition));\n break;\n default:\n console.warn(\"Ignoring condition with unknown type:\", condition.type);\n break;\n }\n }\n static element = document.getElementById(\"solution\");\n}\nclass $784ae6de7637c8a9$var$SolutionCondition {\n constructor(state, elements){\n this.state = state;\n const li = document.createElement(\"li\");\n li.append(...elements);\n $784ae6de7637c8a9$export$a337a674d761bdc2.element.append(li);\n }\n isMet() {}\n teardown() {}\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"connections\",\n \"moves\"\n ].map((type)=>[\n type,\n (0, $c5a0b96abcd6dbcd$export$9a00dee1beb8f576)(type)\n ])));\n}\nclass $784ae6de7637c8a9$var$Connections extends $784ae6de7637c8a9$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #connections = [];\n constructor(state){\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $c5a0b96abcd6dbcd$export$43941667eccc070)(\"/\"),\n required,\n (0, $c5a0b96abcd6dbcd$export$f6292fcace2a1886)(\"link\", \"Connections\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $d8b66316ed43c40f$export$3ad31a823e05e6fb).Events.Connection,\n handler: this.update\n },\n {\n type: (0, $d8b66316ed43c40f$export$3ad31a823e05e6fb).Events.Disconnection,\n handler: this.update\n }\n ]);\n }\n isMet() {\n return this.#connections.length === this.state.amount;\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Connections.update\", event);\n const terminus = event.detail.terminus;\n const opening = event.detail.opening;\n const connectionId = `${terminus.id}:${opening.direction}`;\n const connectionIndex = this.#connections.findIndex((connection)=>connection === connectionId);\n if (opening.connected && connectionIndex < 0) this.#connections.push(connectionId);\n else if (!opening.connected && connectionIndex >= 0) this.#connections.splice(connectionIndex, 1);\n this.#completed.textContent = this.#connections.length.toString();\n }\n}\nclass $784ae6de7637c8a9$var$Moves extends $784ae6de7637c8a9$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #moves = 0;\n constructor(state){\n state.operator ??= $784ae6de7637c8a9$var$Moves.Operators.equalTo;\n if (!Object.values($784ae6de7637c8a9$var$Moves.Operators).includes(state.operator)) throw new Error(`Invalid moves operator: ${state.operator}`);\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $c5a0b96abcd6dbcd$export$43941667eccc070)(state.operator),\n required,\n (0, $c5a0b96abcd6dbcd$export$f6292fcace2a1886)(\"stacks\", \"Moves\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Events.Updated,\n handler: this.update\n }\n ]);\n }\n isMet() {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch(this.state.operator){\n case $784ae6de7637c8a9$var$Moves.Operators.equalTo:\n return this.#moves === this.state.amount;\n case $784ae6de7637c8a9$var$Moves.Operators.greaterThan:\n return this.#moves > this.state.amount;\n case $784ae6de7637c8a9$var$Moves.Operators.lessThan:\n return this.#moves < this.state.amount;\n }\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Moves.update\", event);\n this.#moves = event.detail.state.moves();\n this.#completed.textContent = this.#moves.toString();\n }\n static Operators = Object.freeze({\n equalTo: \"=\",\n greaterThan: \">\",\n lessThan: \"<\"\n });\n}\n\n\n\nconst $15dbe6491c90ff2e$var$elements = Object.freeze({\n main: document.getElementById(\"main\"),\n message: document.getElementById(\"message\"),\n next: document.getElementById(\"next\"),\n previous: document.getElementById(\"previous\"),\n puzzle: document.getElementById(\"puzzle\"),\n puzzleId: document.getElementById(\"puzzle-id\"),\n redo: document.getElementById(\"redo\"),\n reset: document.getElementById(\"reset\"),\n undo: document.getElementById(\"undo\"),\n title: document.querySelector(\"title\")\n});\nclass $15dbe6491c90ff2e$export$a9753b1ffc289935 {\n connections = [];\n debug = false;\n error = false;\n layers = {};\n message;\n selectedTile;\n solved = false;\n #beams;\n #beamsUpdateDelay = 30;\n #collisions = {};\n #eventListeners = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #interact;\n #isUpdatingBeams = false;\n #mask;\n #maskQueue = [];\n #solution;\n #state;\n #termini;\n #tiles = [];\n constructor(){\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).settings.insertItems = false;\n // noinspection JSCheckFunctionSignatures\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).setup($15dbe6491c90ff2e$var$elements.puzzle);\n this.#resize();\n this.layers.mask = new (0, $hFpCu.Layer)();\n this.layers.collisions = new (0, $hFpCu.Layer)();\n this.layers.debug = new (0, $hFpCu.Layer)();\n this.#eventListeners.add([\n {\n type: (0, $eb2b229f23b512af$export$693b33588b3dd9d8).Events.Update,\n handler: this.#onBeamUpdate\n },\n {\n type: \"change\",\n element: $15dbe6491c90ff2e$var$elements.puzzleId,\n handler: this.#onSelect\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.next,\n handler: this.#next\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.previous,\n handler: this.#previous\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.redo,\n handler: this.#redo\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.reset,\n handler: this.#reset\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.undo,\n handler: this.#undo\n },\n {\n type: \"keyup\",\n handler: this.#onKeyup\n },\n {\n type: (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked,\n handler: this.#onModifierInvoked\n },\n {\n type: $15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Mask,\n handler: this.#onMask\n },\n {\n type: \"resize\",\n element: window,\n handler: (0, $c5a0b96abcd6dbcd$export$61fc7d43ac8f84b0)(this.#resize)\n },\n {\n type: (0, $92f12ea2067f7a87$export$654f18991713c8c4).Events.Update,\n handler: this.#onStateUpdate\n },\n {\n type: \"tap\",\n element: $15dbe6491c90ff2e$var$elements.puzzle,\n handler: this.#onTap\n }\n ]);\n this.#interact = new (0, $b8e3951689bc8f9e$export$b0d759d807f751d4)($15dbe6491c90ff2e$var$elements.puzzle);\n this.#updateDropdown();\n this.select();\n }\n centerOnTile(offset) {\n const tile = this.layout.getTileByOffset(offset);\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center = tile.center;\n }\n clearDebugPoints() {\n this.layers.debug.clear();\n }\n drawDebugPoint(point, style = {}) {\n const circle = new (0, $hFpCu.Path).Circle(Object.assign({\n radius: 3,\n fillColor: \"red\",\n strokeColor: \"white\",\n strokeWidth: 1,\n center: point\n }, style));\n this.layers.debug.addChild(circle);\n }\n getBeamsUpdateDelay() {\n return this.#beamsUpdateDelay;\n }\n getItems(tile) {\n return (tile ? this.#tiles.filter((t)=>t === tile) : this.#tiles).flatMap((tile)=>tile.items);\n }\n getTile(point) {\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.hitTest(point.ceil(), {\n fill: true,\n match: (result)=>result.item.data.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n });\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result;\n }\n mask(mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask);\n throw new Error(`Duplicate mask detected: ${mask.id}`);\n }\n this.#maskQueue.push(mask);\n return;\n }\n this.#mask = mask;\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter).map((tile)=>new (0, $01f46eb6f3519d51$export$991dcf7284de63d)(tile, typeof mask.configuration.style === \"function\" ? mask.configuration.style(tile) : mask.configuration.style));\n this.layers.mask.addChildren(tiles.map((tile)=>tile.group));\n if (mask.message) $15dbe6491c90ff2e$var$elements.message.textContent = mask.message;\n mask.onMask(this);\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Mask);\n }\n select(id) {\n if (id !== undefined && id === this.#state?.getId()) // This ID is already selected\n return;\n try {\n this.#state = (0, $4c3397e7d04ad378$export$7254cc27399e90bd).resolve(id);\n } catch (e) {\n this.#onError(e, \"Could not load puzzle.\");\n }\n this.#reload();\n }\n unmask() {\n this.layers.mask.removeChildren();\n this.#updateMessage(this.selectedTile);\n this.#mask.onUnmask(this);\n this.#mask = undefined;\n document.body.classList.remove($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Mask);\n const mask = this.#maskQueue.pop();\n if (mask) // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(()=>this.mask(mask), 0);\n }\n update() {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true;\n this.#updateBeams();\n }\n }\n updateSelectedTile(tile) {\n const previouslySelectedTile = this.selectedTile;\n this.selectedTile = tile;\n this.#state.setSelectedTile(tile);\n this.#updateMessage(tile);\n if (previouslySelectedTile && previouslySelectedTile !== tile) previouslySelectedTile.onDeselected(tile);\n if (tile && tile !== previouslySelectedTile) tile.onSelected(previouslySelectedTile);\n return previouslySelectedTile;\n }\n updateState() {\n this.#state.update(Object.assign(this.#state.getCurrent(), {\n layout: this.layout.getState()\n }));\n this.#updateActions();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #addLayers() {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer)=>(0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.addLayer(layer));\n }\n #next() {\n const id = (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.nextId(this.#state.getId());\n if (id) this.select(id);\n }\n #onBeamUpdate(event) {\n const beam = event.detail.beam;\n const state = event.detail.state;\n if (state?.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision)) {\n const collision = state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision);\n const collisionId = $15dbe6491c90ff2e$export$a9753b1ffc289935.Collision.id(collision.point);\n const existing = this.#collisions[collisionId];\n if (existing) existing.addBeam(beam);\n else this.#collisions[collisionId] = new $15dbe6491c90ff2e$export$a9753b1ffc289935.Collision(this.layers.collisions, [\n beam\n ], collision.point);\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration;\n if (mask?.beam?.equals(beam)) this.unmask();\n }\n Object.values(this.#collisions).forEach((collision)=>collision.update());\n this.#beams.filter((otherBeam)=>otherBeam !== beam).forEach((beam)=>beam.onBeamUpdated(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onError(error, message, cause) {\n this.error = true;\n // Support exclusion of error\n if (typeof error === \"string\") {\n message = error;\n cause = message;\n error = undefined;\n }\n if (error) console.error(error);\n cause = cause ?? error?.cause;\n if (cause) console.error(\"cause:\", cause);\n message = message ?? error?.message ?? \"The puzzle has encountered an error, please consider reporting.\";\n $15dbe6491c90ff2e$var$elements.message.textContent = message;\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Error);\n }\n #onKeyup(event) {\n if (this.debug && event.key === \"s\") this.update();\n }\n #onMask(event) {\n console.debug(\"Mask event\", event);\n this.mask(event.detail.mask);\n }\n #onModifierInvoked(event) {\n const tile = event.detail.tile;\n this.#beams// Update beams in the tile being modified first\n .sort((beam)=>tile.items.some((item)=>item === beam) ? -1 : 0).forEach((beam)=>beam.onModifierInvoked(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onSelect(event) {\n this.select(event.target.value);\n }\n #onSolved() {\n if (this.solved) return;\n this.solved = true;\n this.updateSelectedTile(undefined);\n this.mask($15dbe6491c90ff2e$export$a9753b1ffc289935.#solvedMask);\n const span = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\");\n span.textContent = \"celebration\";\n span.title = \"Solved!\";\n $15dbe6491c90ff2e$var$elements.message.replaceChildren(span);\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Solved);\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Solved);\n }\n #onStateUpdate() {\n this.updateState();\n }\n #onTap(event) {\n let tile;\n if (this.solved || this.error) return;\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.hitTest(event.detail.point);\n switch(result?.item.data.type){\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.mask:\n return;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial);\n break;\n }\n // There is an active mask\n if (this.#mask) this.#mask.onTap(this, tile);\n else {\n const previouslySelectedTile = this.updateSelectedTile(tile);\n if (tile && tile === previouslySelectedTile) tile.onTap(event);\n }\n }\n #previous() {\n const id = (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.previousId(this.#state.getId());\n if (id) this.select(id);\n }\n #redo() {\n this.#state.redo();\n this.#reload();\n }\n #reload() {\n this.error = false;\n if (this.#state) this.#teardown();\n this.#setup();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #removeLayers() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.clear();\n }\n #reset() {\n this.#state.reset();\n this.#reload();\n }\n #resize() {\n const { width: width, height: height } = $15dbe6491c90ff2e$var$elements.main.getBoundingClientRect();\n $15dbe6491c90ff2e$var$elements.puzzle.style.height = height + \"px\";\n $15dbe6491c90ff2e$var$elements.puzzle.style.width = width + \"px\";\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewSize = new (0, $hFpCu.Size)(width, height);\n }\n #setup() {\n // Reset the item IDs, so they are unique per-puzzle\n (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).uniqueId = 0;\n const { layout: layout, message: message, solution: solution } = this.#state.getCurrent();\n this.layout = new (0, $99408c3658777a44$export$c84671f46d6a1ca)(layout);\n this.message = message;\n this.#solution = new (0, $784ae6de7637c8a9$export$a337a674d761bdc2)(solution);\n this.#tiles = this.layout.tiles;\n this.#termini = this.layout.items.filter((item)=>item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.terminus);\n this.#beams = this.#termini.flatMap((terminus)=>terminus.beams);\n this.#addLayers();\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Loaded);\n const selectedTileId = this.#state.getSelectedTile();\n const selectedTile = selectedTileId ? this.layout.getTileByOffset(new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(...selectedTileId.split(\",\"))) : undefined;\n this.updateSelectedTile(selectedTile);\n this.update();\n this.#updateActions();\n }\n #teardown() {\n document.body.classList.remove(...Object.values($15dbe6491c90ff2e$export$a9753b1ffc289935.Events));\n this.#removeLayers();\n this.#tiles.forEach((tile)=>tile.teardown());\n this.#tiles = [];\n this.#solution?.teardown();\n this.#solution = undefined;\n this.solved = false;\n this.layout?.teardown();\n this.layout = undefined;\n this.selectedTile = undefined;\n this.#beams = [];\n this.#collisions = {};\n this.#isUpdatingBeams = false;\n this.#mask = undefined;\n this.#termini = [];\n }\n #undo() {\n this.#state.undo();\n this.#reload();\n }\n #updateActions() {\n const id = this.#state.getId();\n const title = this.#state.getTitle();\n // Update browser title\n $15dbe6491c90ff2e$var$elements.title.textContent = `Beaming: Puzzle ${title}`;\n (0, $c5a0b96abcd6dbcd$export$c2255604a80b4506)(\"disabled\", ...Array.from(document.querySelectorAll(\"#actions li\")));\n const disable = [];\n if (!this.#state.canUndo()) disable.push($15dbe6491c90ff2e$var$elements.undo);\n if (!this.#state.canRedo()) disable.push($15dbe6491c90ff2e$var$elements.redo);\n if (!(0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.has(id)) {\n // Custom puzzle\n $15dbe6491c90ff2e$var$elements.puzzleId.value = \"\";\n disable.push($15dbe6491c90ff2e$var$elements.previous, $15dbe6491c90ff2e$var$elements.next);\n } else {\n $15dbe6491c90ff2e$var$elements.puzzleId.value = id;\n if (id === (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.firstId) disable.push($15dbe6491c90ff2e$var$elements.previous);\n else if (id === (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.lastId) disable.push($15dbe6491c90ff2e$var$elements.next);\n }\n (0, $c5a0b96abcd6dbcd$export$d2cf6cd1dc7067d3)(\"disabled\", ...disable);\n }\n #updateDropdown() {\n $15dbe6491c90ff2e$var$elements.puzzleId.replaceChildren();\n for (const id of (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.ids){\n const option = document.createElement(\"option\");\n option.value = id;\n option.innerText = (0, $b090bea9f5eab78e$export$f68871ba002ca835).titles[id];\n $15dbe6491c90ff2e$var$elements.puzzleId.append(option);\n }\n }\n #updateBeams() {\n const beams = this.#beams.filter((beam)=>beam.isPending());\n if (!beams.length) {\n this.#isUpdatingBeams = false;\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(()=>{\n if (this.#solution.isSolved()) this.#onSolved();\n }, 0);\n return;\n }\n if (this.debug) this.layers.debug.clear();\n beams.forEach((beam)=>beam.step(this));\n // Ensure the UI has a chance to update between loops\n setTimeout(()=>this.#updateBeams(), this.#beamsUpdateDelay);\n }\n #updateMessage(tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items.map((item)=>item.getColorElements(tile)).find((colorElements)=>colorElements.length > 0) || [];\n $15dbe6491c90ff2e$var$elements.message.replaceChildren(...colorElements);\n } else $15dbe6491c90ff2e$var$elements.message.textContent = this.message || \"Select a tile\";\n }\n static Collision = class {\n constructor(layer, beams, point, item){\n this.id = $15dbe6491c90ff2e$export$a9753b1ffc289935.Collision.id(point);\n this.layer = layer;\n this.beams = beams;\n this.point = point;\n this.item = item;\n }\n addBeam(beam) {\n if (!this.beams.some((otherBeam)=>otherBeam.id === beam.id)) this.beams.push(beam);\n return this.beams;\n }\n addItem(color) {\n this.item = new (0, $d156ca7729efc9b3$export$88c9f72b40fcdd85)({\n center: this.point,\n color: color\n });\n this.layer.addChild(this.item.group);\n }\n equals(other) {\n return (0, $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07)(this.point, other?.point);\n }\n getColor() {\n return this.beams.length ? (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(this.beams.map((beam)=>beam.getColor())).hex() : undefined;\n }\n removeItem() {\n if (this.item) {\n this.item.remove();\n this.item = undefined;\n }\n }\n update() {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam)=>this.equals(beam.getCollision()));\n const color = this.getColor();\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) this.removeItem();\n // Add missing collision items\n if (this.beams.length && !this.item) this.addItem(color);\n }\n static id(point) {\n const rounded = point.round();\n return [\n rounded.x,\n rounded.y\n ].join(\",\");\n }\n };\n static Events = Object.freeze({\n Error: \"puzzle-error\",\n Loaded: \"puzzle-loaded\",\n Mask: \"puzzle-mask\",\n Solved: \"puzzle-solved\",\n Updated: \"puzzle-updated\"\n });\n static Mask = class {\n constructor(configuration = {}){\n configuration.style ??= {};\n this.configuration = configuration;\n this.id = configuration.id;\n this.message = configuration.message;\n this.tileFilter = configuration.tileFilter ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525)(true);\n this.onMask = configuration.onMask ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.onTap = configuration.onTap ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.onUnmask = configuration.onUnmask ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n }\n equals(other) {\n return this.id === other.id;\n }\n };\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item)=>item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam && item.isConnected();\n static #solvedMask = new $15dbe6491c90ff2e$export$a9753b1ffc289935.Mask({\n style: (tile)=>{\n const beams = tile.items.filter($15dbe6491c90ff2e$export$a9753b1ffc289935.#connectedBeams);\n const colors = beams.flatMap((beam)=>beam.getSteps(tile).flatMap((step)=>step.color));\n return {\n fillColor: (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(colors).hex()\n };\n },\n tileFilter: (tile)=>tile.items.some($15dbe6491c90ff2e$export$a9753b1ffc289935.#connectedBeams)\n });\n}\n\n\n\nconst $796068c1abf8becc$var$script = document.createElement(\"script\");\n$796068c1abf8becc$var$script.setAttribute(\"src\", \"https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS\");\ndocument.head.append($796068c1abf8becc$var$script);\nconst $796068c1abf8becc$var$dataLayer = window.dataLayer = window.dataLayer || [];\nfunction $796068c1abf8becc$var$gtag() {\n $796068c1abf8becc$var$dataLayer.push(arguments);\n}\n$796068c1abf8becc$var$gtag(\"js\", new Date());\n$796068c1abf8becc$var$gtag(\"config\", \"G-HXLD6EE5NS\");\n\n\nconst $43a0370408551d62$var$doorbellOptions = window.doorbellOptions = {\n appKey: \"o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC\",\n container: document.getElementById(\"feedback-container\"),\n hideButton: true,\n properties: {}\n};\nconst $43a0370408551d62$var$script = document.createElement(\"script\");\n$43a0370408551d62$var$script.setAttribute(\"src\", \"https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0\");\ndocument.head.append($43a0370408551d62$var$script);\ndocument.addEventListener(\"puzzle-updated\", (event)=>{\n $43a0370408551d62$var$doorbellOptions.properties.puzzleId = event.detail.state.getId();\n});\n\n\nconst $b7ac0cf7b7632c81$var$puzzle = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935)();\nconst $b7ac0cf7b7632c81$var$beaming = {\n debug: $77e640c1aaab669f$export$1c9f709888824e05,\n puzzle: $b7ac0cf7b7632c81$var$puzzle\n};\n// Used by functional tests\n$b7ac0cf7b7632c81$var$beaming.centerOnTile = function(r, c) {\n return $b7ac0cf7b7632c81$var$puzzle.centerOnTile(new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(r, c));\n};\n$b7ac0cf7b7632c81$var$beaming.clearDebugPoints = $b7ac0cf7b7632c81$var$puzzle.clearDebugPoints.bind($b7ac0cf7b7632c81$var$puzzle);\n$b7ac0cf7b7632c81$var$beaming.drawDebugPoint = function(x, y, style) {\n return $b7ac0cf7b7632c81$var$puzzle.drawDebugPoint(new (0, $hFpCu.Point)(x, y), style);\n};\n// Export\nwindow.beaming = $b7ac0cf7b7632c81$var$beaming;\n\n\n//# sourceMappingURL=index.ae5e88e1.js.map\n","/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.17\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tminDistance = this.minDistance,\n\t\t\tmaxDistance = this.maxDistance,\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(minDistance, maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0],\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]* 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","\"use strict\";","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // operators --> modify existing Colors\n\n\n\n\n\n\n\n\n\n\n // interpolators\n\n\n\n\n\n\n\n\n\n\n\n\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n\n // scale\n chroma.scales = scales;\n\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n\n var chroma_js = chroma;\n\n return chroma_js;\n\n}));\n","import { Layout } from './layout'\nimport chroma from 'chroma-js'\nimport paper, { Layer, Path, Size } from 'paper'\nimport { addClass, debounce, emitEvent, fuzzyEquals, noop, removeClass } from './util'\nimport { Item } from './item'\nimport { Mask } from './items/mask'\nimport { Modifier } from './modifier'\nimport { Beam } from './items/beam'\nimport { Collision as CollisionItem } from './items/collision'\nimport { Stateful } from './stateful'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { State } from './state'\nimport { Puzzles } from '../puzzles'\nimport { StepState } from './step'\nimport { EventListeners } from './eventListeners'\nimport { Solution } from './solution'\nimport { Interact } from './interact'\n\nconst elements = Object.freeze({\n main: document.getElementById('main'),\n message: document.getElementById('message'),\n next: document.getElementById('next'),\n previous: document.getElementById('previous'),\n puzzle: document.getElementById('puzzle'),\n puzzleId: document.getElementById('puzzle-id'),\n redo: document.getElementById('redo'),\n reset: document.getElementById('reset'),\n undo: document.getElementById('undo'),\n title: document.querySelector('title')\n})\n\n// There are various spots below that utilize setTimeout in order to process events in order and to prevent\n// long-running computations from blocking UI updates.\n// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop\nexport class Puzzle {\n connections = []\n debug = false\n error = false\n layers = {}\n message\n selectedTile\n solved = false\n\n #beams\n #beamsUpdateDelay = 30\n #collisions = {}\n #eventListeners = new EventListeners({ context: this })\n #interact\n #isUpdatingBeams = false\n #mask\n #maskQueue = []\n #solution\n #state\n #termini\n #tiles = []\n\n constructor () {\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n paper.settings.insertItems = false\n // noinspection JSCheckFunctionSignatures\n paper.setup(elements.puzzle)\n\n this.#resize()\n\n this.layers.mask = new Layer()\n this.layers.collisions = new Layer()\n this.layers.debug = new Layer()\n\n this.#eventListeners.add([\n { type: Beam.Events.Update, handler: this.#onBeamUpdate },\n { type: 'change', element: elements.puzzleId, handler: this.#onSelect },\n { type: 'click', element: elements.next, handler: this.#next },\n { type: 'click', element: elements.previous, handler: this.#previous },\n { type: 'click', element: elements.redo, handler: this.#redo },\n { type: 'click', element: elements.reset, handler: this.#reset },\n { type: 'click', element: elements.undo, handler: this.#undo },\n { type: 'keyup', handler: this.#onKeyup },\n { type: Modifier.Events.Invoked, handler: this.#onModifierInvoked },\n { type: Puzzle.Events.Mask, handler: this.#onMask },\n { type: 'resize', element: window, handler: debounce(this.#resize) },\n { type: Stateful.Events.Update, handler: this.#onStateUpdate },\n { type: 'tap', element: elements.puzzle, handler: this.#onTap }\n ])\n\n this.#interact = new Interact(elements.puzzle)\n this.#updateDropdown()\n\n this.select()\n }\n\n centerOnTile (offset) {\n const tile = this.layout.getTileByOffset(offset)\n paper.view.center = tile.center\n }\n\n clearDebugPoints () {\n this.layers.debug.clear()\n }\n\n drawDebugPoint (point, style = {}) {\n const circle = new Path.Circle(Object.assign({\n radius: 3,\n fillColor: 'red',\n strokeColor: 'white',\n strokeWidth: 1,\n center: point\n }, style))\n this.layers.debug.addChild(circle)\n }\n\n getBeamsUpdateDelay () {\n return this.#beamsUpdateDelay\n }\n\n getItems (tile) {\n return (tile ? this.#tiles.filter((t) => t === tile) : this.#tiles).flatMap((tile) => tile.items)\n }\n\n getTile (point) {\n const result = paper.project.hitTest(point.ceil(), {\n fill: true,\n match: (result) => result.item.data.type === Item.Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n })\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result\n }\n\n mask (mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask)\n throw new Error(`Duplicate mask detected: ${mask.id}`)\n }\n\n this.#maskQueue.push(mask)\n return\n }\n\n this.#mask = mask\n\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter)\n .map((tile) => new Mask(\n tile,\n typeof mask.configuration.style === 'function'\n ? mask.configuration.style(tile)\n : mask.configuration.style\n ))\n\n this.layers.mask.addChildren(tiles.map((tile) => tile.group))\n\n if (mask.message) {\n elements.message.textContent = mask.message\n }\n\n mask.onMask(this)\n\n document.body.classList.add(Puzzle.Events.Mask)\n }\n\n select (id) {\n if (id !== undefined && id === this.#state?.getId()) {\n // This ID is already selected\n return\n }\n\n try {\n this.#state = State.resolve(id)\n } catch (e) {\n this.#onError(e, 'Could not load puzzle.')\n }\n\n this.#reload()\n }\n\n unmask () {\n this.layers.mask.removeChildren()\n this.#updateMessage(this.selectedTile)\n this.#mask.onUnmask(this)\n this.#mask = undefined\n\n document.body.classList.remove(Puzzle.Events.Mask)\n\n const mask = this.#maskQueue.pop()\n if (mask) {\n // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(() => this.mask(mask), 0)\n }\n }\n\n update () {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true\n this.#updateBeams()\n }\n }\n\n updateSelectedTile (tile) {\n const previouslySelectedTile = this.selectedTile\n\n this.selectedTile = tile\n this.#state.setSelectedTile(tile)\n this.#updateMessage(tile)\n\n if (previouslySelectedTile && previouslySelectedTile !== tile) {\n previouslySelectedTile.onDeselected(tile)\n }\n\n if (tile && tile !== previouslySelectedTile) {\n tile.onSelected(previouslySelectedTile)\n }\n\n return previouslySelectedTile\n }\n\n updateState () {\n this.#state.update(Object.assign(this.#state.getCurrent(), { layout: this.layout.getState() }))\n this.#updateActions()\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #addLayers () {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer) => paper.project.addLayer(layer))\n }\n\n #next () {\n const id = Puzzles.visible.nextId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #onBeamUpdate (event) {\n const beam = event.detail.beam\n const state = event.detail.state\n\n if (state?.has(StepState.Collision)) {\n const collision = state.get(StepState.Collision)\n const collisionId = Puzzle.Collision.id(collision.point)\n const existing = this.#collisions[collisionId]\n\n if (existing) {\n existing.addBeam(beam)\n } else {\n this.#collisions[collisionId] = new Puzzle.Collision(this.layers.collisions, [beam], collision.point)\n }\n\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration\n if (mask?.beam?.equals(beam)) {\n this.unmask()\n }\n }\n\n Object.values(this.#collisions).forEach((collision) => collision.update())\n\n this.#beams\n .filter((otherBeam) => otherBeam !== beam)\n .forEach((beam) => beam.onBeamUpdated(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onError (error, message, cause) {\n this.error = true\n\n // Support exclusion of error\n if (typeof error === 'string') {\n message = error\n cause = message\n error = undefined\n }\n\n if (error) {\n console.error(error)\n }\n\n cause = cause ?? error?.cause\n if (cause) {\n console.error('cause:', cause)\n }\n\n message = message ?? error?.message ?? 'The puzzle has encountered an error, please consider reporting.'\n elements.message.textContent = message\n document.body.classList.add(Puzzle.Events.Error)\n }\n\n #onKeyup (event) {\n if (this.debug && event.key === 's') {\n this.update()\n }\n }\n\n #onMask (event) {\n console.debug('Mask event', event)\n this.mask(event.detail.mask)\n }\n\n #onModifierInvoked (event) {\n const tile = event.detail.tile\n\n this.#beams\n // Update beams in the tile being modified first\n .sort((beam) => tile.items.some((item) => item === beam) ? -1 : 0)\n .forEach((beam) => beam.onModifierInvoked(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onSelect (event) {\n this.select(event.target.value)\n }\n\n #onSolved () {\n if (this.solved) {\n return\n }\n\n this.solved = true\n\n this.updateSelectedTile(undefined)\n this.mask(Puzzle.#solvedMask)\n\n const span = document.createElement('span')\n span.classList.add('material-symbols-outlined')\n span.textContent = 'celebration'\n span.title = 'Solved!'\n\n elements.message.replaceChildren(span)\n\n document.body.classList.add(Puzzle.Events.Solved)\n emitEvent(Puzzle.Events.Solved)\n }\n\n #onStateUpdate () {\n this.updateState()\n }\n\n #onTap (event) {\n let tile\n\n if (this.solved || this.error) {\n return\n }\n\n const result = paper.project.hitTest(event.detail.point)\n\n switch (result?.item.data.type) {\n case Item.Types.mask:\n return\n case Item.Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial)\n break\n }\n\n // There is an active mask\n if (this.#mask) {\n this.#mask.onTap(this, tile)\n } else {\n const previouslySelectedTile = this.updateSelectedTile(tile)\n\n if (tile && tile === previouslySelectedTile) {\n tile.onTap(event)\n }\n }\n }\n\n #previous () {\n const id = Puzzles.visible.previousId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #redo () {\n this.#state.redo()\n this.#reload()\n }\n\n #reload () {\n this.error = false\n\n if (this.#state) {\n this.#teardown()\n }\n\n this.#setup()\n\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #removeLayers () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n paper.project.clear()\n }\n\n #reset () {\n this.#state.reset()\n this.#reload()\n }\n\n #resize () {\n const { width, height } = elements.main.getBoundingClientRect()\n elements.puzzle.style.height = height + 'px'\n elements.puzzle.style.width = width + 'px'\n paper.view.viewSize = new Size(width, height)\n }\n\n #setup () {\n // Reset the item IDs, so they are unique per-puzzle\n Item.uniqueId = 0\n\n const { layout, message, solution } = this.#state.getCurrent()\n\n this.layout = new Layout(layout)\n this.message = message\n this.#solution = new Solution(solution)\n\n this.#tiles = this.layout.tiles\n this.#termini = this.layout.items.filter((item) => item.type === Item.Types.terminus)\n this.#beams = this.#termini.flatMap((terminus) => terminus.beams)\n\n this.#addLayers()\n\n document.body.classList.add(Puzzle.Events.Loaded)\n\n const selectedTileId = this.#state.getSelectedTile()\n const selectedTile = selectedTileId\n ? this.layout.getTileByOffset(new OffsetCoordinates(...selectedTileId.split(',')))\n : undefined\n\n this.updateSelectedTile(selectedTile)\n this.update()\n this.#updateActions()\n }\n\n #teardown () {\n document.body.classList.remove(...Object.values(Puzzle.Events))\n\n this.#removeLayers()\n\n this.#tiles.forEach((tile) => tile.teardown())\n this.#tiles = []\n this.#solution?.teardown()\n this.#solution = undefined\n this.solved = false\n this.layout?.teardown()\n this.layout = undefined\n this.selectedTile = undefined\n this.#beams = []\n this.#collisions = {}\n this.#isUpdatingBeams = false\n this.#mask = undefined\n this.#termini = []\n }\n\n #undo () {\n this.#state.undo()\n this.#reload()\n }\n\n #updateActions () {\n const id = this.#state.getId()\n const title = this.#state.getTitle()\n\n // Update browser title\n elements.title.textContent = `Beaming: Puzzle ${title}`\n\n removeClass('disabled', ...Array.from(document.querySelectorAll('#actions li')))\n\n const disable = []\n\n if (!this.#state.canUndo()) {\n disable.push(elements.undo)\n }\n\n if (!this.#state.canRedo()) {\n disable.push(elements.redo)\n }\n\n if (!Puzzles.visible.has(id)) {\n // Custom puzzle\n elements.puzzleId.value = ''\n disable.push(elements.previous, elements.next)\n } else {\n elements.puzzleId.value = id\n\n if (id === Puzzles.visible.firstId) {\n disable.push(elements.previous)\n } else if (id === Puzzles.visible.lastId) {\n disable.push(elements.next)\n }\n }\n\n addClass('disabled', ...disable)\n }\n\n #updateDropdown () {\n elements.puzzleId.replaceChildren()\n for (const id of Puzzles.visible.ids) {\n const option = document.createElement('option')\n option.value = id\n option.innerText = Puzzles.titles[id]\n elements.puzzleId.append(option)\n }\n }\n\n #updateBeams () {\n const beams = this.#beams.filter((beam) => beam.isPending())\n\n if (!beams.length) {\n this.#isUpdatingBeams = false\n\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(() => {\n if (this.#solution.isSolved()) {\n this.#onSolved()\n }\n }, 0)\n return\n }\n\n if (this.debug) {\n this.layers.debug.clear()\n }\n\n beams.forEach((beam) => beam.step(this))\n\n // Ensure the UI has a chance to update between loops\n setTimeout(() => this.#updateBeams(), this.#beamsUpdateDelay)\n }\n\n #updateMessage (tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items\n .map((item) => item.getColorElements(tile))\n .find((colorElements) => colorElements.length > 0) || []\n elements.message.replaceChildren(...colorElements)\n } else {\n elements.message.textContent = this.message || 'Select a tile'\n }\n }\n\n static Collision = class {\n constructor (layer, beams, point, item = undefined) {\n this.id = Puzzle.Collision.id(point)\n this.layer = layer\n this.beams = beams\n this.point = point\n this.item = item\n }\n\n addBeam (beam) {\n if (!this.beams.some((otherBeam) => otherBeam.id === beam.id)) {\n this.beams.push(beam)\n }\n\n return this.beams\n }\n\n addItem (color) {\n this.item = new CollisionItem({ center: this.point, color })\n this.layer.addChild(this.item.group)\n }\n\n equals (other) {\n return fuzzyEquals(this.point, other?.point)\n }\n\n getColor () {\n return this.beams.length\n ? chroma.average(this.beams.map((beam) => beam.getColor())).hex()\n : undefined\n }\n\n removeItem () {\n if (this.item) {\n this.item.remove()\n this.item = undefined\n }\n }\n\n update () {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam) => this.equals(beam.getCollision()))\n\n const color = this.getColor()\n\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) {\n this.removeItem()\n }\n\n // Add missing collision items\n if (this.beams.length && !this.item) {\n this.addItem(color)\n }\n }\n\n static id (point) {\n const rounded = point.round()\n return [rounded.x, rounded.y].join(',')\n }\n }\n\n static Events = Object.freeze({\n Error: 'puzzle-error',\n Loaded: 'puzzle-loaded',\n Mask: 'puzzle-mask',\n Solved: 'puzzle-solved',\n Updated: 'puzzle-updated'\n })\n\n static Mask = class {\n constructor (configuration = {}) {\n configuration.style ??= {}\n this.configuration = configuration\n\n this.id = configuration.id\n this.message = configuration.message\n this.tileFilter = configuration.tileFilter ?? noop(true)\n this.onMask = configuration.onMask ?? noop\n this.onTap = configuration.onTap ?? noop\n this.onUnmask = configuration.onUnmask ?? noop\n }\n\n equals (other) {\n return this.id === other.id\n }\n }\n\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item) => item.type === Item.Types.beam && item.isConnected()\n\n static #solvedMask = new Puzzle.Mask({\n style: (tile) => {\n const beams = tile.items.filter(Puzzle.#connectedBeams)\n const colors = beams.flatMap((beam) => beam.getSteps(tile).flatMap((step) => step.color))\n return { fillColor: chroma.average(colors).hex() }\n },\n tileFilter: (tile) => tile.items.some(Puzzle.#connectedBeams)\n })\n}\n","import paper, { Layer } from 'paper'\nimport { CubeCoordinates } from './coordinates/cube'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { Tile } from './items/tile'\nimport { getConvertedDirection } from './util'\nimport { Stateful } from './stateful'\n\nexport class Layout extends Stateful {\n #tilesByAxial = []\n #tilesByOffset = []\n\n items = []\n layers = {}\n tiles = []\n tileSize = 120\n\n constructor (state) {\n super(state)\n\n this.type = state.type || Layout.Types.oddR\n\n const center = paper.view.center\n const parameters = Tile.parameters(this.tileSize)\n const tiles = state.tiles\n\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width\n const startingOffsetY = center.y - (height / 2)\n\n this.layers.tiles = new Layer()\n this.layers.items = new Layer()\n\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index) => {\n const length = row.length\n\n // Favor offset rows, since they will be wider\n if (length > current.length || (length === current.length && this.#isOffsetRow(index))) {\n return { index, length }\n }\n\n return current\n }, { index: 0, length: 0 })\n\n const width = (widestRow.length * parameters.width) + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0)\n const startingOffsetX = center.x - (width / 2)\n\n for (let r = 0; r < tiles.length; r++) {\n const row = tiles[r]\n const rowByAxial = new Array(row.length).fill(null)\n const rowByOffset = new Array(row.length).fill(null)\n const rowOffset = Math.floor(r / 2)\n\n for (let c = 0; c < row.length; c++) {\n const axial = new CubeCoordinates(c - rowOffset, r)\n const offset = new OffsetCoordinates(r, c)\n\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY\n }\n\n const state = row[c]\n if (!state) {\n continue\n }\n\n const tile = new Tile({ axial, offset }, layout, parameters, state)\n\n this.layers.tiles.addChild(tile.group)\n\n if (tile.items.length) {\n this.items.push(...tile.items)\n this.layers.items.addChildren(tile.items.map((item) => item.group))\n }\n\n this.tiles.push(tile)\n\n rowByAxial[axial.q] = tile\n rowByOffset[offset.c] = tile\n }\n\n this.#tilesByAxial.push(rowByAxial)\n this.#tilesByOffset.push(rowByOffset)\n }\n }\n\n getTileByAxial (axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q]\n }\n\n getTileByOffset (offset) {\n return this.#tilesByOffset[offset.r][offset.c]\n }\n\n getState () {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row) => row.map((tile) => tile?.getState() || null))\n })\n }\n\n getNeighboringTile (axial, direction) {\n return this.getTileByAxial(CubeCoordinates.neighbor(axial, getConvertedDirection(direction)))\n }\n\n teardown () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n }\n\n #isOffsetRow (index) {\n return index % 2 === 0 ? this.type === Layout.Types.evenR : this.type === Layout.Types.oddR\n }\n\n static Types = Object.freeze({\n evenR: 'even-r',\n oddR: 'odd-r'\n })\n}\n","import { OffsetCoordinates } from './offset'\n\n/**\n * @see https://www.redblobgames.com/grids/hexagons/#coordinates\n */\nexport class CubeCoordinates {\n constructor (q, r, s) {\n if (!s) s = -q - r\n this.coordinates = [q, r, s]\n this.q = q\n this.r = r\n this.s = s\n }\n\n add (other) {\n return CubeCoordinates.add(this, other)\n }\n\n equals (other) {\n return this.q === other.q && this.r === other.r && this.s === other.s\n }\n\n isNeighbor (other) {\n return CubeCoordinates.isNeighbor(this, other)\n }\n\n neighbor (direction) {\n return CubeCoordinates.neighbor(this, direction)\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static add (a, b) {\n return new CubeCoordinates(a.q + b.q, a.r + b.r)\n }\n\n static direction (direction) {\n if (direction === 0) direction = 6\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return CubeCoordinates.directions[6 - direction]\n }\n\n static directions = [\n new CubeCoordinates(1, 0),\n new CubeCoordinates(1, -1),\n new CubeCoordinates(0, -1),\n new CubeCoordinates(-1, 0),\n new CubeCoordinates(-1, 1),\n new CubeCoordinates(0, 1)\n ]\n\n static isNeighbor (a, b) {\n return CubeCoordinates.directions\n .map((direction) => CubeCoordinates.add(a, direction))\n .some((neighbor) => neighbor.equals(b))\n }\n\n static neighbor (start, direction) {\n return CubeCoordinates.add(start, CubeCoordinates.direction(direction))\n }\n\n static toOffsetCoordinates (axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2\n return new OffsetCoordinates(c, axial.r)\n }\n}\n","import { CubeCoordinates } from './cube'\n\nexport class OffsetCoordinates {\n constructor (r, c) {\n this.coordinates = [r, c]\n this.r = r\n this.c = c\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static toAxialCoordinates (offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2\n return new CubeCoordinates(q, offset.r)\n }\n}\n","import { Color, Path, Point } from 'paper'\nimport { Item } from '../item'\nimport { itemFactory } from '../itemFactory'\nimport { emitEvent, getPointBetween } from '../util'\nimport { modifierFactory } from '../modifierFactory'\n\nexport class Tile extends Item {\n selected = false\n\n #ui\n\n constructor (coordinates, layout, parameters, state) {\n super(null, state, { locked: false })\n\n this.#ui = Tile.ui(layout, parameters, state, { coordinates, type: this.type })\n\n this.center = this.#ui.center\n this.coordinates = coordinates\n this.hexagon = this.#ui.hexagon\n this.parameters = parameters\n this.styles = this.#ui.styles\n\n this.group.addChildren([this.#ui.hexagon, this.#ui.indicator])\n\n // These need to be last, since they reference this\n this.items = (state.items || [])\n .map((state) => itemFactory(this, state))\n .filter((item) => item !== undefined)\n\n this.modifiers = (state.modifiers || [])\n .map((state) => modifierFactory(this, state))\n .filter((modifier) => modifier !== undefined)\n\n this.update()\n }\n\n addItem (item) {\n this.items.unshift(item)\n this.update()\n }\n\n addModifier (modifier) {\n this.modifiers.unshift(modifier)\n this.update()\n }\n\n afterModify () {\n this.setStyle(this.selected ? 'selected' : 'default')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: false }))\n }\n\n beforeModify () {\n this.group.bringToFront()\n this.setStyle('edit')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: true }))\n }\n\n getState () {\n const state = { type: this.type }\n\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item) => item.type !== Item.Types.beam).map((item) => item.getState())\n if (items.length) {\n state.items = items\n }\n\n const modifiers = this.modifiers.map((modifier) => modifier.getState())\n if (modifiers.length) {\n state.modifiers = modifiers\n }\n\n return state\n }\n\n onTap (event) {\n console.debug(this.coordinates.offset.toString(), this)\n this.items.forEach((item) => item.onTap(event))\n }\n\n onDeselected (selectedTile) {\n this.selected = false\n this.#ui.hexagon.style = this.styles.default\n this.items.forEach((item) => item.onDeselected())\n this.modifiers.forEach((modifier) => modifier.detach())\n\n emitEvent(Tile.Events.Deselected, { selectedTile, deselectedTile: this })\n }\n\n onSelected (deselectedTile) {\n this.selected = true\n this.group.bringToFront()\n this.#ui.hexagon.style = this.styles.selected\n this.items.forEach((item) => item.onSelected())\n this.modifiers.forEach((modifier) => modifier.attach())\n }\n\n removeItem (item) {\n const index = this.items.indexOf(item)\n if (index >= 0) {\n this.items.splice(index, 1)\n this.update()\n }\n }\n\n removeModifier (modifier) {\n const index = this.modifiers.indexOf(modifier)\n if (index >= 0) {\n this.modifiers.splice(index, 1)\n this.update()\n }\n }\n\n setStyle (style) {\n this.hexagon.set(this.styles[style])\n }\n\n teardown () {\n this.modifiers.forEach((modifier) => modifier.detach())\n }\n\n toString () {\n return this.coordinates.offset.toString()\n }\n\n update () {\n super.update()\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0\n }\n\n static parameters (height) {\n const circumradius = height / 2\n const width = Math.sqrt(3) * circumradius\n const inradius = width / 2\n const offsetY = height * (3 / 4)\n\n return {\n circumradius,\n height,\n inradius,\n offsetY,\n width\n }\n }\n\n static ui (layout, parameters, configuration, data) {\n const center = new Point(\n layout.startingOffsetX + parameters.inradius + layout.column * parameters.width,\n layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY\n )\n\n const dashWidth = parameters.circumradius / 10\n\n const styles = Object.assign(\n {},\n Tile.Styles,\n {\n edit: Object.assign({ dashArray: [dashWidth, dashWidth] }, Tile.Styles.edit)\n },\n configuration.style || {}\n )\n\n const hexagon = new Path.RegularPolygon({\n center,\n closed: true,\n data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n })\n\n const indicator = new Path.RegularPolygon({\n center: getPointBetween(hexagon.segments[1].point, center, (length) => length / 3),\n data: { collidable: false },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: { fillColor: '#ccc' }\n })\n\n return { center, hexagon, indicator, styles }\n }\n\n static Events = Object.freeze({\n Deselected: 'tile-deselected',\n Selected: 'tile-selected'\n })\n\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new Color('white'),\n strokeColor: new Color('#666'),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new Color('black'),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new Color('black'),\n strokeWidth: 2\n }\n })\n}\n","import { capitalize } from './util'\nimport { CompoundPath, Group } from 'paper'\nimport { Stateful } from './stateful'\n\nexport class Item extends Stateful {\n center\n data\n group\n id = Item.uniqueId++\n // Whether the item can be clicked on\n locked\n parent\n sortOrder = 100\n type\n\n constructor (parent, state, configuration) {\n super(state)\n\n this.type = state?.type || configuration?.type\n this.data = Object.assign({ id: this.id, type: this.type }, configuration?.data || {})\n this.locked = configuration?.locked !== false\n\n if (parent) {\n this.center = parent.center\n }\n\n this.parent = parent\n this.group = new Group({ data: this.data, locked: this.locked })\n }\n\n equals (otherItem) {\n return otherItem instanceof Item && this.id === otherItem.id\n }\n\n getColorElements () {\n return []\n }\n\n getCompoundPath () {\n return new CompoundPath({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({ insert: false }).children\n .filter((child) => child.data.collidable !== false)\n })\n }\n\n getIndex () {\n return this.group.index\n }\n\n getLayer () {\n return this.group.parent\n }\n\n onTap () {}\n\n onCollision ({ collisionStep }) {\n return collisionStep\n }\n\n onDeselected () { }\n\n onInitialization () {}\n\n onSelected () {}\n\n remove () {\n this.group.remove()\n }\n\n toString () {\n return `[${this.type}:${this.id}]`\n }\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'beam',\n 'collision',\n 'filter',\n 'mask',\n 'portal',\n 'reflector',\n 'terminus',\n 'tile',\n 'wall'\n ].map((type) => [type, capitalize(type)])))\n\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0\n}\n","import { emitEvent } from './util'\n\nexport class Stateful {\n #state = {}\n\n constructor (state) {\n this.setState(state)\n }\n\n getState () {\n return structuredClone(this.#state)\n }\n\n setState (state) {\n this.#state = structuredClone(state)\n }\n\n updateState (updater, dispatchEvent = true) {\n updater(this.#state)\n\n if (dispatchEvent) {\n emitEvent(Stateful.Events.Update, { object: this })\n }\n\n return this.getState()\n }\n\n static Events = Object.freeze({\n Update: 'state-update'\n })\n}\n","import { Filter } from './items/filter'\nimport { Portal } from './items/portal'\nimport { Terminus } from './items/terminus'\nimport { Reflector } from './items/reflector'\nimport { Wall } from './items/wall'\nimport { Item } from './item'\n\nexport function itemFactory (parent, configuration) {\n let item\n\n switch (configuration.type) {\n case Item.Types.filter:\n item = new Filter(parent, configuration)\n break\n case Item.Types.portal:\n item = new Portal(parent, configuration)\n break\n case Item.Types.terminus:\n item = new Terminus(parent, configuration)\n break\n case Item.Types.reflector:\n item = new Reflector(parent, configuration)\n break\n case Item.Types.wall:\n item = new Wall(parent, configuration)\n break\n default:\n console.error('Ignoring item with unknown type:', configuration.type)\n break\n }\n\n if (item) {\n item.onInitialization()\n }\n\n return item\n}\n","import chroma from 'chroma-js'\nimport { Item } from '../item'\nimport { Color, Path } from 'paper'\nimport { movable } from '../modifiers/move'\nimport { getColorElement } from '../util'\nimport { StepState } from '../step'\n\nexport class Filter extends movable(Item) {\n constructor (tile, { color }) {\n super(...arguments)\n\n this.color = chroma.average(Array.isArray(color) ? color : [color]).hex()\n\n const fillColor = new Color(color)\n fillColor.alpha = 0.25\n\n // TODO: update to something else? prism?\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n\n getColorElements () {\n return [getColorElement(this.color)]\n }\n\n onCollision ({ currentStep, nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(\n currentStep.state.has(StepState.Filter)\n ? { colors: nextStep.colors.concat([this.color]) }\n : { state: new StepState({ insertAbove: this }, new StepState.Filter()) }\n )\n }\n}\n","import { Modifier } from '../modifier'\nimport { Puzzle } from '../puzzle'\nimport { emitEvent } from '../util'\nimport { Item } from '../item'\n\nexport class Move extends Modifier {\n #mask\n\n name = 'drag_pan'\n title = 'Move'\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter(Move.movable)\n if (this.#mask || !items.length) {\n return\n }\n\n const mask = new Puzzle.Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: () => this.tile.beforeModify(),\n onUnmask: () => this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n })\n\n this.#mask = mask\n\n emitEvent(Puzzle.Events.Mask, { mask })\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.movable)\n }\n\n moveItems (tile) {\n const items = this.tile.items.filter(Move.movable)\n items.forEach((item) => item.move(tile))\n return {\n moved: [Move.data(this.tile, tile, items)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some(Modifier.immutable) ||\n (tile.items.filter((item) => item.type !== Item.Types.beam).length > 0 && !(tile === this.tile))\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Invoked, data)\n } else {\n puzzle.unmask()\n }\n\n this.#mask = undefined\n }\n\n static data (fromTile, toTile, items) {\n return { fromTile, toTile, items }\n }\n\n static movable (item) {\n return item.movable\n }\n}\n\n/**\n * Move an item from one tile to another.\n * @param SuperClass\n * @returns {{new(*, *): MovableItem, movable: boolean, prototype: MovableItem}}\n */\nexport const movable = (SuperClass) => class MovableItem extends SuperClass {\n movable\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.movable = configuration.movable !== false\n }\n\n move (tile) {\n this.parent.removeItem(this)\n\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center)\n this.group.position = this.group.position.subtract(vector)\n\n // Update tile reference\n this.parent = tile\n this.parent.addItem(this)\n this.center = this.parent.center\n\n this.onMove()\n }\n\n onMove () {}\n}\n","import { capitalize, emitEvent } from './util'\nimport { Puzzle } from './puzzle'\nimport { Stateful } from './stateful'\nimport { EventListeners } from './eventListeners'\nimport { Interact } from './interact'\n\nconst modifiersImmutable = document.getElementById('modifiers-immutable')\nconst modifiersMutable = document.getElementById('modifiers-mutable')\nconst navigator = window.navigator\n\nlet uniqueId = 0\n\nexport class Modifier extends Stateful {\n #container\n #down = false\n #eventListener = new EventListeners({ context: this })\n #mask\n #selectionTime = 500\n #timeoutId\n\n configuration\n element\n disabled = false\n id = uniqueId++\n immutable = false\n name\n selected = false\n tile\n title\n type\n\n constructor (tile, state) {\n super(state)\n\n this.tile = tile\n this.type = state.type\n }\n\n /**\n * Attach the modifier to the DOM and add listeners.\n */\n attach () {\n const li = this.#container = document.createElement('li')\n\n li.classList.add(['modifier', this.type.toLowerCase()].join('-'))\n\n if (this.immutable) {\n this.disabled = true\n }\n\n const span = this.element = document.createElement('span')\n\n span.classList.add('material-symbols-outlined', 'fill')\n\n li.append(span)\n\n this.update()\n\n this.#eventListener.add([\n { type: 'deselected', handler: this.onDeselected },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp }\n ], { element: li })\n\n this.immutable ? modifiersImmutable.append(li) : modifiersMutable.append(li)\n }\n\n /**\n * Remove listeners and the modifier from the DOM.\n */\n detach () {\n if (!this.#container) {\n return\n }\n\n Modifier.deselect()\n\n this.#eventListener.remove()\n this.#container.remove()\n\n this.selected = false\n this.element = undefined\n this.#container = undefined\n }\n\n dispatchEvent (event, detail) {\n emitEvent(event, Object.assign({}, detail || {}, { modifier: this, tile: this.tile }))\n }\n\n equals (other) {\n return other instanceof Modifier && this.id === other.id\n }\n\n move (tile) {\n this.remove()\n tile.addModifier(this)\n this.tile = tile\n }\n\n moveFilter (tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier) => modifier.type === Modifier.Types.immutable)\n }\n\n onDeselected () {\n this.update({ selected: false })\n this.tile.afterModify()\n this.dispatchEvent(Modifier.Events.Deselected)\n }\n\n onPointerDown (event) {\n if (event.button !== 0) {\n // Support toggle on non-primary pointer button\n this.onToggle(event)\n } else {\n this.#down = true\n if (\n !this.#mask &&\n !this.tile.modifiers.some((modifier) => [Modifier.Types.immutable, Modifier.Types.lock].includes(modifier.type))\n ) {\n this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime)\n }\n }\n }\n\n onPointerUp (event) {\n clearTimeout(this.#timeoutId)\n\n if (this.#down && !this.disabled && !this.selected) {\n switch (event.type) {\n case 'pointerleave': {\n // Support swiping up on pointer device\n this.onToggle(event)\n break\n }\n case 'pointerup': {\n this.onTap(event)\n break\n }\n }\n }\n\n this.#down = false\n }\n\n onSelected () {\n Modifier.deselect()\n\n navigator.vibrate(Interact.vibratePattern)\n\n this.update({ selected: true })\n\n const mask = this.#mask = new Puzzle.Mask({\n id: this.toString(),\n onMask: () => this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n })\n\n this.dispatchEvent(Puzzle.Events.Mask, { mask })\n }\n\n onTap () {\n this.selected = false\n }\n\n onToggle () {\n navigator.vibrate(Interact.vibratePattern)\n }\n\n remove () {\n this.detach()\n this.tile.removeModifier(this)\n this.tile = null\n }\n\n toString () {\n return [this.name, this.id].join(':')\n }\n\n update (options) {\n options = Object.assign(\n { disabled: this.disabled, selected: this.selected, name: this.name, title: this.title },\n options || {}\n )\n\n if (!this.immutable) {\n this.disabled = options.disabled\n }\n\n this.name = options.name\n this.title = options.title\n this.selected = options.selected\n\n if (this.#container) {\n this.#container.classList.toggle('disabled', this.disabled)\n this.#container.classList.toggle('selected', this.selected)\n this.element.textContent = this.name\n this.element.title = this.title\n }\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile\n\n this.move(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Moved, { fromTile })\n } else {\n Modifier.deselect()\n puzzle.unmask()\n }\n\n this.#mask = undefined\n this.update({ selected: false })\n }\n\n #moveFilter (tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile)\n }\n\n static deselect () {\n const selectedModifier = document.querySelector('.modifiers .selected')\n if (selectedModifier) {\n selectedModifier.dispatchEvent(new CustomEvent('deselected'))\n }\n }\n\n static immutable (modifier) {\n return modifier.type === Modifier.Types.immutable\n }\n\n static Events = Object.freeze({\n Deselected: 'modifier-deselected',\n Invoked: 'modifier-invoked',\n Moved: 'modifier-moved'\n })\n\n static Types = Object.freeze(Object.fromEntries([\n 'immutable',\n 'lock',\n 'move',\n 'rotate',\n 'swap',\n 'toggle'\n ].map((type) => [type, capitalize(type)])))\n}\n","export class EventListeners {\n #events = []\n #options = { element: document }\n\n constructor (options = {}) {\n this.#options = Object.assign(this.#options, options)\n }\n\n add (events, options = {}) {\n this.#events = this.#events.concat(events.map((event) => {\n event = Object.assign({}, this.#options, options, event)\n if (!event.type) {\n throw new Error('Event type is required')\n }\n if (event.context) {\n event.handler = event.handler.bind(event.context)\n }\n event.element.addEventListener(event.type, event.handler, event.options)\n return event\n }))\n }\n\n remove () {\n this.#events.forEach((event) => event.element.removeEventListener(event.type, event.handler))\n this.#events = []\n }\n}\n","import paper, { Point } from 'paper'\nimport { Cache } from './cache'\nimport { EventListeners } from './eventListeners'\n\nexport class Interact {\n #bounds\n #cache = new Cache(Object.values(Interact.CacheKeys))\n #element\n #eventListener = new EventListeners({ context: this })\n #offset\n\n constructor (element) {\n this.#bounds = element.getBoundingClientRect()\n this.#element = element\n this.#offset = new Point(this.#bounds.left, this.#bounds.top)\n this.#eventListener.add([\n { type: 'pointercancel', handler: this.onPointerUp },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointermove', handler: this.onPointerMove },\n { type: 'pointerout', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp },\n { type: 'wheel', handler: this.onMouseWheel, options: { passive: false } }\n ], { element })\n }\n\n onMouseWheel (event) {\n event.preventDefault()\n this.#zoom(new Point(event.offsetX, event.offsetY), event.deltaY, 1.05)\n }\n\n onPan (event) {\n const point = paper.view.viewToProject(Interact.point(event))\n const pan = this.#getGesture(Interact.GestureKeys.Pan)\n\n if (!pan) {\n this.#setGesture(Interact.GestureKeys.Pan, { from: point })\n return\n }\n\n const center = pan.from.subtract(point).add(paper.view.center)\n\n // Allow a little wiggle room to prevent panning on tap\n if (paper.view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains('grab')) {\n document.body.classList.add('grab')\n }\n\n // Center on the cursor\n paper.view.center = center\n }\n }\n\n onPinch (events) {\n const pointer0 = events[0]\n const pointer1 = events[1]\n\n const point0 = Interact.point(pointer0)\n const point1 = Interact.point(pointer1)\n const distance = point0.getDistance(point1)\n\n const pinch = this.#getGesture(Interact.GestureKeys.Pinch)\n if (!pinch) {\n this.#setGesture(Interact.GestureKeys.Pinch, { distance })\n return\n }\n\n const center = point0.add(point1).divide(2).subtract(this.#offset)\n const scale = distance / pinch.distance\n const delta = (pinch.distance - distance) * scale\n\n this.#zoom(center, delta, 1.01)\n\n pinch.distance = distance\n }\n\n onPointerDown (event) {\n this.#cache.get(Interact.CacheKeys.Down).set(event.pointerId, event)\n }\n\n onPointerMove (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n // Ignore events until there is a pointer down event\n return\n }\n\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = Interact.point(event).subtract(Interact.point(down)).length\n if (diff > 1) {\n this.#cache.get(Interact.CacheKeys.Move).set(event.pointerId, event)\n\n const events = this.#cache.get(Interact.CacheKeys.Move).values()\n if (events.length === 2) {\n this.onPinch(events)\n } else {\n this.onPan(event)\n }\n }\n }\n\n onPointerUp (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n return\n }\n\n if (\n this.#cache.length(Interact.CacheKeys.Down) === 1 &&\n !this.#cache.get(Interact.CacheKeys.Move).get(event.pointerId)\n ) {\n this.onTap(down)\n }\n\n document.body.classList.remove('grab')\n\n this.#cache.get(Interact.CacheKeys.Down).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Move).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pan)\n\n if (this.#cache.length(Interact.CacheKeys.Move) < 2) {\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pinch)\n }\n }\n\n onTap (event) {\n const point = paper.view.viewToProject(Interact.point(event).subtract(this.#offset))\n this.#element.dispatchEvent(new CustomEvent(Interact.GestureKeys.Tap, { detail: { event, point } }))\n }\n\n #getGesture (key) {\n return this.#cache.get(Interact.CacheKeys.Gesture).get(key)\n }\n\n #setGesture (key, value) {\n this.#cache.get(Interact.CacheKeys.Gesture).set(key, value)\n }\n\n #zoom (point, delta, factor) {\n const zoom = Math.max(\n Math.min(\n delta < 0 ? paper.view.zoom * factor : paper.view.zoom / factor,\n Interact.maxZoom\n ),\n Interact.minZoom\n )\n\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = paper.view.viewToProject(point)\n const touchOffset = touchPoint.subtract(paper.view.center)\n\n // Adjust center towards cursor location\n const zoomOffset = touchPoint\n .subtract(touchOffset.multiply(paper.view.zoom / zoom))\n .subtract(paper.view.center)\n\n paper.view.zoom = zoom\n paper.view.center = paper.view.center.add(zoomOffset)\n }\n\n static point (event) {\n return new Point(event.clientX, event.clientY)\n }\n\n static CacheKeys = Object.freeze({\n Down: 'down',\n Move: 'move',\n Gesture: 'gesture'\n })\n\n static GestureKeys = Object.freeze({\n Pan: 'pan',\n Pinch: 'pinch',\n Tap: 'tap'\n })\n\n static maxZoom = 2\n static minZoom = 0.5\n static vibratePattern = 25\n}\n","export class Cache {\n #cache = {}\n #hasKeys\n #keys\n\n constructor (keys = []) {\n this.#keys = keys\n this.#hasKeys = keys.length !== 0\n\n keys.forEach((key) => { this.#cache[key] = new Cache() })\n }\n\n set (key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) {\n throw new Error(`Invalid key: ${key}`)\n }\n\n this.#cache[key] = item\n }\n\n get (key) {\n return key === undefined ? this.#cache : this.#cache[key]\n }\n\n keys (key) {\n return Object.keys(this.#get(key))\n }\n\n length (key) {\n return this.keys(key).length\n }\n\n unset (key) {\n delete this.#cache[key]\n }\n\n values (key) {\n return Object.values(this.#get(key))\n }\n\n #get (key) {\n const value = this.get(key)\n return value instanceof Cache ? value.get() : value\n }\n}\n","import chroma from 'chroma-js'\nimport { deepEqual, noop } from './util'\n\nexport class Step {\n color\n colors\n connected\n direction\n done\n insertAbove\n onAdd\n onRemove\n point\n pathIndex\n segmentIndex\n state\n tile\n\n constructor (\n index,\n tile,\n colors,\n direction,\n point,\n pathIndex,\n segmentIndex,\n connected,\n insertAbove,\n done,\n state,\n onAdd,\n onRemove\n ) {\n if (state && !(state instanceof StepState)) {\n throw new Error('Step.state must be instance of StepState')\n }\n\n this.colors = colors ? (Array.isArray(colors) ? Array.from(colors) : [colors]) : []\n\n if (this.colors.length) {\n this.color = chroma.average(this.colors).hex()\n }\n\n this.connected = connected ?? true\n this.direction = direction\n this.done = done ?? false\n this.index = index\n this.insertAbove = insertAbove\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? noop\n this.onRemove = onRemove ?? noop\n this.point = point\n this.pathIndex = pathIndex\n this.segmentIndex = segmentIndex\n this.state = state ?? new StepState()\n this.tile = tile\n }\n\n copy (settings) {\n return new Step(\n settings.index ?? this.index,\n settings.tile ?? this.tile,\n settings.colors ?? settings.color ?? this.colors,\n settings.direction ?? this.direction,\n settings.point ?? this.point,\n settings.pathIndex ?? this.pathIndex,\n settings.segmentIndex ?? this.segmentIndex,\n settings.connected ?? this.connected,\n settings.insertAbove ?? this.insertAbove,\n settings.done ?? this.done,\n settings.state ?? new StepState(this.state),\n settings.onAdd ?? this.onAdd,\n settings.onRemove ?? this.onRemove\n )\n }\n\n equals (step) {\n return deepEqual(this, step)\n }\n}\n\nexport class StepState {\n #cache = {}\n\n constructor () {\n const settings = Object.assign({}, ...arguments)\n Object.keys(settings).forEach((key) => { this[key] = settings[key] })\n }\n\n copy (...settings) {\n return new StepState(...([this].concat(settings)))\n }\n\n get (Class) {\n return this.#keys(Class).map((key) => this[key]).find((value) => value)\n }\n\n has (Class) {\n return this.#keys(Class).some((key) => this[key])\n }\n\n #keys (Class) {\n return (this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, [])))\n }\n\n static Collision = class StepCollision {\n collision\n\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor (collision) {\n this.collision = collision\n }\n }\n\n static Filter = class StepFilter {\n filter = {}\n }\n\n static MergeInto = class StepMergeInto {\n mergeInto\n\n constructor (beam) {\n this.mergeInto = { beam }\n }\n }\n\n static MergeWith = class StepMergeWith {\n mergeWith\n\n constructor (mergeWith) {\n this.mergeWith = mergeWith\n }\n }\n\n static Portal = class StepPortal {\n portal\n\n constructor (entryPortal, exitPortal) {\n this.portal = { entryPortal, exitPortal }\n }\n }\n\n static Reflector = class StepReflector {\n reflector\n\n constructor (item) {\n this.reflector = { item }\n }\n }\n\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection\n\n constructor (terminus, opening) {\n this.terminusConnection = { terminus, opening }\n }\n }\n}\n","import { movable } from '../modifiers/move'\nimport { Item } from '../item'\nimport { Path, Point } from 'paper'\nimport { rotatable } from '../modifiers/rotate'\nimport { StepState } from '../step'\nimport { Puzzle } from '../puzzle'\nimport { coalesce, getOppositeDirection } from '../util'\n\nexport class Portal extends movable(rotatable(Item)) {\n #directions = {}\n\n constructor (tile, state) {\n // Only allow rotation if direction is defined\n super(tile, state, { rotatable: state.direction !== undefined })\n\n this.direction = state.direction\n\n const height = tile.parameters.circumradius / 3\n const width = tile.parameters.circumradius / 5\n\n const style = {\n fillColor: 'black',\n strokeColor: 'white',\n strokeWidth: 2\n }\n\n const children = []\n\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new Path.Ellipse({\n center: tile.center,\n radius: [width, height],\n style\n })\n\n children.push(ellipse)\n\n const ring = new Path.Ellipse({\n center: tile.center,\n radius: [width - style.strokeWidth * 2, height - style.strokeWidth * 2],\n style\n })\n\n children.push(ring)\n\n if (this.rotatable) {\n const pointer = new Path({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new Point(0, height)),\n tile.center.subtract(new Point(0, height)),\n tile.center.subtract(new Point(width * 2.5, 0))\n ],\n style: {\n fillColor: 'black'\n }\n }).subtract(ellipse)\n\n children.unshift(pointer)\n }\n\n this.group.addChildren(children)\n\n if (this.rotatable) {\n // Properly align items with hexagonal rotation\n this.rotateGroup(1)\n }\n }\n\n get (direction) {\n return this.#directions[direction]\n }\n\n onCollision ({ beam, currentStep, nextStep, puzzle }) {\n const portalState = currentStep.state.get(StepState.Portal)\n if (!portalState) {\n const stepIndex = nextStep.index\n const entryDirection = getOppositeDirection(nextStep.direction)\n const existing = coalesce(this.get(entryDirection), { stepIndex })\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(\n this.toString(),\n 'ignoring beam trying to enter through a direction which is already occupied:',\n entryDirection\n )\n return\n }\n\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: () => this.update(entryDirection, { stepIndex }),\n onRemove: () => this.update(entryDirection),\n state: nextStep.state.copy(new StepState.Portal(this))\n })\n } else if (portalState.exitPortal === this) {\n // Handle exit collision\n return nextStep.copy({ insertAbove: this })\n }\n\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [this.id, nextStep.index].join(':')\n const destinationId = beam.getState().moves?.[stateId]\n\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item) =>\n item.type === Item.Types.portal &&\n !item.equals(this) &&\n // Portal must not already have a beam occupying the desired direction\n !item.get(Portal.getExitDirection(nextStep, portalState.entryPortal, item)) &&\n (destinationId === undefined || item.id === destinationId) &&\n (\n // Entry portals without defined direction can exit from any other portal.\n this.getDirection() === undefined ||\n // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined ||\n // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()\n )\n )\n\n if (destinations.length === 0) {\n console.debug(this.toString(), 'no valid destinations found')\n // This will cause the beam to stop\n return currentStep\n }\n\n if (destinations.length === 1) {\n // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState)\n } else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal) => portal.parent)\n const mask = new Puzzle.Mask(\n {\n beam,\n id: stateId,\n onMask: () => currentStep.tile.beforeModify(),\n onTap: (puzzle, tile) => {\n const destination = destinations.find((portal) => portal.parent === tile)\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState))\n beam.updateState((state) => {\n if (!state.moves) {\n state.moves = {}\n }\n // Store this decision in beam state\n state.moves[stateId] = destination.id\n })\n puzzle.unmask()\n }\n },\n onUnmask: () => currentStep.tile.afterModify(),\n tileFilter: (tile) => {\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile) => destinationTile === tile))\n }\n }\n )\n\n puzzle.updateSelectedTile(currentStep.tile)\n puzzle.mask(mask)\n\n // This will cause the beam to stop\n return currentStep\n }\n }\n\n update (direction, data) {\n this.#directions[direction] = data\n }\n\n #getStep (beam, portal, nextStep, portalState) {\n const direction = Portal.getExitDirection(nextStep, portalState.entryPortal, portal)\n const stepIndex = nextStep.index\n return nextStep.copy({\n connected: false,\n direction,\n insertAbove: portal,\n onAdd: () => portal.update(direction, { stepIndex }),\n onRemove: () => portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new StepState.Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n })\n }\n\n static getExitDirection (step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction\n }\n}\n","import { Modifier } from '../modifier'\nimport { addDirection, coalesce } from '../util'\n\nexport class Rotate extends Modifier {\n clockwise\n title = 'Rotate'\n\n constructor (tile, state, configuration = {}) {\n super(...arguments)\n\n this.clockwise = coalesce(true, state.clockwise, configuration.clockwise)\n this.name = Rotate.Names[this.clockwise ? 'right' : 'left']\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.rotatable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter((item) => item.rotatable)\n items.forEach((item) => item.rotate(this.clockwise))\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n onToggle () {\n super.onToggle()\n\n this.clockwise = !this.clockwise\n this.updateState((state) => { state.clockwise = this.clockwise })\n this.update({ name: Rotate.Names[this.clockwise ? 'right' : 'left'] })\n }\n\n static Names = Object.freeze({ left: 'rotate_left', right: 'rotate_right ' })\n}\n\n/**\n * A mixin for Item which provides rotate behaviors.\n */\nexport const rotatable = (SuperClass) => class RotatableItem extends SuperClass {\n direction\n\n rotatable\n rotation = 0\n rotationDegrees\n\n constructor (parent, state, configuration = {}) {\n super(...arguments)\n\n this.direction = coalesce(state.direction, configuration.direction)\n this.rotatable = coalesce(true, state.rotatable, configuration.rotatable)\n this.rotationDegrees = coalesce(60, state.rotationDegrees, configuration.rotationDegrees)\n this.rotation = coalesce(0, state.rotation, configuration.rotation) % this.getMaxRotation()\n }\n\n // Get the direction of an item with rotation factored in\n getDirection (direction) {\n direction = direction ?? this.direction\n return direction === undefined\n ? direction\n : addDirection(direction, this.rotation)\n }\n\n getMaxRotation () {\n return (360 / this.rotationDegrees)\n }\n\n onInitialization () {\n super.onInitialization()\n\n this.rotateGroup(this.rotation)\n\n if (this.direction !== undefined) {\n // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction)\n }\n }\n\n rotateGroup (rotation) {\n if (this.rotatable) {\n this.group.rotate(rotation * this.rotationDegrees, this.center)\n }\n }\n\n rotate (clockwise) {\n const rotation = clockwise === false ? -1 : 1\n\n this.rotation = (rotation + this.rotation) % this.getMaxRotation()\n\n this.updateState((state) => { state.rotation = this.rotation })\n this.rotateGroup(rotation)\n }\n}\n","import chroma from 'chroma-js'\nimport { Path } from 'paper'\nimport { toggleable } from '../modifiers/toggle'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getColorElements, emitEvent, getOppositeDirection, addDirection, subtractDirection } from '../util'\nimport { Beam } from './beam'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Terminus extends movable(rotatable(toggleable(Item))) {\n sortOrder = 2\n\n #ui\n\n constructor (tile, state) {\n super(...arguments)\n\n const colors = state.openings.filter((opening) => opening?.color)\n .flatMap((opening) => Array.isArray(opening.color) ? opening.color : [opening.color])\n const color = chroma.average(\n colors.length ? colors : (Array.isArray(state.color) ? state.color : [state.color])\n ).hex()\n\n const openings = state.openings.map((state, direction) =>\n state\n ? new Terminus.#Opening(\n state.color || color,\n direction,\n state.connected,\n state.on\n )\n : state\n ).filter((opening) => opening)\n\n this.#ui = Terminus.ui(tile, color, openings)\n\n this.group.addChildren([...this.#ui.openings, this.#ui.terminus])\n\n this.color = color\n this.openings = openings\n this.radius = this.#ui.radius\n\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening) => new Beam(this, state.openings[opening.direction], opening))\n\n this.update()\n }\n\n getColorElements () {\n return getColorElements(this.openings.map((opening) => opening.color))\n }\n\n getOpening (direction) {\n return this.openings.find((opening) => opening.direction === direction)\n }\n\n onMove () {\n this.beams.forEach((beam) => beam.remove())\n }\n\n onCollision ({ beam, collisionStep, currentStep, existingNextStep, nextStep }) {\n console.debug(this.toString(), 'collision', beam.toString())\n\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), 'ignoring starting terminus collision')\n return\n }\n\n const directionFrom = getOppositeDirection(currentStep.direction)\n\n // Take rotation of terminus into account\n const opening = this.openings.find((opening) => this.getDirection(opening.direction) === directionFrom)\n if (\n opening && opening.color === nextStep.color && (\n !opening.on ||\n // When re-evaluating history of an already connected opening\n (opening.connected && existingNextStep?.state.get(StepState.TerminusConnection)?.terminus.equals(this))\n )\n ) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), 'terminus connection', this.toString(), opening)\n return nextStep.copy({\n done: true,\n onAdd: () => {\n nextStep.onAdd()\n this.onConnection(opening.direction)\n },\n onRemove: () => {\n nextStep.onRemove()\n this.onDisconnection(opening.direction)\n },\n state: nextStep.state.copy(new StepState.TerminusConnection(this, opening))\n })\n }\n\n // Otherwise, treat this as a collision\n return collisionStep\n }\n\n onConnection (direction) {\n const opening = this.getOpening(direction)\n\n if (opening.connected) {\n // Already connected\n return\n }\n\n opening.connect()\n this.update()\n\n emitEvent(Terminus.Events.Connection, { terminus: this, opening })\n }\n\n onDisconnection (direction) {\n const opening = this.getOpening(direction)\n\n if (!opening.connected) {\n // Already disconnected\n return\n }\n\n opening.disconnect()\n this.update()\n\n emitEvent(Terminus.Events.Disconnection, { terminus: this, opening })\n }\n\n onToggle () {\n this.updateState((state) => {\n this.openings.filter((opening) => !opening.connected).forEach((opening) => {\n opening.toggle()\n state.openings[opening.direction].on = opening.on\n })\n })\n this.update()\n }\n\n update () {\n this.beams.forEach((beam) => {\n const opening = beam.getOpening()\n const item = this.#ui.openings.find((item) => item.data.direction === opening.direction)\n item.opacity = opening.on ? 1 : Terminus.#openingOffOpacity\n })\n }\n\n static #openingOffOpacity = 0.3\n\n static ui (tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2\n\n const terminus = new Path.RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n })\n\n const openings = configuration.map((opening) => {\n const direction = opening.direction\n\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[subtractDirection(direction, 1)].point\n const p2 = terminus.segments[addDirection(direction, 2)].point\n\n const vector = p2.subtract(p1)\n\n vector.angle += 120\n\n const p3 = p1.subtract(vector)\n\n return new Path({\n closed: true,\n data: { collidable: false, direction },\n fillColor: opening.color,\n opacity: opening.on ? 1 : Terminus.#openingOffOpacity,\n segments: [p1, p2, p3]\n })\n })\n\n return { openings, radius, terminus }\n }\n\n static #Opening = class {\n constructor (color, direction, connected, on) {\n this.colors = Array.isArray(color) ? color : [color]\n this.color = chroma.average(this.colors).hex()\n this.direction = direction\n this.connected = connected === true\n this.on = on === true\n }\n\n connect () {\n this.connected = this.on = true\n }\n\n disconnect () {\n this.connected = this.on = false\n }\n\n toggle () {\n this.on = !this.on\n }\n }\n\n static Events = Object.freeze({\n Connection: 'terminus-connection',\n Disconnection: 'terminus-disconnection'\n })\n}\n","import { Modifier } from '../modifier'\n\nexport class Toggle extends Modifier {\n on\n title = 'Toggle'\n\n constructor (tile, { on }) {\n super(...arguments)\n\n this.on = on || false\n\n this.tile.items.forEach((item) => {\n item.toggled = this.on\n })\n }\n\n attach () {\n this.name = Toggle.Names[this.on ? 'on' : 'off']\n super.attach()\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.toggleable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n this.on = !this.on\n\n const items = this.tile.items.filter((item) => item.toggleable)\n items.forEach((item) => item.toggle(this.on))\n\n this.update({ name: Toggle.Names[this.on ? 'on' : 'off'] })\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n static Names = Object.freeze({ on: 'toggle_on', off: 'toggle_off ' })\n}\n\n/**\n * A mixin for Item which provides toggle behaviors.\n *\n * @param SuperClass\n * @returns {{new(*, *): ToggleableItem, toggled: *, prototype: ToggleableItem}}\n * @constructor\n */\nexport const toggleable = (SuperClass) => class ToggleableItem extends SuperClass {\n toggleable\n toggled\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.toggleable = configuration.toggleable !== false\n }\n\n onToggle () {}\n\n toggle (toggled) {\n this.toggled = toggled\n this.onToggle()\n }\n}\n","import chroma from 'chroma-js'\nimport { CompoundPath, Path } from 'paper'\nimport { Item } from '../item'\nimport {\n getColorElements,\n emitEvent,\n fuzzyEquals,\n getPointBetween,\n getDistance,\n getOppositeDirection,\n uniqueBy, getPointFrom\n} from '../util'\nimport { Step, StepState } from '../step'\nimport { Collision, CollisionMergeWith } from '../collision'\nimport { Cache } from '../cache'\n\nexport class Beam extends Item {\n done = false\n path = []\n sortOrder = 3\n\n #cache = new Cache(Object.values(Beam.CacheKeys))\n #direction\n #path\n #stepIndex = -1\n #steps = []\n\n constructor (terminus, state, configuration) {\n super(...arguments)\n\n this.group = null\n this.#direction = configuration.direction\n\n this.#path = {\n closed: false,\n data: { id: this.id, type: this.type },\n locked: true,\n strokeJoin: 'round',\n strokeCap: 'round',\n strokeWidth: terminus.radius / 12\n }\n }\n\n addStep (step) {\n const lastStepIndex = this.getLastStepIndex()\n\n // Can't be done if adding a new step\n this.done = false\n\n this.#path.strokeColor = step.color\n\n if (this.path.length === 0) {\n const path = new Path(this.#path)\n this.path.push(path)\n this.getLayer().insertChild(0, path)\n }\n\n const currentPath = this.path[this.path.length - 1]\n const previousStep = this.#steps[lastStepIndex]\n\n // Handles cases that require adding a new path item\n if (\n !step.connected || (\n previousStep && (\n step.color !== previousStep.color ||\n step.insertAbove !== previousStep.insertAbove\n )\n )\n ) {\n console.debug(this.toString(), 'adding new path item for step:', step, 'previous step:', previousStep)\n\n const path = new Path(this.#path)\n const points = [step.point]\n\n // If the next step is connected, we will link it with the previous step\n if (step.connected) {\n points.unshift(previousStep.point)\n }\n\n path.add(...points)\n this.path.push(path)\n\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path)\n\n // Reset the segmentIndex\n step.segmentIndex = 0\n } else {\n currentPath.add(step.point)\n step.segmentIndex = currentPath.segments.length - 1\n }\n\n step.pathIndex = this.path.length - 1\n\n this.#steps.push(step)\n\n step.index = this.#stepIndex = this.#steps.length - 1\n\n if (!step.tile.items.some((item) => item.equals(this))) {\n // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this)\n }\n\n step.onAdd(step)\n\n console.debug(this.toString(), 'added step', step)\n\n this.#onUpdate(this.#stepIndex)\n\n return step\n }\n\n getCollision () {\n return this.getStep()?.state.get(StepState.Collision)\n }\n\n getColor () {\n return this.getStep()?.color || this.getOpening().color\n }\n\n getColors () {\n return Array.from(this.getStep()?.colors || this.getOpening().colors)\n }\n\n getColorElements (tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step) => step.state.has(StepState.MergeWith))\n return step ? getColorElements(step.color) : []\n }\n\n getCompoundPath () {\n return new CompoundPath({ children: this.path.map((item) => item.clone({ insert: false })) })\n }\n\n getIndex () {\n return this.path[this.path.length - 1].index\n }\n\n getLastStepIndex () {\n return this.length() - 1\n }\n\n getLayer () {\n return this.parent.getLayer()\n }\n\n getMergeWith (beam) {\n return this.#cache.get(Beam.CacheKeys.MergeWith).get(beam.id)\n }\n\n getOpening () {\n return this.parent.getOpening(this.#direction)\n }\n\n getState () {\n return this.parent.getState().openings[this.#direction]\n }\n\n getStep (stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()]\n }\n\n getSteps (tile) {\n return tile ? this.#steps.filter((step) => step.tile === tile) : this.#steps\n }\n\n isComplete () {\n return this.isOn() && this.done\n }\n\n isConnected () {\n const step = this.getStep()\n return step?.state.has(StepState.TerminusConnection) ||\n // Consider beams which have merged into connected beams to also be connected\n step?.state.get(StepState.MergeInto)?.beam.isConnected()\n }\n\n isOn () {\n const opening = this.getOpening()\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected\n }\n\n isPending () {\n return this.isOn() && !this.done\n }\n\n length () {\n return this.#steps.length\n }\n\n onBeamUpdated (event) {\n const beam = event.detail.beam\n\n if (beam.isPending()) {\n // Wait for beam to finish before evaluating\n return\n }\n\n const beamLastStep = beam.getStep()\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n // Check for invalid collisions\n const collision = lastStep.state.get(StepState.Collision)\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get(StepState.Collision))) {\n console.debug(this.toString(), 're-evaluating collision with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(lastStep.index - 1, 0)\n return\n }\n\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get(StepState.MergeInto)\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), 're-evaluating merge into', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0)\n return\n }\n }\n\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam)\n if (mergeWith && !beamLastStep?.state.get(StepState.MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), 're-evaluating merge with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0)\n }\n }\n\n onCollision ({ beam, collision, collisionStep, currentStep, nextStep, puzzle }) {\n const isSelf = beam.equals(this)\n\n console.debug(this.toString(), 'evaluating collision with', (isSelf ? 'self' : beam.toString()))\n\n if (!beam.isOn()) {\n console.debug(this.toString(), 'ignoring collision with inactive beam', beam.toString())\n return\n }\n\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), 'ignoring collision with sibling beam', beam.toString())\n return\n }\n\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), 'ignoring collision with self while re-evaluating history')\n return\n }\n\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step) => fuzzyEquals(collision.point, step.point))\n if (stepIndex < 0) {\n // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(\n `Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`)\n }\n\n const step = this.#steps[stepIndex]\n\n if (step.state.get(StepState.MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), 'ignoring collision with merged beam', beam.toString())\n return\n }\n\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get(StepState.TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), 'ignoring collision with connected beam in parent terminus', beam.toString())\n return\n }\n\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get(StepState.Reflector) ?? currentStep.state.get(StepState.Reflector)\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = getPointFrom(step.point, 1, getOppositeDirection(step.direction))\n const nextStepPoint = getPointFrom(currentStep.point, 1, getOppositeDirection(currentStep.direction))\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), 'ignoring collision with beam on opposite side of reflector', beam.toString())\n return\n }\n }\n\n const isSameDirection = step.direction === nextStep.direction\n if (currentStep.state.get(StepState.Portal)?.exitPortal && !isSameDirection) {\n console.debug(\n this.toString(),\n 'ignoring collision with beam using same portal with different exit direction',\n beam.toString()\n )\n return\n }\n\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), 'has collided with', (isSelf ? 'self' : this.toString()), collision)\n\n if (!isSelf) {\n // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new StepState.Collision(collision.mirror()))\n })\n } else if (!isSameDirection) {\n // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay())\n }\n\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n })\n }\n\n console.debug(this.toString(), 'merging with', beam.toString())\n\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex)\n\n const mergeWith = new CollisionMergeWith(beam, step, stepIndex)\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).set(beam.id, mergeWith)\n },\n onRemove: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).unset(beam.id)\n },\n state: step.state.copy(new StepState.MergeWith(mergeWith))\n }))\n\n console.debug(beam.toString(), 'merging into', this.toString())\n\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new StepState.MergeInto(this))\n })\n }\n\n onModifierInvoked (event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), 'beam has been toggled off')\n // Also reset any state changes from user move decisions\n this.updateState((state) => { delete state.moves })\n this.remove()\n }\n return\n }\n\n const tiles = event.detail.tiles || [event.detail.tile]\n\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step) => tiles.some((tile) => tile.equals(step.tile)))\n if (stepIndex >= 0) {\n console.debug(this.toString(), 're-evaluating due to modifier being invoked in matching tile', stepIndex)\n // Re-evaluate beginning at the step before the matched one\n this.done = false\n this.#stepIndex = Math.max(stepIndex - 1, 0)\n return\n }\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n if (lastStep.state.get(StepState.Portal)?.entryPortal) {\n // Check for valid exit portal\n this.done = false\n }\n }\n }\n\n remove (stepIndex = 0) {\n this.#updateHistory(stepIndex)\n }\n\n selected (selected = true) {\n this.path.forEach((path) => { path.selected = selected })\n }\n\n startDirection () {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6\n }\n\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */\n step (puzzle) {\n if (!this.isPending()) {\n return\n }\n\n console.debug(this.toString(), 'currentStepIndex', this.#stepIndex)\n\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent\n this.addStep(new Step(0, tile, this.getColor(), this.startDirection(), tile.center))\n }\n\n const currentStepIndex = this.#stepIndex\n const currentStep = this.#steps[currentStepIndex]\n\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction\n const nextStepPoint = getPointFrom(currentStep.point, currentStep.tile.parameters.inradius, direction)\n\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile(getPointBetween(currentStep.point, nextStepPoint))\n\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), 'stopping due to out of bounds')\n\n const collision = new Collision(0, [currentStep.point], this)\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new StepState(new StepState.Collision(collision))\n })\n }\n\n const nextStepIndex = currentStepIndex + 1\n const existingNextStep = this.#steps[nextStepIndex]\n const lastPathIndex = this.path.length - 1\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1\n\n let nextStep = new Step(\n nextStepIndex,\n tile,\n currentStep.color,\n direction,\n nextStepPoint,\n existingNextStep?.pathIndex || lastPathIndex,\n existingNextStep?.segmentIndex || lastSegmentIndex\n )\n\n const items = uniqueBy(\n tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items),\n 'id'\n )\n\n console.debug(this.toString(), 'collision items:', items)\n\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle)\n .map((collision, index) => new Collision(index, collision.points, this, collision.item))\n\n if (collisions.length) {\n console.debug(this.toString(), 'collisions:', collisions)\n }\n\n let collisionStep\n for (let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++) {\n const collision = collisions[collisionIndex]\n\n console.debug(this.toString(), 'resolving collision:', collision)\n\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new StepState.Collision(collision))\n })\n\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision,\n collisions,\n collisionStep,\n currentStep,\n nextStep,\n existingNextStep,\n puzzle\n })\n\n if (collisionStep instanceof Step) {\n break\n }\n }\n\n if (collisionStep) {\n nextStep = collisionStep\n }\n\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++\n\n const lastStepIndex = this.getLastStepIndex()\n console.debug(\n this.toString(),\n 'new step is same as existing. new step index:',\n this.#stepIndex,\n 'last step index:',\n lastStepIndex\n )\n\n if (this.#stepIndex === lastStepIndex) {\n // To ensure we mark as done\n this.#onUpdate(this.#stepIndex)\n }\n\n return existingNextStep\n } else {\n console.debug(\n this.toString(),\n `is revising history at step index: ${nextStepIndex}`,\n 'existing step:',\n existingNextStep,\n 'new step:',\n nextStep\n )\n this.#updateHistory(nextStepIndex)\n }\n }\n\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), 'next step point is same as current step point, stopping.', nextStep)\n return this.updateStep(currentStepIndex, nextStep.copy({ done: true }))\n }\n\n return this.addStep(nextStep)\n }\n\n toString () {\n return `[${this.type}:${this.id}:${chroma(this.getColor()).name()}]`\n }\n\n update (stepIndex, settings = {}, timeout) {\n if (typeof settings === 'number') {\n timeout = settings\n settings = {}\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout)\n return timeout === undefined ? update() : setTimeout(update, timeout)\n }\n\n updateState (updater, dispatchEvent = true) {\n return this.parent.updateState((state) => updater(state.openings[this.#direction]), dispatchEvent)\n }\n\n updateStep (stepIndex, settings) {\n const step = this.getStep(stepIndex)\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings)\n this.#steps[stepIndex] = updatedStep\n updatedStep.onAdd(updatedStep)\n\n console.debug(this.toString(), 'updated step at index', stepIndex, 'from', step, 'to', updatedStep)\n this.#onUpdate(stepIndex)\n return updatedStep\n }\n }\n\n #getCollisions (items, currentStep, nextStep, puzzle) {\n const segments = [currentStep.point, nextStep.point]\n const path = new Path({ segments })\n const firstPoint = segments[0]\n return items\n .map((item) => {\n const points = []\n const intersections = path.getIntersections(\n item.getCompoundPath(),\n // Ignore first point from self which will always collide\n (curveLocation) => !(item === this && curveLocation.point.equals(firstPoint))\n )\n\n points.push(...new Set(intersections.map((intersection) => intersection.point)))\n\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === Item.Types.beam && item !== this) {\n points.push(\n ...item.getSteps().map((step) => step.point)\n .filter((point) => segments.some((segment) => fuzzyEquals(point, segment)))\n )\n }\n\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort(getDistance(firstPoint))\n\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint)\n points.forEach((point) => puzzle.drawDebugPoint(point, { fillColor: 'black' }))\n }\n\n return { points, item }\n })\n .filter((result) => result.points.length)\n .sort((a, b) => {\n // Sort items returned by proximity to starting point\n const distance = getDistance(firstPoint)(a.points[0], b.points[0])\n if (distance === 0) {\n // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder\n }\n\n return distance\n })\n }\n\n #getItemIndex (step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0\n }\n\n #getUpdatedStep (step, settings) {\n if (typeof settings === 'function') {\n settings = settings(step)\n }\n\n return settings instanceof Step ? settings : step.copy(settings)\n }\n\n #update (stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex)\n this.addStep(this.#getUpdatedStep(step, settings))\n } else {\n this.updateStep(stepIndex, settings)\n }\n }\n\n #onUpdate (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n stepIndex ??= lastStepIndex\n\n const step = this.getStep(stepIndex)\n\n if (stepIndex === lastStepIndex) {\n // Update beam status if last step was updated\n this.done = step?.done ?? false\n }\n\n emitEvent(Beam.Events.Update, { beam: this, state: step?.state, step, stepIndex })\n }\n\n #updateHistory (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n const step = this.#steps[stepIndex]\n\n console.debug(\n this.toString(),\n 'updateHistory',\n 'stepIndex:',\n stepIndex,\n 'lastStepIndex:',\n lastStepIndex,\n 'step:',\n step\n )\n\n if (step) {\n const currentPath = this.path[step.pathIndex]\n\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex)\n\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1)\n\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item) => item.remove())\n\n const deletedSteps = this.#steps.splice(stepIndex)\n\n console.debug(this.toString(), 'removed steps: ', deletedSteps)\n\n const tiles = [...new Set(deletedSteps.map((step) => step.tile))]\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile) => this.getSteps(tile).length === 0).forEach((tile) => tile.removeItem(this))\n\n deletedSteps.forEach((step) => step.onRemove(step))\n\n this.done = false\n this.#stepIndex = (stepIndex - 1)\n\n this.#onUpdate(this.#stepIndex)\n }\n\n return step\n }\n\n static CacheKeys = Object.freeze({\n MergeWith: 'mergeWith'\n })\n\n static Events = Object.freeze({\n Collision: 'beam-collision',\n Connection: 'beam-connection',\n Merge: 'beam-merge',\n Update: 'beam-update'\n })\n}\n","import { StepState } from './step'\n\nexport class Collision {\n constructor (index, points, beam, item) {\n const items = [beam]\n\n if (item !== undefined) {\n items.push(item)\n }\n\n this.beam = beam\n this.index = index\n\n // The item that was collided with\n this.item = item\n this.itemIds = items.map((item) => item.id)\n this.items = items\n\n // The first collision point\n this.point = points[0]\n this.points = points\n\n // Check if the collision is with self\n this.withSelf = beam.equals(item)\n }\n\n copy (settings) {\n return new Collision(\n settings.index ?? this.index,\n settings.points ?? this.points,\n settings.beam ?? this.beam,\n settings.item ?? this.item\n )\n }\n\n equals (other) {\n return other && other.point.equals(this.point) &&\n other.items.every((item) => this.has(item))\n }\n\n has (item) {\n return this.itemIds.includes(item.id)\n }\n\n mirror () {\n return this.copy({ beam: this.item, item: this.beam })\n }\n}\n\nexport class CollisionMergeWith {\n constructor (beam, step, stepIndex) {\n this.beams = [beam].concat(step.state.get(StepState.MergeWith)?.beams || [])\n this.colors = step.colors.concat(beam.getColors())\n this.stepIndex = stepIndex\n }\n}\n","import { Path, Point, Size } from 'paper'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getPointBetween, getOppositeDirection, getPosition, getReflectedDirection, getPointFrom } from '../util'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Reflector extends movable(rotatable(Item)) {\n #item\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 30 })\n\n this.color = state.color || 'black'\n this.#item = Reflector.item(tile, this.color)\n\n this.group.addChild(this.#item)\n }\n\n midLine () {\n // Two points which form a line through the mid-point of the reflector\n return [\n getPointBetween(this.#item.segments[3].point, this.#item.segments[0].point),\n getPointBetween(this.#item.segments[1].point, this.#item.segments[2].point)\n ]\n }\n\n getSide (point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return getPosition(this.midLine(), point)\n }\n\n isSameSide (pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB)\n }\n\n onCollision ({ beam, collision, collisions, collisionStep, currentStep, nextStep }) {\n const directionFrom = getOppositeDirection(currentStep.direction)\n const directionTo = getReflectedDirection(directionFrom, this.rotation)\n\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), 'stopping due to collision with non-reflective side of reflector')\n return collisionStep\n }\n\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), 'stopping due to reflection back at self')\n if (collisions.some((collision) => collision.item.type === Item.Types.beam)) {\n // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return\n } else {\n // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new StepState.Collision(collision.copy({ points: [nextStep.point] })))\n })\n }\n }\n\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has(StepState.Reflector)) {\n return nextStep.copy({ state: nextStep.state.copy(new StepState.Reflector(this)) })\n }\n\n const point = getPointFrom(currentStep.point, nextStep.tile.parameters.inradius, directionTo)\n return nextStep.copy({ direction: directionTo, point })\n }\n\n static item (tile, color) {\n const length = tile.parameters.circumradius\n const width = tile.parameters.circumradius / 12\n const topLeft = tile.center.subtract(new Point(width / 2, length / 2))\n const size = new Size(width, length)\n\n return new Path.Rectangle({\n data: { size },\n fillColor: color,\n point: topLeft,\n size\n })\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\nimport { addDirection } from '../util'\nimport { rotatable } from '../modifiers/rotate'\nimport { movable } from '../modifiers/move'\n\nexport class Wall extends movable(rotatable(Item)) {\n sortOrder = 1\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 60 })\n const walls = Wall.item(tile, state)\n this.group.addChildren(walls)\n }\n\n static item (tile, configuration) {\n const radius = tile.parameters.circumradius\n const width = radius / 12\n const fillColor = tile.styles.default.strokeColor\n\n return configuration.directions.map((direction) => {\n const firstSegment = tile.hexagon.segments[direction].point\n const nextDirection = addDirection(direction, 1)\n const lastSegment = tile.hexagon.segments[nextDirection].point\n\n return new Path({\n closed: true,\n fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt(\n (direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width\n ),\n tile.hexagon.getLocationAt(\n (nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width\n ),\n lastSegment\n ]\n })\n })\n }\n}\n","import { Immutable } from './modifiers/immutable'\nimport { Lock } from './modifiers/lock'\nimport { Move } from './modifiers/move'\nimport { Rotate } from './modifiers/rotate'\nimport { Toggle } from './modifiers/toggle'\nimport { Modifier } from './modifier'\nimport { Swap } from './modifiers/swap'\n\nexport function modifierFactory (tile, configuration) {\n let modifier\n\n switch (configuration.type) {\n case Modifier.Types.immutable:\n modifier = new Immutable(tile, configuration)\n break\n case Modifier.Types.lock:\n modifier = new Lock(tile, configuration)\n break\n case Modifier.Types.move:\n modifier = new Move(tile, configuration)\n break\n case Modifier.Types.rotate:\n modifier = new Rotate(tile, configuration)\n break\n case Modifier.Types.swap:\n modifier = new Swap(tile, configuration)\n break\n case Modifier.Types.toggle:\n modifier = new Toggle(tile, configuration)\n break\n default:\n console.error('Ignoring modifier with unknown type:', configuration.type)\n break\n }\n\n return modifier\n}\n","import { Modifier } from '../modifier'\n\nexport class Immutable extends Modifier {\n immutable = true\n name = 'block'\n title = 'Immutable'\n}\n","import { Modifier } from '../modifier'\n\nexport class Lock extends Modifier {\n immutable = true\n name = 'lock'\n title = 'Locked'\n}\n","import { Move } from './move'\nimport { Modifier } from '../modifier'\nimport { Item } from '../item'\n\nexport class Swap extends Move {\n name = 'swap_horiz'\n title = 'Swap'\n\n moveItems (tile) {\n const toItems = tile.items.filter(Move.movable)\n const fromItems = this.tile.items.filter(Move.movable)\n\n fromItems.forEach((item) => item.move(tile))\n toItems.forEach((item) => item.move(this.tile))\n\n return {\n moved: [Move.data(this.tile, tile, fromItems), Move.data(tile, this.tile, toItems)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some(Modifier.immutable) || !tile.items.filter((item) => item.type !== Item.Types.beam).length\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Mask extends Item {\n constructor (tile, style) {\n super(null, style, { locked: false, type: Item.Types.mask })\n\n const data = { type: this.type }\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({ fillColor: 'black' }, style)\n })\n\n this.center = tile.center\n this.group.addChild(item)\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Collision extends Item {\n constructor (state) {\n super(null, state, { type: Item.Types.collision })\n\n const { center, color } = state\n\n this.center = center\n this.color = color\n\n const item = new Path.Circle({\n center,\n closed: true,\n radius: 4,\n style: {\n fillColor: 'white',\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n}\n","import { Puzzles } from '../puzzles'\nimport { base64decode, base64encode, jsonDiffPatch, params, url } from './util'\n\nconst history = window.history\nconst localStorage = window.localStorage\n\nexport class State {\n #current\n #deltas\n #id\n #index\n #original\n #selectedTile\n #version\n\n constructor (id, original, deltas, deltasIndex, selectedTile, version) {\n this.#id = id\n this.#original = original\n this.#deltas = deltas || []\n this.#index = deltasIndex || this.#lastIndex()\n this.#selectedTile = selectedTile\n this.#version = version ?? original.version\n\n // Update current state\n this.#current = structuredClone(original)\n this.#deltas.filter((delta, index) => index <= this.#index).forEach((delta) => this.apply(delta))\n\n this.#updateCache(id)\n }\n\n apply (delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === 'string') {\n delta = JSON.parse(delta)\n }\n console.debug('StateManager: applying delta', delta)\n return jsonDiffPatch.patch(this.#current, delta)\n }\n\n canRedo () {\n return this.#index < this.#lastIndex()\n }\n\n canUndo () {\n return this.#index >= 0\n }\n\n encode () {\n return base64encode(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: Puzzles.has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }))\n }\n\n getCurrent () {\n return structuredClone(this.#current)\n }\n\n getId () {\n return this.#id\n }\n\n getTitle () {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : '')\n }\n\n getSelectedTile () {\n return this.#selectedTile\n }\n\n moves () {\n return this.#index + 1\n }\n\n length () {\n return this.#deltas.length\n }\n\n redo () {\n const nextIndex = this.#index + 1\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= nextIndex).forEach((delta) => this.apply(delta))\n this.#index = nextIndex\n this.#updateCache()\n }\n }\n\n reset () {\n this.#current = structuredClone(this.#original)\n this.#deltas = []\n this.#index = this.#lastIndex()\n this.#selectedTile = undefined\n\n State.clearCache(this.getId())\n\n this.#updateCache()\n }\n\n setSelectedTile (tile) {\n const id = tile?.coordinates.offset.toString()\n if (this.#selectedTile !== id) {\n this.#selectedTile = id\n this.#updateCache()\n }\n }\n\n undo () {\n const previousIndex = this.#index - 1\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= previousIndex).forEach((delta) => this.apply(delta))\n this.#index = previousIndex\n this.#updateCache()\n }\n }\n\n update (newState) {\n const delta = jsonDiffPatch.diff(this.#current, newState)\n console.debug('delta', delta)\n\n if (delta === undefined) {\n // Nothing to do\n return\n }\n\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) {\n // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1)\n }\n\n this.apply(delta)\n\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta))\n this.#index = this.#lastIndex()\n\n this.#updateCache()\n }\n\n #key (key) {\n return State.key(key, this.getId())\n }\n\n #lastIndex () {\n return this.#deltas.length - 1\n }\n\n #updateCache () {\n const id = this.getId()\n const state = this.encode()\n\n url.hash = ['', id, state].join('/')\n history.pushState({ id, state }, '', url)\n localStorage.setItem(State.CacheKeys.id, id)\n localStorage.setItem(this.#key(State.CacheKeys.state), state)\n }\n\n static clearCache (id) {\n if (!id) {\n // Clear everything\n url.hash = ''\n history.pushState({}, '', url)\n id = localStorage.getItem(State.CacheKeys.id)\n localStorage.clear()\n // Keep current puzzle ID\n localStorage.setItem(State.CacheKeys.id, id)\n } else {\n // Clear a single puzzle\n url.hash = `/${id}`\n history.pushState({ id }, '', url)\n localStorage.removeItem(State.key(State.CacheKeys.state, id))\n }\n }\n\n static fromEncoded (state) {\n state = JSON.parse(base64decode(state))\n state.original = state.original || Puzzles.get(state.id)\n state.original.version ??= 0\n return new State(\n state.id,\n state.original,\n state.deltas,\n state.deltasIndex,\n state.selectedTile,\n state.version\n )\n }\n\n static fromId (id) {\n return new State(id, Puzzles.get(id))\n }\n\n static resolve (id) {\n let state\n\n // Allow cache to be cleared via URL param\n if (params.has(State.ParamKeys.clearCache)) {\n State.clearCache(params.get(State.ParamKeys.clearCache))\n }\n\n const pathSegments = url.hash.substring(1).split('/').filter((path) => path !== '')\n\n if (!id) {\n // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path) => !Puzzles.has(path)).some((segment, index) => {\n try {\n state = State.fromEncoded(segment)\n id = state.getId()\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e)\n }\n\n return state !== undefined\n })\n }\n\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || localStorage.getItem(State.CacheKeys.id) || Puzzles.visible.firstId\n\n const localState = localStorage.getItem(State.key(State.CacheKeys.state, id))\n if (localState) {\n try {\n state = State.fromEncoded(localState)\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e)\n }\n }\n }\n\n if (state) {\n const cachedVersion = state.#version\n const originalVersion = state.#original.version\n\n if (cachedVersion !== originalVersion) {\n console.debug(\n `Invalidating cache for ID ${id} due to version mismatch. ` +\n `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`\n )\n state = undefined\n State.clearCache(id)\n }\n }\n\n if (!state) {\n // Fall back to loading state from Puzzles cache by ID\n state = State.fromId(id)\n }\n\n if (!state) {\n throw new Error(`Unable to resolve state for ID '${id}'`)\n }\n\n return state\n }\n\n static key (key, id) {\n return `${key}:${id}`\n }\n\n static CacheKeys = Object.freeze({\n center: 'center',\n id: 'id',\n state: 'state',\n zoom: 'zoom'\n })\n\n static ParamKeys = Object.freeze({\n clearCache: 'clearCache'\n })\n}\n","import _001 from './001'\nimport _002 from './002'\nimport _003 from './003'\nimport _004 from './004'\nimport _005 from './005'\nimport _006 from './006'\nimport _007 from './007'\nimport _008 from './008'\nimport _009 from './009'\nimport _010 from './010'\nimport _011 from './011'\n\n// These are just for testing purposes\n// They won't show up in the list but are accessible via URL\nimport testLayout from './testLayout'\nimport testPortal from './testPortal'\nimport testReflector from './testReflector'\nimport testInfiniteLoop from './testInfiniteLoop'\n\n// Ensure puzzle configuration is valid JSON\nconst configuration = Object.fromEntries(Object.entries({\n '001': _001,\n '002': _002,\n '003': _003,\n '004': _004,\n '005': _005,\n '006': _006,\n '007': _007,\n '008': _008,\n '009': _009,\n '010': _010,\n '011': _011,\n test_infinite_loop: testInfiniteLoop,\n test_layout: testLayout,\n test_portal: testPortal,\n test_reflector: testReflector\n}).map(([k, v]) => [k, JSON.parse(JSON.stringify(v))]))\n\nfunction traverse (ids, id, amount) {\n const index = ids.indexOf(id)\n return ids[index < 0 ? index : index + amount]\n}\n\nclass PuzzleGroup {\n ids\n\n constructor (ids) {\n this.firstId = ids[0]\n this.ids = ids\n this.lastId = ids[ids.length - 1]\n }\n\n get (id) {\n if (this.has(id)) {\n // Note: deep cloning configuration to prevent mutation\n return structuredClone(configuration[id])\n }\n }\n\n has (id) {\n return this.ids.includes(id)\n }\n\n nextId (id) {\n return traverse(this.ids, id, 1)\n }\n\n previousId (id) {\n return traverse(this.ids, id, -1)\n }\n}\n\nexport const Puzzles = new PuzzleGroup(Object.keys(configuration).sort())\n\nPuzzles.hidden = new PuzzleGroup(Puzzles.ids.filter((id) => id.startsWith('test_')))\nPuzzles.titles = Object.fromEntries(Puzzles.ids.map((id) => [id, configuration[id].title || id]))\nPuzzles.visible = new PuzzleGroup(Puzzles.ids.filter((id) => !Puzzles.hidden.has(id)))\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Toggle' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { clockwise: false, type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { clockwise: false, type: 'Rotate' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, { type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, { on: true, type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, null, { on: true, type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, { type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, null, { type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, null, { on: true, type: 'Beam' }, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' },\n { clockwise: false, type: 'Rotate' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 2, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n { color: 'red', type: 'Beam' },\n null,\n { color: 'blue', on: true, type: 'Beam' }\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [\n { color: 'blue', type: 'Beam' },\n null,\n { color: 'red', on: true, type: 'Beam' },\n null,\n null,\n null\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 2, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, { type: 'Beam' }, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, { type: 'Beam' }, { on: true, type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, { on: true, type: 'Beam' }, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, null, { on: true, type: 'Beam' }, { type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n { rotation: 3, type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n }\n ],\n [\n null,\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { rotation: 3, type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { rotation: 3, type: 'Reflector' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [{ on: true, type: 'Beam' }, { type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 0, type: 'Connections' },\n { amount: 6, type: 'Moves' }\n ],\n version: 1\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Toggle' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: ['red', 'blue'],\n openings: [null, null, null, null, { type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n type: 'Filter'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n type: 'Filter'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n }\n ],\n [\n null,\n {\n items: [\n {\n color: ['red', 'blue'],\n openings: [null, { type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Toggle' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 2, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n { type: 'Tile' },\n { type: 'Tile' },\n null,\n null,\n {\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'green',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n modifiers: [\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n null,\n {\n items: [\n {\n color: 'green',\n openings: [null, null, null, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n null,\n null,\n {\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' },\n null,\n null,\n {\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'green',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n modifiers: [\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' },\n null,\n {\n items: [\n {\n color: 'green',\n openings: [null, null, null, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n null,\n null,\n { type: 'Tile' },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 5,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n { color: 'blue', on: true, type: 'Beam' },\n null,\n null,\n null\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n null,\n null,\n { color: 'blue', type: 'Beam' }\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n direction: 5,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 5,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ],\n version: 1\n}\n","const layout = [\n ['o', 'x', 'x', 'x'],\n ['x', 'x', 'x', 'x'],\n ['x', 'x', 'x', 'x', 'x'],\n ['x', 'x', 'x', 'x'],\n ['o', 'x', 'x', 'x']\n]\n\nexport default {\n layout: {\n tiles: layout.map((column) => column.map((item) => item === 'x' ? { type: 'Tile' } : null))\n // type: 'even-r'\n },\n solution: [\n { amount: 100, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [{ type: 'Immutable' }],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [{ type: 'Immutable' }],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [null, null, null, { color: ['red', 'blue'], type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Rotate' }],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [null, null, null, null, { color: 'green', type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Lock' }, { type: 'Toggle' }],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n openings: [{ color: 'red', type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Lock' }, { type: 'Rotate' }, { type: 'Toggle' }],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [{ color: 'blue', type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Lock' }, { type: 'Toggle' }],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [{ type: 'Immutable' }],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Rotate' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n color: 'green',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ on: true, type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 999, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, null, null, { on: true, type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n }\n ],\n [\n null,\n {\n items: [\n {\n rotation: 4,\n type: 'Reflector'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ on: true, type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 100, type: 'Connections' }\n ]\n}\n","import { capitalize, getIconElement, getTextElement } from './util'\nimport { Terminus } from './items/terminus'\nimport { EventListeners } from './eventListeners'\nimport { Puzzle } from './puzzle'\n\nexport class Solution {\n #conditions = []\n\n constructor (state) {\n state.forEach((condition) => this.#conditionFactory(condition))\n }\n\n teardown () {\n this.#conditions.forEach((condition) => condition.teardown())\n Solution.element.replaceChildren()\n }\n\n isSolved () {\n return this.#conditions.every((condition) => condition.isMet())\n }\n\n #conditionFactory (condition) {\n switch (condition.type) {\n case SolutionCondition.Types.connections: {\n this.#conditions.push(new Connections(condition))\n break\n }\n case SolutionCondition.Types.moves: {\n this.#conditions.push(new Moves(condition))\n break\n }\n default: {\n console.warn('Ignoring condition with unknown type:', condition.type)\n break\n }\n }\n }\n\n static element = document.getElementById('solution')\n}\n\nclass SolutionCondition {\n constructor (state, elements) {\n this.state = state\n\n const li = document.createElement('li')\n li.append(...elements)\n Solution.element.append(li)\n }\n\n isMet () {}\n\n teardown () {}\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'connections',\n 'moves'\n ].map((type) => [type, capitalize(type)])))\n}\n\nclass Connections extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #connections = []\n\n constructor (state) {\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement('/'),\n required,\n getIconElement('link', 'Connections')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n\n this.#eventListeners.add([\n { type: Terminus.Events.Connection, handler: this.update },\n { type: Terminus.Events.Disconnection, handler: this.update }\n ])\n }\n\n isMet () {\n return this.#connections.length === this.state.amount\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Connections.update', event)\n\n const terminus = event.detail.terminus\n const opening = event.detail.opening\n const connectionId = `${terminus.id}:${opening.direction}`\n const connectionIndex = this.#connections.findIndex((connection) => connection === connectionId)\n\n if (opening.connected && connectionIndex < 0) {\n this.#connections.push(connectionId)\n } else if (!opening.connected && connectionIndex >= 0) {\n this.#connections.splice(connectionIndex, 1)\n }\n\n this.#completed.textContent = this.#connections.length.toString()\n }\n}\n\nclass Moves extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #moves = 0\n\n constructor (state) {\n state.operator ??= Moves.Operators.equalTo\n\n if (!Object.values(Moves.Operators).includes(state.operator)) {\n throw new Error(`Invalid moves operator: ${state.operator}`)\n }\n\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement(state.operator),\n required,\n getIconElement('stacks', 'Moves')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n this.#eventListeners.add([{ type: Puzzle.Events.Updated, handler: this.update }])\n }\n\n isMet () {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch (this.state.operator) {\n case Moves.Operators.equalTo:\n return this.#moves === this.state.amount\n case Moves.Operators.greaterThan:\n return this.#moves > this.state.amount\n case Moves.Operators.lessThan:\n return this.#moves < this.state.amount\n }\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Moves.update', event)\n this.#moves = event.detail.state.moves()\n this.#completed.textContent = this.#moves.toString()\n }\n\n static Operators = Object.freeze({\n equalTo: '=',\n greaterThan: '>',\n lessThan: '<'\n })\n}\n","const script = document.createElement('script')\nscript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS')\ndocument.head.append(script)\n\nconst dataLayer = window.dataLayer = window.dataLayer || []\nfunction gtag () { dataLayer.push(arguments) }\ngtag('js', new Date())\ngtag('config', 'G-HXLD6EE5NS')\n","const doorbellOptions = window.doorbellOptions = {\n appKey: 'o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC',\n container: document.getElementById('feedback-container'),\n hideButton: true,\n properties: {}\n}\n\nconst script = document.createElement('script')\nscript.setAttribute(\n 'src',\n 'https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0'\n)\ndocument.head.append(script)\n\ndocument.addEventListener('puzzle-updated', (event) => {\n doorbellOptions.properties.puzzleId = event.detail.state.getId()\n})\n"],"names":["$b8ea597934691048$var$static_l_desc","$b8ea597934691048$var$static_d_desc","$b8ea597934691048$var$static_bl_desc","$b8ea597934691048$var$lenfix","$b8ea597934691048$var$distfix","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","self1","undefined","document","Base","hidden","array","slice","create","describe","getOwnPropertyDescriptor","define1","forEach","iter","bind","i","l","length","forIn","hasOwnProperty","assign","dst","arguments","src","key","each","obj","desc","value","inject","dest","beans","preserve","beansNames","field","name","val","substring","bean","isFunc","res","prev","base","match","toLowerCase","isPlainObject","writable","test","part","statics","prototype","extend","ctor","proto","initialize","apply","clone","constructor","define","pick","b","list","begin","end","toString","_id","_class","_name","type","push","Formatter","instance","number","join","getClassName","importJSON","json","exportJSON","options","toJSON","serialize","props","exclude","filter","_prioritize","equals","obj1","obj2","Array","isArray","keys","read","start","amount","peek","__index","readIndex","_readIndex","readNull","__read","filtered","__filtered","remain","readList","entry","readNamed","getNamed","hasValue","source","getSource","__unfiltered","readSupported","that","__source","arg","hasNamed","prioritize","handleKey","processed","isPlainValue","asString","compact","dictionary","isRoot","formatter","precision","definitions","references","add","item","ref","unshift","_serialize","_compactSerialize","deserialize","_data","_setDictionary","_isRoot","isFirst","hasDictionary","isDictionary","args","JSON","stringify","target","parse","useTarget","Item","Layer","insert","concat","INSERT","items","itemsLength","startLength","splice","index","remove","append","_index","removed","capitalize","str","replace","toUpperCase","camelize","chr","hyphenate","Emitter","on","func","types","_eventTypes","handlers","_callbacks","indexOf","install","off","uninstall","once","handler","emit","event","setTarget","currentTarget","stop","responds","attach","detach","fire","_installEvents","events","_events","isString","PaperScope","paper","settings","applyMatrix","insertItems","handleSize","hitTolerance","project","projects","tools","_scopes","support","ctx","CanvasProvider","getContext","nativeDash","nativeBlendModes","BlendMode","nativeModes","release","agent","user","navigator","userAgent","os","exec","platform","browser","v1","v2","rv","chrome","version","versionNumber","parseFloat","trident","jsdom","webkit","atom","getView","_view","getPaper","execute","PaperScript","View","updateFocus","scope","setup","element","Project","createCanvas","width","height","getCanvas","activate","clear","handleAttribute","el","attr","getAttribute","hasAttribute","PaperScopeItem","_scope","_list","_reference","isActive","CollisionDetection","findItemBoundsCollisions","items1","items2","tolerance","getBounds","bounds","rect","left","top","right","bottom","bounds1","bounds2","findBoundsCollisions","findCurveBoundsCollisions","curves1","curves2","bothAxis","curves","min","Math","max","hor","ver","boundsA","boundsB","sweepVertical","onlySweepAxisCollisions","allBounds","lengthA","lengthAll","binarySearch","indices","coord","lo","hi","mid","pri0","pri1","sec0","sec1","allIndicesByPri0","sort","i1","i2","activeIndicesByPri1","allCollisions","curIndex","curBounds","origIndex","isCurrentA","isCurrentB","curCollisions","pruneCount","j","activeIndex","curSec1","curSec0","activeBounds","isActiveA","isActiveB","curPri1","collisions","multiplier","pow","round","pair","val1","val2","separator","point","x","y","size","rectangle","Numerical","abscissas","weights","abs","sqrt","log2","log","LOG2E","clamp","getDiscriminant","c","split","D","E","ad","bd","cd","p","dp","q","dq","getNormalizationFactor","norm","EPSILON","MACHINE_EPSILON","CURVETIME_EPSILON","GEOMETRIC_EPSILON","TRIGONOMETRIC_EPSILON","ANGULAR_EPSILON","KAPPA","isZero","isMachineZero","integrate","f","w","A","B","m","sum","Ax","findRoot","df","fx","dx","nx","solveQuadratic","roots","x1","x2","Infinity","Q","R","count","boundless","minB","maxB","isFinite","solveCubic","d","b1","c2","qd","evaluate","x0","tmp","t","r","td","rd","UID","_pools","pool","Point","arg0","arg1","reading","hasY","_set","setAngle","angle","getLength","setLength","_angle","cos","sin","scale","getAngle","getAngleInRadians","PI","setAngleInRadians","getAngleInDegrees","setAngleInDegrees","atan2","div","NaN","dot","acos","getQuadrant","getDirectedAngle","cross","getDistance","squared","normalize","current","rotate","center","subtract","transform","matrix","_transformPoint","multiply","divide","modulo","negate","isInside","Rectangle","contains","isClose","isCollinear","isColinear","isOrthogonal","isNaN","isInQuadrant","point1","point2","random","y1","y2","op","LinkedPoint","owner","setter","_x","_y","_owner","_setter","_dontNotify","getX","setX","getY","setY","isSelected","_selection","_getSelection","setSelected","selected","_changeSelection","Size","hasHeight","size1","size2","LinkedSize","_width","_height","getWidth","setWidth","getHeight","setHeight","arg2","arg3","from","to","frm","next","rt","getPoint","_dontLink","setPoint","getSize","_fw","_fh","setSize","sx","_sx","sy","_sy","h","getLeft","setLeft","getTop","setTop","getRight","setRight","getBottom","setBottom","getCenterX","setCenterX","getCenterY","setCenterY","getCenter","setCenter","getArea","isEmpty","_containsRectangle","_containsPoint","intersects","epsilon","intersect","unite","include","expand","parts","xFirst","LinkedRectangle","internal","Matrix","ok","_a","_b","_c","_d","_tx","_ty","reset","tx","ty","_changed","getValues","_applyMatrix","mx","recursively","_setApplyMatrix","isIdentity","translate","shear","skew","toRadians","tan","a1","c1","d1","a2","b2","d2","tx2","ty2","prepend","tx1","ty1","appended","prepended","invert","det","inverted","concatenate","preConcatenate","chain","_shiftless","_orNullIfIdentity","isInvertible","isSingular","_transformCoordinates","_transformCorners","coords","_transformBounds","inverseTransform","_inverseTransform","decompose","degrees","asin","translation","getTranslation","rotation","scaling","skewing","getScaling","getRotation","applyToContext","prop","Line","arg4","asVector","_px","_py","_vx","_vy","getVector","line","isInfinite","getSide","getSignedDistance","p1x","p1y","v1x","v1y","p2x","p2y","v2x","v2y","dy","u1","u2","uMin","px","py","vx","vy","ccw","_children","_namedChildren","_activeLayer","_currentStyle","Style","_selectionItems","_selectionCount","_updateVersion","flags","view","_needsUpdate","_requested","_autoUpdate","requestUpdate","changes","_changes","changesById","_changesById","children","getCurrentStyle","setCurrentStyle","style","getIndex","getOptions","getLayers","getActiveLayer","getSymbolDefinitions","ids","getItems","class","SymbolItem","definition","_definition","getSymbols","getSelectedItems","selectionItems","selection","isInserted","_updateSelection","selectAll","setFullySelected","deselectAll","addLayer","layer","insertLayer","_remove","_setProject","setName","_insertItem","_created","NO_INSERT","insertChild","_getItems","getItem","removeOn","sets","_removeSets","mousedrag","other","draw","pixelRatio","save","param","offset","viewMatrix","matrices","updateMatrix","restore","strokeWidth","_drawSelection","_serializeFields","_canApplyMatrix","_canScaleStroke","_pivot","_visible","_blendMode","_opacity","_locked","_guide","_clipMask","_selectBounds","_selectChildren","pivot","visible","blendMode","opacity","locked","guide","clipMask","data","_countItemEvent","onFrame","_animateItem","onLoad","onError","_itemHandlers","_initialize","hasProps","_matrix","_parent","_style","parent","fields","fontSize","Group","_defaults","symbol","_symbol","cacheParent","_project","_bounds","_position","_decomposed","_globalMatrix","_clearBoundsCache","getId","getName","_removeNamed","_getOwner","namedChildren","getStyle","setStyle","getSelection","setSelection","flag","isFullySelected","isClipMask","setClipMask","setFillColor","setStrokeColor","getData","setData","getPosition","position","_getPositionFromBounds","setPosition","getPivot","setPivot","getStrokeBounds","stroke","getHandleBounds","handle","getInternalBounds","hasMatrix","opts","_boundsOptions","getStrokeScaling","cacheItem","_getCachedBounds","setBounds","_backup","_getBounds","_updateBoundsCache","_getBoundsCacheKey","noInternal","cacheKey","cached","nonscaling","hasStroke","_getStrokeMatrix","_item","getViewMatrix","_boundsCache","cache","_decompose","decomposed","setRotation","setScaling","getMatrix","setMatrix","getGlobalMatrix","_dontClone","parents","getApplyMatrix","setApplyMatrix","getTransformContent","setTransformContent","getProject","installEvents","getLayer","getParent","setParent","addChild","getChildren","setChildren","removeChildren","addChildren","getFirstChild","getLastChild","getNextSibling","getPreviousSibling","_equals","copy","deep","copyAttributes","copyContent","insertAbove","orig","excludeMatrix","rasterize","resolution","raster","Raster","getResolution","topLeft","getTopLeft","floor","boundsSize","bottomRight","getBottomRight","ceil","rasterSize","_contains","_asPathItem","Path","getIntersections","hitTest","_hitTest","HitResult","hitTestAll","all","hitTestChildren","_exclude","child","_hitTestChildren","parentViewMatrix","guides","tolerancePadding","_tolerancePadding","_getStrokePadding","checkSelf","hit","checkPoint","pt","checkPosition","checkCenter","checkBounds","points","_hitTestSelf","fill","hasFill","matches","compare","matchObject","firstOnly","overlapping","inside","recursive","path","childMatrix","insertChildren","inserted","notifySelf","_insertAt","insertBelow","sendToBack","bringToFront","appendTop","appendBottom","moveAbove","moveBelow","addTo","copyTo","reduce","namedArray","notifyParent","_dispose","replaceWith","reverseChildren","reverse","numChildren","isEditable","hasShadow","_getOrder","getList","list1","list2","hasChildren","isAbove","isBelow","isParent","isChild","isDescendant","isAncestor","isSibling","isGroupedWith","_applyRecursively","transformMatrix","fillColor","getFillColor","strokeColor","getStrokeColor","_transformContent","decomp","applyRecursively","globalToLocal","localToGlobal","parentToLocal","localToParent","fitBounds","itemRatio","rectRatio","newBounds","_setStyles","fillStyle","toCanvasStyle","strokeStyle","lineWidth","getStrokeWidth","strokeJoin","getStrokeJoin","strokeCap","getStrokeCap","miterLimit","getMiterLimit","lineJoin","lineCap","dashArray","getDashArray","dashOffset","getDashOffset","setLineDash","lineDashOffset","mozDash","mozDashOffset","blur","getShadowBlur","getShadowOffset","shadowColor","getShadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","parentStrokeMatrix","globalMatrix","mainCtx","itemOffset","prevOffset","normalBlend","nativeBlend","direct","dontStart","clip","_canComposite","pop","strokeMatrix","clipItem","globalAlpha","globalCompositeOperation","setTransform","_draw","dontFinish","getFillRule","process","_isUpdated","updateVersion","CompoundPath","updated","itemSelected","boundsSelected","positionSelected","_drawSelected","color","getSelectedColor","half","pos","beginPath","arc","deltas","delta","moveTo","lineTo","closePath","fillRect","hash","tween","easing","duration","Tween","_handleFrame","time","running","tweenTo","tweenFrom","_clipItem","_getClipItem","isClipped","setClipped","clipped","Shape","radius","_type","_size","_radius","setType","setRadius","getType","getShape","setShape","getRadius","rad","toPath","toShape","dontPaint","untransformed","isCircle","rx","ry","cx","cy","bezierCurveTo","getCornerCenter","halfSize","dir","corner","quadrant","isOnEllipseStroke","padding","vector","hitStroke","hitFill","strokeRadius","strokePadding","outer","inner","createShape","Circle","Ellipse","ellipse","_readEllipse","crossOrigin","_smoothing","image","object","getElementById","naturalHeight","setImage","setSource","_loaded","_image","canvas","_canvas","_setImage","copyCanvas","drawImage","_crossOrigin","_clear","getElement","getLoaded","u","getPpi","getImage","Event","setTimeout","DomEvent","load","error","complete","naturalWidth","_context","setCanvas","_change","setContext","context","toDataURL","Image","getCrossOrigin","setCrossOrigin","getSmoothing","setSmoothing","smoothing","getSubCanvas","getSubRaster","getAverageColor","PathItem","_sampleContext","clearRect","sampleSize","pixels","getImageData","channels","total","alpha","Color","getPixel","setPixel","components","_convert","_alpha","imageData","createImageData","putImageData","setImageData","disabled","DomElement","setPrefixed","setDefinition","SymbolDefinition","getDefinition","getSymbol","setSymbol","dontCenter","setItem","_dontCenter","place","values","segments","handles","ends","Segment","arg5","handleIn","handleOut","SegmentPoint","_point","hasHandles","_handleIn","_handleOut","_path","curve","_curves","_closed","getHandleIn","setHandleIn","getHandleOut","setHandleOut","isSmooth","clearHandles","oldSelection","getPath","getCurve","_segments","getCurves","getLocation","CurveLocation","_segment1","getNext","smooth","_first","_last","factor","getPrevious","p0","p1","p2","k","d1_a","d1_2a","d2_a","d2_2a","N","isLast","reversed","removeSegment","segment","interpolate","handleIn1","handleIn2","handleOut2","handleOut1","change","Curve","arg6","arg7","seg1","seg2","handle1","handle2","segment1","segment2","_segment2","getPoint1","getHandle1","getHandle2","getPoint2","_length","classify","setPoint1","setPoint2","setHandle1","setHandle2","getSegment1","getSegment2","getPoints","getLine","getPart","getPartLength","divideAt","location","divideAtTime","getTimeAt","_setHandles","subdivide","setHandles","splitAt","splitAtTime","getLocationAtTime","isTime","straight","h1","h2","y0","x3","y3","x4","y4","x5","y5","x6","y6","x7","y7","x8","y8","x9","y9","getMonoCurves","io","o0","o1","o2","o3","isStraight","v0","v3","getTimeOf","p3","getNearestTime","minDist","minT","refine","dist","step","flip","isFlatEnough","flatness","ux","uy","_addBounds","minPad","maxPad","s1","s2","isLinear","third","hasLength","isHorizontal","getTangentAtTime","isVertical","getLocationAt","_isTime","getParameterAt","getTimesWithTangent","tangent","getOffsetAtTime","getLocationOf","getOffsetOf","loc","getOffset","getParameterOf","getNearestLocation","getNearestPoint","methods","_evaluateMethods","getLengthIntegrand","ax","bx","ay","by","getIterations","normalized","len","d3","serpentine","t1","t2","hasRoots","t1Ok","t2Ok","f1","f2","ds","forward","rangeLength","diff","guess","getTangent","getWeightedTangent","getNormal","getWeightedNormal","getCurvature","getPeaks","addLocation","locations","overlap","excludeStart","excludeEnd","loc1","loc2","_intersection","clipConvexHull","hullTop","hullBottom","dMin","dMax","clipConvexHullPart","threshold","qx","qy","getCurveLineIntersections","getCurveIntersections","overlaps","getOverlaps","straight1","straight2","before","addCurveIntersections","recursion","calls","tMin","tMax","uMax","tMinClip","tMaxClip","q0x","q0y","q3x","q3y","dp0","dp1","dp2","dp3","hull","getConvexHull","dq0","dq1","dq2","dq3","dist1","dist2","distRatio","tMinNew","tMaxNew","uDiff","getSelfIntersection","info","getSquaredLineLength","straightBoth","l1","l2","pairs","matrix1","matrix2","_returnFirst","length1","length2","values1","values2","boundsCollisions","index1","curve1","collisions1","index2","curve2","den","times","t0","_overlap","_distance","_setCurve","_time","getPointAtTime","_next","_previous","_setPath","_version","_curve","_segment","_setSegment","getSegment","getTime","trySegment","_offset","_curveOffset","getParameter","getCurveOffset","getIntersection","getLastSegment","_ignoreOther","isTouching","inter","isCrossing","t1Inside","t2Inside","c4","c3","offsets","addOffsets","isInRange","getPointAt","v4","a3","a4","hasOverlap","merge","search","found","path1","path2","expanded","pathData","compound","first","isClockwise","setClockwise","clockwise","setPathData","previous","control","relative","getCoord","command","lower","move","cubicCurveTo","quadraticCurveTo","arcTo","winding","_getWinding","onPath","windingL","windingR","getCrossings","minLoc","isPath","itemsFrom","itemsTo","setClosed","paths1","paths2","matched","boundsOverlaps","pathBoundsOverlaps","closed","setSegments","_segmentSelection","_area","getSegments","fullySelected","last","_add","getFirstSegment","_countCurves","getFirstCurve","getLastCurve","isClosed","getPathData","_precision","curX","curY","prevX","prevY","inX","inY","outX","outY","addSegment","skipLine","segs","_adjustCurves","insertSegment","addSegments","insertSegments","removeSegments","_includeCurves","area","_selectSegments","newSelection","last1","last2","first2","first1","simplify","flatten","flattener","PathFlattener","PathFitter","fit","_default","loop","asymmetric","paddingLeft","paddingRight","knots","n_1","rf","hx","hy","seg3","topCenter","seg4","isArc","pt1","pt2","shape","pos2","end2","pos1","end1","start2","cap","numSegments","hitCurves","isCloseEnough","checkSegmentPoint","seg","anchor","checkSegmentPoints","addToArea","checkSegmentStroke","isJoin","_addBevelJoin","_addSquareCap","getOffsetsWithTangent","curveStart","curveTimes","drawSegments","drawSegment","dashLength","drawPart","drawHandles","pX","pY","miniSize","miniHalf","drawHandle","hX","hY","getCurrentSegment","moveBy","curveTo","through","extent","middle","large","rxSq","rySq","xSq","ySq","throughSide","centerSide","ext","inc","z","out","_in","lineBy","curveBy","parameter","cubicCurveBy","quadraticCurveBy","arcBy","prevCoords","processSegment","joinBounds","addPoint","addRound","addJoin","addCap","phi","isArea","normal1","getNormalAtTime","normal2","normal","joinPadding","joinRadius","SQRT2","paddingX","paddingY","xn","xx","yn","yx","ellipseSegments","createPath","createEllipse","bl","getBottomLeft","tl","tr","getTopRight","br","RoundRectangle","Oval","Arc","RegularPolygon","sides","three","Star","radius1","radius2","paths","getCurrentPath","check","operators","getPaths","preparePath","resolve","resolveCrossings","reorient","createResult","result","filterIntersection","traceBoolean","operation","trace","splitBoolean","_path1","_path2","operator","crossings","divideLocations","collectPaths","_overlapsOnly","curvesValues","curveCollisions","curveCollisionsMap","map","propagateWinding","_winding","tracePaths","reorientPaths","added","addPath","linkIntersections","clearCurveHandles","lookup","container","sorted","entry1","containerWinding","getInteriorPoint","entry2","clearLater","renormalizeLocs","prevCurve","prevTime","results","clearCurves","clearLookup","origTime","newCurve","getWinding","dontFlip","vPrev","vClose","curvesList","ia","pv","pa","po","paL","paR","pathWindingL","pathWindingR","onAnyPath","quality","handleCurve","a0","monoCurves","addWinding","windingPrev","a3Prev","totalLength","curveLength","operand","SQRT1_2","wind","pathWinding","otherPath","starts","isValid","_visited","isStart","visitPath","inter1","inter2","over1","over2","branch","visited","valid","finished","branches","getCrossingSegments","collectStarts","collect","nextInter","shift","hasOverlaps","hasCrossings","intersections","nonZero","intercepts","mv","mo0","mo3","maxRecursion","ignoreStraight","minSpan","addCurve","computeParts","halves","tMid","_get","fitCubic","tan1","tan2","uPrime","chordLengthParameterize","maxError","parametersInOrder","generateBezier","findMaxError","reparameterize","tanCenter","C","X","b0","b3","alpha1","alpha2","detC0C1","detC0X","detXC1","c0","segLength","eps","degree","maxDist","P","TextItem","content","_content","_lines","setContent","getContent","getCharacterStyle","setCharacterStyle","getParagraphStyle","setParagraphStyle","PointText","lines","leading","getLeading","font","getFontStyle","textAlign","getJustification","fillText","strokeText","numLines","justification","getTextWidth","colorCtx","gray","rgb","hsb","hsl","gradient","componentParsers","namedColors","transparent","hsbIndices","converters","g","achromatic","t3s","t3","properties","parser","_components","Gradient","_removeOwner","_addOwner","_properties","argType","converted","fromCSS","string","parseInt","trim","isHSL","component","turn","grad","willReadFrequently","parsers","stops","radial","getComponents","_canvasStyle","converter","convert","getAlpha","setAlpha","hasAlpha","col","isGradient","toCSS","hex","canvasGradient","_stops","origin","destination","highlight","inverse","_radial","createRadialGradient","createLinearGradient","addColorStop","_color","_types","_setOwner","components1","components2","setStops","setRadial","_owners","getStops","GradientStop","getRadial","stops1","stops2","rampPoint","setColor","setOffset","getRampPoint","setRampPoint","getColor","itemDefaults","fillRule","strokeScaling","shadowOffset","selectedColor","groupDefaults","fontFamily","fontWeight","textDefaults","_values","isColor","isPoint","applyToChildren","old","_dontMerge","childValue","Font","WindingRule","isStyle","style1","style2","secondary","defaults2","value1","value2","getFontSize","getFontWeight","getFontFamily","getFont","setFont","getPixelSize","handlePrefix","prefixes","suffix","prefix","getStyles","doc","nodeType","ownerDocument","defaultView","getComputedStyle","viewport","body","html","documentElement","getBoundingClientRect","clientLeft","clientTop","pageXOffset","scrollLeft","pageYOffset","scrollTop","getViewportBounds","innerWidth","clientWidth","innerHeight","clientHeight","isInvisible","isInView","getPrefixed","passive","addEventListener","removeEventListener","targetTouches","changedTouches","pageX","clientX","pageY","clientY","getTarget","srcElement","getRelatedTarget","relatedTarget","toElement","requestAnimationFrame","timer","nativeRequest","requested","callbacks","handleCallbacks","functions","callback","setInterval","getCanvasSize","setAttribute","_viewEvents","none","userDrag","userSelect","touchCallout","contentZooming","tapHighlightColor","_windowEvents","resize","setViewSize","Stats","_stats","stats","domElement","appendChild","_element","_pixelRatio","devicePixelRatio","_setElementSize","_viewSize","_views","_viewsById","_focused","_frameItems","_frameItemCount","_itemEvents","native","virtual","node","_animate","play","pause","_count","getAutoUpdate","setAutoUpdate","autoUpdate","update","now","Date","animate","_handleFrameItems","getPixelRatio","getViewSize","isVisible","parentNode","temp","createElement","removeChild","getZoom","setZoom","zoom","scrollBy","projectToView","viewToProject","getEventPoint","CanvasView","prevFocus","tempFocus","mousedown","mousemove","mouseup","dragging","mouseDown","pointerEnabled","msPointerEnabled","viewEvents","docEvents","mouseout","nodeName","handleMouseMove","scroll","_handleMouseEvent","downPoint","lastPoint","downItem","overItem","dragItem","clickItem","clickTime","dblClick","called","prevented","fallbacks","doubleclick","wasInView","itemEventsMap","click","mouseenter","mouseleave","itemEvents","hitItems","nativeMove","tool","inView","hitItem","mouse","substr","emitMouseEvent","drag","emitMouseEvents","down","up","cancelable","preventDefault","_handleKeyEvent","character","keyEvent","KeyEvent","sign","_resetState","prevPoint","stopItem","mouseEvent","stopped","MouseEvent","fallback","HTMLCanvasElement","deviceRatio","backingStoreRatio","firefox","prevFont","measureText","stopPropagation","getTimeStamp","timeStamp","getModifiers","Key","modifiers","metaFixMap","downKey","keyLookup","charLookup","keyMap","charMap","alt","meta","capsLock","space","option","mac","getKey","keyIdentifier","String","fromCharCode","keyCode","keydown","altKey","metaKey","ctrlKey","keypress","charCode","keyup","isDown","ToolEvent","_choosePoint","toolPoint","getLastPoint","_lastPoint","setLastPoint","getDownPoint","_downPoint","setDownPoint","getMiddlePoint","_middlePoint","setMiddlePoint","middlePoint","getDelta","_delta","setDelta","getCount","setCount","Tool","_moveCount","_downCount","getMinDistance","_minDistance","setMinDistance","minDistance","_maxDistance","getMaxDistance","setMaxDistance","maxDistance","getFixedDistance","setFixedDistance","distance","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","isFunction","_then","_startTime","state","_keys","_parsedKeys","_parseKeys","_from","_getState","_to","then","progress","getValue","__add","__subtract","__multiply","_setProperty","onUpdate","startTime","_getProperty","resolved","_resolveValue","_calculate","parsed","calculateBinary","Http","request","xhr","XMLHttpRequest","open","method","url","async","mimeType","overrideMimeType","onload","status","responseText","onerror","message","send","canvases","sr","sg","sb","sa","bg","bb","ba","dr","dg","db","getLum","setLum","mn","lmn","ln","mxl","getSat","setSat","md","modes","screen","overlay","darken","lighten","difference","exclusion","hue","saturation","luminosity","average","negation","mode","srcContext","dstContext","srcCanvas","dstData","SvgElement","svg","xmlns","xlink","attributeNamespace","href","attributes","namespace","setAttributeNS","tag","createElementNS","getAttributeNS","SvgStyles","true","false","property","attribute","toSVG","fromSVG","exportFilter","getTransform","coordinates","attrs","trans","exportGroup","childNode","exportSVG","exportShape","exporters","embedImages","matchShapes","definitionItem","viewBox","overflow","textContent","svgs","__id","typeId","exportDefinitions","defs","insertBefore","firstChild","XMLSerializer","serializeToString","exporter","onExport","exportGradient","gradientNode","getGradient","getOrigin","getDestination","getHighlight","fy","gradientUnits","stopColor","visibility","setOptions","rootSize","allowNull","allowPercent","defaultValue","defaultX","defaultY","convertValue","importGroup","nodes","childNodes","isClip","isDefs","currentStyle","applyAttributes","querySelectorAll","importNode","importPoly","importGradient","scaleToBounds","_scaleToBounds","importers","clippath","polygon","polyline","lineargradient","radialgradient","use","circle","text","switch","applyTransform","transforms","applyOpacity","gradientTransform","setVisible","display","percent","styles","group","tagName","isElement","nextSibling","importer","onImport","expandShapes","importSVG","DOMParser","parseFromString","File","reader","FileReader","readAsText","mod","acorn","inpt","inputLen","input","initTokenState","parseTopLevel","program","lastStart","lastEnd","tokPos","lastEndLoc","line_loc_t","inFunction","strict","labels","readToken","startNode","tokType","_eof","stmt","parseStatement","isUseStrict","setStrict","finishNode","sourceFile","tokStart","tokEnd","tokStartLoc","tokEndLoc","tokVal","tokRegexpAllowed","tokCurLine","tokLineStart","containsEsc","defaultOptions","ecmaVersion","strictSemicolons","allowTrailingCommas","forbidReserved","allowReturnOutsideFunction","onComment","ranges","directSourceFile","opt","getLineInfo","cur","lineBreak","lastIndex","column","raise","SyntaxError","raisedAt","tokenize","getToken","forceRegexp","startLoc","endLoc","jumpTo","reAllowed","skipSpace","empty","_num","_regexp","_string","_break","keyword","_case","beforeExpr","_catch","_continue","_debugger","_do","isLoop","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_while","_with","_new","_this","_null","atomValue","_true","_false","binop","keywordTypes","_bracketL","_bracketR","_braceL","_braceR","_parenL","_parenR","_comma","_semi","_colon","_dot","_question","_slash","_eq","isAssign","_assign","_incDec","postfix","isUpdate","_prefix","_logicalOR","_logicalAND","_bitwiseOR","_bitwiseXOR","_bitwiseAND","_equality","_relational","_bitShift","_plusMin","_multiplyModulo","kw","tokTypes","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","question","slash","eq","eof","num","regexp","makePredicate","words","cats","compareTo","arr","cat","Function","isReservedWord3","isReservedWord5","isStrictReservedWord","isStrictBadIdWord","isKeyword","nonASCIIwhitespace","nonASCIIidentifierStartChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","newline","isIdentifierStart","isIdentifierChar","finishToken","skipLineComment","ch","charCodeAt","skipBlockComment","readRegexp","readWord","tok","getTokenFromCode","readNumber","readInt","readString","quote","octal","readHexChar","finishOp","escaped","inClass","charAt","mods","readWord1","radix","startsWithDot","isFloat","word","esc","escStr","strct","lastIndexOf","node_t","node_loc_t","range","startNodeFrom","expression","eat","canInsertSemicolon","semicolon","unexpected","expect","checkLVal","expr","loopLabel","kind","switchLabel","sawDefault","starttype","isBreak","label","parseIdent","lab","parseParenExpression","parseFor","parseVar","declarations","parseForIn","parseExpression","parseFunction","consequent","alternate","argument","discriminant","cases","isCase","block","parseBlock","clause","guard","guardedHandlers","finalizer","maybeName","allowStrict","oldStrict","noIn","decl","noComma","parseMaybeAssign","expressions","parseMaybeConditional","parseExprOp","minPrec","prec","parseMaybeUnary","parseSubscripts","parseExprAtom","noCalls","computed","callee","parseExprList","raw","tokStartLoc1","tokStart1","elements","parseObj","sawGetSet","parsePropertyName","isGetSet","conflict","isStatement","params","oldInFunc","oldLabels","close","allowTrailingComma","allowEmpty","elts","liberal","binaryOperators","unaryOperators","__self","__$__","$__","compile","insertions","insertion","getCode","replaceCode","sourceMaps","paperFeatures","offsetCode","lineBreaks","getElementsByTagName","innerHTML","mappings","encodeVLQ","base64","safari","file","names","sourceRoot","sources","sourcesContent","operatorOverloading","moduleExports","walkAST","handleOverloading","between","parentType","exp","handleExports","declaration","specifiers","dec","specifier","preserveParens","sourceType","btoa","unescape","encodeURIComponent","toolHandlers","expose","compiled","script","head","createTextNode","__paperscript__","onResize","setOnResize","setOnFrame","loadScript","canvasId","scopeAttribute","baseURI","loadAll","readyState","calculateUnary","Symbol","PlacedSymbol","amd","$f0e98b2c23d58ac9$export$56b48cc5d7560ffb","$f0e98b2c23d58ac9$export$332f4d7bee38db93","$f0e98b2c23d58ac9$export$f435f793048e7a0f","$f0e98b2c23d58ac9$export$d53f8326294b31d8","$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8","$f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6","$f0e98b2c23d58ac9$export$866e20207bbc41f2","$f0e98b2c23d58ac9$export$2c19a3e3b4008fff","$f0e98b2c23d58ac9$export$268622f0f1cbc82b","$f0e98b2c23d58ac9$export$13807d9ee5a34a42","$f0e98b2c23d58ac9$export$7387db7caf96fcdb","$f0e98b2c23d58ac9$export$7af82191547c5ff7","$f0e98b2c23d58ac9$export$ba43bf67f3d48107","$f0e98b2c23d58ac9$export$7acfa6ed01010e37","$f0e98b2c23d58ac9$export$68e7b4c4d99215d9","$f0e98b2c23d58ac9$export$2b5f701edfbd6f00","$f0e98b2c23d58ac9$export$85c928794f8d04d4","$f0e98b2c23d58ac9$export$50792b0e93539fde","$f0e98b2c23d58ac9$export$83d89fbfd8236492","$f0e98b2c23d58ac9$export$98e6a39c04603d36","$f0e98b2c23d58ac9$export$61f24eb03dd7ce92","$f0e98b2c23d58ac9$export$5f8c09e3ae6f64e1","$f0e98b2c23d58ac9$var$astralIdentifierCodes","$f0e98b2c23d58ac9$var$astralIdentifierStartCodes","$f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars","$f0e98b2c23d58ac9$var$reservedWords","strictBind","$f0e98b2c23d58ac9$var$ecma5AndLessKeywords","$f0e98b2c23d58ac9$var$keywords$1","$f0e98b2c23d58ac9$var$keywordRelationalOperator","$f0e98b2c23d58ac9$var$nonASCIIidentifierStart","$f0e98b2c23d58ac9$var$nonASCIIidentifier","$f0e98b2c23d58ac9$var$isInAstralSet","astral","conf","startsExpr","updateContext","$f0e98b2c23d58ac9$var$binop","$f0e98b2c23d58ac9$var$beforeExpr","$f0e98b2c23d58ac9$var$startsExpr","$f0e98b2c23d58ac9$var$kw","privateId","questionDot","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","star","starstar","coalesce","_const","_super","_extends","_export","_import","_instanceof","_typeof","_void","_delete","$f0e98b2c23d58ac9$var$nextLineBreak","$f0e98b2c23d58ac9$var$skipWhiteSpace","$f0e98b2c23d58ac9$var$ref","$f0e98b2c23d58ac9$var$hasOwnProperty","$f0e98b2c23d58ac9$var$toString","$f0e98b2c23d58ac9$var$hasOwn","hasOwn","propName","$f0e98b2c23d58ac9$var$isArray","$f0e98b2c23d58ac9$var$wordsRegexp","$f0e98b2c23d58ac9$var$codePointToString","$f0e98b2c23d58ac9$var$loneSurrogate","nextBreak","onInsertedSemicolon","onTrailingComma","allowReserved","allowImportExportEverywhere","allowAwaitOutsideFunction","allowSuperOutsideMethod","allowHashBang","checkPrivateFields","onToken","$f0e98b2c23d58ac9$var$warnedAboutEcmaVersion","$f0e98b2c23d58ac9$var$functionFlags","generator","$f0e98b2c23d58ac9$var$SCOPE_FUNCTION","startPos","$f0e98b2c23d58ac9$var$getOptions","console","warn","tokens","token","comment","keywords","reserved","reservedWords","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","lineStart","curLine","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","potentialArrowInForAwait","yieldPos","awaitPos","awaitIdentPos","undefinedExports","scopeStack","enterScope","regexpState","privateNameStack","$f0e98b2c23d58ac9$var$prototypeAccessors","inGenerator","inAsync","canAwait","allowSuper","allowDirectSuper","treatFunctionsAsVar","allowNewDotTarget","inClassStaticBlock","nextToken","currentVarScope","inClassFieldInit","currentThisScope","treatFunctionsAsVarInScope","currentScope","plugins","cls","parseExpressionAt","tokenizer","defineProperties","$f0e98b2c23d58ac9$var$pp$9","$f0e98b2c23d58ac9$var$literal","spaceAfter","isContextual","eatContextual","expectContextual","insertSemicolon","afterTrailingComma","notNext","$f0e98b2c23d58ac9$var$DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","$f0e98b2c23d58ac9$var$pp$8","adaptDirectivePrologue","$f0e98b2c23d58ac9$var$loopLabel","$f0e98b2c23d58ac9$var$switchLabel","isLet","skip","nextCh","ident","isAsyncFunction","after","topLevel","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","parseExpressionStatement","parseImport","parseExport","parseLabeledStatement","awaitAt","init$1","await","startsWithLet","isForOf","toAssignable","checkLValPattern","isAsync","declarationPosition","$f0e98b2c23d58ac9$var$FUNC_STATEMENT","$f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT","exitScope","$f0e98b2c23d58ac9$var$empty$1","parseCatchClauseParam","parseBindingAtom","simple","allowMissingInitializer","i$1","label$1","statementStart","createNewLexicalScope","exitStrict","isForIn","isFor","parseVarId","$f0e98b2c23d58ac9$var$checkKeyName","statement","allowExpressionBody","forInit","initFunction","checkLValSimple","oldYieldPos","oldAwaitPos","oldAwaitIdentPos","parseFunctionParams","parseFunctionBody","parseBindingList","parseClassId","parseClassSuper","privateNameMap","enterClassBody","classBody","hadConstructor","parseClassElement","superClass","$f0e98b2c23d58ac9$var$isPrivateNameConflicted","curr","static","exitClassBody","constructorAllowsSuper","keyName","isGenerator","isStatic","parseClassStaticBlock","isClassElementNameStart","lastValue","startNodeAt","parseClassElementName","isConstructor","parseClassMethod","parseClassField","parsePrivateIdent","allowsDirectSuper","parseMethod","$f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK","parseExprSubscripts","declared","used","parseExportAllDeclaration","exported","parseModuleExportName","checkExport","parseExportDefaultDeclaration","shouldParseExportStatement","parseExportDeclaration","checkVariableExport","parseExportSpecifiers","spec","checkUnreserved","local","checkLocalExport","fNode","cNode","checkPatternExport","pat","list$1","elt","decls","parseExportSpecifier","parseImportSpecifiers","parseImportSpecifier","imported","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","stringLiteral","parseLiteral","statements","isDirectiveCandidate","directive","$f0e98b2c23d58ac9$var$pp$7","isBinding","toAssignableList","exprList","parseSpread","parseRestBinding","allowModifiers","rest","parseBindingListItem","parseAssignableListItem","elem","parseMaybeDefault","bindingType","checkClashes","isBind","declareName","checkLValInnerPattern","isExpr","preserveSpace","override","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","$f0e98b2c23d58ac9$var$pp$6","curContext","braceIsBlock","prevType","inGeneratorContext","overrideContext","tokenCtx","statementParens","allowed","$f0e98b2c23d58ac9$var$pp$5","checkPropClash","propHash","shorthand","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldDoubleProto","parseExprOps","leftStartPos","leftStartLoc","logical","buildBinary","sawUnary","parseAwait","$f0e98b2c23d58ac9$var$isPrivateFieldAccess","node$1","maybeAsyncArrow","optionalChained","parseSubscript","optional","chainNode","shouldParseAsyncArrow","parseSubscriptAsyncArrow","parseArrowExpression","optionalSupported","node$2","quasi","parseTemplate","isTagged","forNew","canBeArrow","regex","pattern","parseParenAndDistinguishExpression","parseNew","parseExprImport","parseExprAtomDefault","parseImportMeta","parseDynamicImport","errorPos","bigint","shouldParseArrow","spreadStart","innerStartPos","innerStartLoc","lastIsComma","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","$f0e98b2c23d58ac9$var$empty","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","parseGetterSetter","paramCount","copyNode","isArrowFunction","isMethod","isExpression","useStrict","checkParams","nonSimple","isSimpleParamList","allowDuplicates","nameHash","re","parseIdentNode","delegate","$f0e98b2c23d58ac9$var$pp$4","$f0e98b2c23d58ac9$var$pp$3","$f0e98b2c23d58ac9$var$Scope","var","lexical","redeclared","scope$1","scope$2","scope$3","$f0e98b2c23d58ac9$var$SCOPE_TOP","$f0e98b2c23d58ac9$var$pp$2","$f0e98b2c23d58ac9$var$finishNodeAt","newNode","$f0e98b2c23d58ac9$var$ecma9BinaryProperties","$f0e98b2c23d58ac9$var$ecma10BinaryProperties","$f0e98b2c23d58ac9$var$ecma12BinaryProperties","$f0e98b2c23d58ac9$var$ecma11BinaryProperties","$f0e98b2c23d58ac9$var$unicodeBinaryProperties","$f0e98b2c23d58ac9$var$unicodeBinaryPropertiesOfStrings","$f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues","$f0e98b2c23d58ac9$var$ecma9ScriptValues","$f0e98b2c23d58ac9$var$ecma10ScriptValues","$f0e98b2c23d58ac9$var$ecma11ScriptValues","$f0e98b2c23d58ac9$var$ecma12ScriptValues","$f0e98b2c23d58ac9$var$ecma13ScriptValues","$f0e98b2c23d58ac9$var$unicodeScriptValues","$f0e98b2c23d58ac9$var$data","$f0e98b2c23d58ac9$var$i","$f0e98b2c23d58ac9$var$list","$f0e98b2c23d58ac9$var$buildUnicodeData","binary","binaryOfStrings","nonBinary","General_Category","Script","Script_Extensions","gc","sc","scx","$f0e98b2c23d58ac9$var$pp$1","$f0e98b2c23d58ac9$var$RegExpValidationState","validFlags","unicodeProperties","switchU","switchV","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","$f0e98b2c23d58ac9$var$isSyntaxCharacter","$f0e98b2c23d58ac9$var$isControlLetter","$f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter","$f0e98b2c23d58ac9$var$isDecimalDigit","$f0e98b2c23d58ac9$var$isHexDigit","$f0e98b2c23d58ac9$var$hexToInt","$f0e98b2c23d58ac9$var$isOctalDigit","unicodeSets","unicode","at","forceU","nextIndex","lookahead","advance","eatChars","chs","validateRegExpFlags","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","regexp_classContents","regexp_classSetExpression","regexp_nonEmptyClassRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","regexp_eatClassControlLetter","subResult","regexp_eatClassSetRange","regexp_eatClassSetOperand","regexp_eatClassSetCharacter","regexp_eatClassStringDisjunction","regexp_eatNestedClass","result$1","regexp_classStringDisjunctionContents","regexp_classString","regexp_eatClassSetReservedPunctuator","regexp_eatOctalDigit","n1","n2","$f0e98b2c23d58ac9$var$pp","$f0e98b2c23d58ac9$var$stringToBigInt","BigInt","ignoreEscapeSequenceInKeyword","iterator","this$1$1","done","fullCharCodeAtPos","startSkip","readToken_dot","next2","readToken_slash","readToken_mult_modulo_exp","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readToken_question","next2$1","readToken_numberSign","readRadixNumber","flagsStart","maybeLegacyOctalNumericLiteral","allowSeparators","isLegacyOctalNumericLiteral","lastCode","val$1","readCodePoint","codePos","invalidStringToken","chunkStart","readEscapedChar","$f0e98b2c23d58ac9$var$INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","inTemplate","octalStr","escStart","Parser","Position","SourceLocation","Node","TokenType","TokContext","tokContexts","Token","isNewLine","lineBreakG","$5f77a1132959636d$var$container","$5f77a1132959636d$var$dialog","$5f77a1132959636d$var$help","showModal","scrollIntoView","$2bfca13ad910c056$export$2e2bcd8739ae039","selfOptions","pipes","pipe","pipeArg","processor","lastPipe","nextPipe","nextAfterChildren","hasResult","$4b3a4f9971dfd11f$export$2e2bcd8739ae039","filters","debug","filterName","exiting","resultCheck","msg","shouldHaveResult","should","noResult","$e9b2e8bb279f614c$export$2e2bcd8739ae039","setResult","exit","childName","root","$3383b9bfdfb3a92e$export$2e2bcd8739ae039","$3383b9bfdfb3a92e$var$cloneRegExp","regexMatch","cloned","$ea655194af34c016$export$2e2bcd8739ae039","cloneDiffValues","$fcf8dd03cdbf4430$export$2e2bcd8739ae039","$82864bc3974cd149$export$2e2bcd8739ae039","$cb6bc7c1a2416044$export$32e2de1ca8818233","leftType","rightType","leftIsArray","rightIsArray","$cb6bc7c1a2416044$export$b17cd1eea2ef8348","nested","nonNestedDelta","regexArgs","$cb6bc7c1a2416044$export$9d101d90be8482a0","$fad0d73b9c59b660$export$3b212405c262fd6e","_t","$fad0d73b9c59b660$export$81d88d7d212bb18e","propertyFilter","$fad0d73b9c59b660$export$b17cd1eea2ef8348","nestedDelta","objectDelta","$fad0d73b9c59b660$export$575f4633982343e8","deltaWithChildren","$fad0d73b9c59b660$export$9d101d90be8482a0","$fad0d73b9c59b660$export$84a677efe7258d3b","$f03df935593440df$var$defaultMatch","array1","array2","$f03df935593440df$var$lengthMatrix","len1","len2","$f03df935593440df$var$backtrack","subsequence","sequence","indices1","indices2","valueAtMatrixAbove","$f03df935593440df$export$2e2bcd8739ae039","innerContext","$a19812cbdcd458da$var$matchItems","objectHash","matchByPosition","hashCache1","hash1","hashCache2","hash2","$a19812cbdcd458da$export$32e2de1ca8818233","matchContext","commonHead","commonTail","$a19812cbdcd458da$var$arraysHaveMatchByRef","trimmed1","trimmed2","seq","removedItems","detectMove","arrays","includeValueOnMove","removedItemsLength","indexOnArray2","isMove","removeItemIndex1","$a19812cbdcd458da$var$compare","numerically","numericallyBy","$a19812cbdcd458da$export$b17cd1eea2ef8348","toRemove","toInsert","toModify","removedOrMovedIndex","numberIndex","indexDiff","removedValue","toInsertLength","toModifyLength","modification","$a19812cbdcd458da$export$575f4633982343e8","$a19812cbdcd458da$export$9d101d90be8482a0","newName","arrayMoveDelta","arrayDelta","$a19812cbdcd458da$var$reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","$a19812cbdcd458da$export$84a677efe7258d3b","$db273bf4a2715f93$export$32e2de1ca8818233","$53af34752a83816e$var$cachedDiffPatch","$53af34752a83816e$var$getDiffMatchPatch","required","textDiff","diffMatchPatch","diff_match_patch_not_found","txt1","txt2","patch_toText","patch_make","patch","patch_apply","patch_fromText","textPatchFailed","$53af34752a83816e$export$32e2de1ca8818233","minLength","$53af34752a83816e$export$b17cd1eea2ef8348","textDiffDelta","$53af34752a83816e$var$textDeltaReverse","lineTmp","header","headerRegex","$53af34752a83816e$export$9d101d90be8482a0","$356a848867d17460$export$2e2bcd8739ae039","unpatch","$b8ea597934691048$var$zero$1","buf","$b8ea597934691048$var$extra_lbits","Uint8Array","$b8ea597934691048$var$extra_dbits","$b8ea597934691048$var$extra_blbits","$b8ea597934691048$var$bl_order","$b8ea597934691048$var$static_ltree","$b8ea597934691048$var$static_dtree","$b8ea597934691048$var$D_CODES$1","$b8ea597934691048$var$_dist_code","$b8ea597934691048$var$_length_code","$b8ea597934691048$var$MAX_MATCH$1","$b8ea597934691048$var$base_length","$b8ea597934691048$var$base_dist","$b8ea597934691048$var$StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","$b8ea597934691048$var$TreeDesc","dyn_tree","stat_desc","max_code","$b8ea597934691048$var$d_code","$b8ea597934691048$var$put_short","pending_buf","pending","$b8ea597934691048$var$send_bits","bi_valid","$b8ea597934691048$var$Buf_size","bi_buf","$b8ea597934691048$var$send_code","tree","$b8ea597934691048$var$bi_reverse","$b8ea597934691048$var$bi_flush","$b8ea597934691048$var$gen_bitlen","bits","xbits","stree","extra","bl_count","heap","heap_max","opt_len","static_len","$b8ea597934691048$var$gen_codes","next_code","$b8ea597934691048$var$MAX_BITS$1","$b8ea597934691048$var$tr_static_init","$b8ea597934691048$var$LENGTH_CODES$1","$b8ea597934691048$var$L_CODES$1","$b8ea597934691048$var$LITERALS$1","$b8ea597934691048$var$init_block","dyn_ltree","dyn_dtree","bl_tree","$b8ea597934691048$var$END_BLOCK","sym_next","$b8ea597934691048$var$bi_windup","$b8ea597934691048$var$smaller","depth","_n2","_m2","$b8ea597934691048$var$pqdownheap","heap_len","$b8ea597934691048$var$compress_block","ltree","dtree","lc","sym_buf","$b8ea597934691048$var$build_tree","$b8ea597934691048$var$scan_tree","curlen","prevlen","nextlen","max_count","min_count","$b8ea597934691048$var$REP_3_6","$b8ea597934691048$var$REPZ_3_10","$b8ea597934691048$var$REPZ_11_138","$b8ea597934691048$var$send_tree","$b8ea597934691048$var$build_bl_tree","max_blindex","l_desc","d_desc","bl_desc","$b8ea597934691048$var$BL_CODES$1","$b8ea597934691048$var$send_all_trees","lcodes","dcodes","blcodes","rank","$b8ea597934691048$var$detect_data_type","block_mask","$b8ea597934691048$var$static_init_done","$b8ea597934691048$var$_tr_stored_block$1","stored_len","$b8ea597934691048$var$STORED_BLOCK","subarray","$b8ea597934691048$var$trees","_tr_init","_tr_stored_block","_tr_flush_block","opt_lenb","static_lenb","level","strm","data_type","strategy","$b8ea597934691048$var$STATIC_TREES","$b8ea597934691048$var$DYN_TREES","_tr_tally","sym_end","_tr_align","$b8ea597934691048$var$adler32_1","adler","$b8ea597934691048$var$crcTable","Uint32Array","$b8ea597934691048$var$makeTable","table","$b8ea597934691048$var$crc32_1","crc","$b8ea597934691048$var$messages","$b8ea597934691048$var$constants$2","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","$b8ea597934691048$var$_tr_init","$b8ea597934691048$var$_tr_stored_block","$b8ea597934691048$var$_tr_flush_block","$b8ea597934691048$var$_tr_tally","$b8ea597934691048$var$_tr_align","$b8ea597934691048$var$Z_NO_FLUSH$2","$b8ea597934691048$var$Z_PARTIAL_FLUSH","$b8ea597934691048$var$Z_FULL_FLUSH$1","$b8ea597934691048$var$Z_FINISH$3","$b8ea597934691048$var$Z_BLOCK$1","$b8ea597934691048$var$Z_OK$3","$b8ea597934691048$var$Z_STREAM_END$3","$b8ea597934691048$var$Z_STREAM_ERROR$2","$b8ea597934691048$var$Z_DATA_ERROR$2","$b8ea597934691048$var$Z_BUF_ERROR$1","$b8ea597934691048$var$Z_DEFAULT_COMPRESSION$1","$b8ea597934691048$var$Z_FILTERED","$b8ea597934691048$var$Z_HUFFMAN_ONLY","$b8ea597934691048$var$Z_RLE","$b8ea597934691048$var$Z_FIXED","$b8ea597934691048$var$Z_DEFAULT_STRATEGY$1","$b8ea597934691048$var$Z_UNKNOWN","$b8ea597934691048$var$Z_DEFLATED$2","$b8ea597934691048$var$err","errorCode","$b8ea597934691048$var$rank","$b8ea597934691048$var$zero","$b8ea597934691048$var$slide_hash","wsize","w_size","hash_size","$b8ea597934691048$var$HASH","hash_shift","hash_mask","$b8ea597934691048$var$flush_pending","avail_out","output","pending_out","next_out","total_out","$b8ea597934691048$var$flush_block_only","block_start","strstart","$b8ea597934691048$var$put_byte","$b8ea597934691048$var$putShortMSB","$b8ea597934691048$var$read_buf","avail_in","next_in","wrap","total_in","$b8ea597934691048$var$longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","$b8ea597934691048$var$MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","match_start","$b8ea597934691048$var$fill_window","more","_w_size","window_size","ins_h","$b8ea597934691048$var$deflate_stored","flush","min_block","pending_buf_size","have","high_water","$b8ea597934691048$var$deflate_fast","hash_head","bflush","match_length","max_lazy_match","$b8ea597934691048$var$MIN_MATCH","$b8ea597934691048$var$deflate_slow","max_insert","prev_match","match_available","$b8ea597934691048$var$deflate_rle","$b8ea597934691048$var$deflate_huff","$b8ea597934691048$var$Config","good_length","max_lazy","nice_length","max_chain","$b8ea597934691048$var$configuration_table","$b8ea597934691048$var$lm_init","$b8ea597934691048$var$DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","Uint16Array","$b8ea597934691048$var$HEAP_SIZE","$b8ea597934691048$var$MAX_BITS","lit_bufsize","$b8ea597934691048$var$deflateStateCheck","$b8ea597934691048$var$deflateResetKeep","$b8ea597934691048$var$deflateReset","ret","$b8ea597934691048$var$deflateInit2","windowBits","memLevel","$b8ea597934691048$var$deflate_1$2","deflateInit","deflateInit2","deflateReset","deflateResetKeep","deflateSetHeader","deflate","old_flush","level_flags","hcrc","beg","gzhead_extra","bstate","deflateEnd","deflateSetDictionary","dictLength","tmpDict","avail","deflateInfo","$b8ea597934691048$var$_has","$b8ea597934691048$var$common","TypeError","flattenChunks","chunks","chunk","$b8ea597934691048$var$STR_APPLY_UIA_OK","__","$b8ea597934691048$var$_utf8len","$b8ea597934691048$var$buf2binstring","$b8ea597934691048$var$strings","string2buf","TextEncoder","encode","m_pos","str_len","buf_len","buf2string","TextDecoder","decode","utf16buf","c_len","utf8border","$b8ea597934691048$var$zstream","$b8ea597934691048$var$toString$1","$b8ea597934691048$var$Z_NO_FLUSH$1","$b8ea597934691048$var$Z_SYNC_FLUSH","$b8ea597934691048$var$Z_FULL_FLUSH","$b8ea597934691048$var$Z_FINISH$2","$b8ea597934691048$var$Z_OK$2","$b8ea597934691048$var$Z_STREAM_END$2","$b8ea597934691048$var$Z_DEFAULT_COMPRESSION","$b8ea597934691048$var$Z_DEFAULT_STRATEGY","$b8ea597934691048$var$Z_DEFLATED$1","$b8ea597934691048$var$Deflate$1","chunkSize","gzip","ended","dict","_dict_set","$b8ea597934691048$var$deflate$1","deflator","flush_mode","_flush_mode","onData","onEnd","$b8ea597934691048$var$inffast","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","from_source","lencode","distcode","lenbits","distbits","sane","$b8ea597934691048$var$lbase","$b8ea597934691048$var$lext","$b8ea597934691048$var$dbase","$b8ea597934691048$var$dext","$b8ea597934691048$var$inftrees","lens","lens_index","codes","table_index","work","incr","low","mask","here_bits","here_op","here_val","sym","drop","huff","$b8ea597934691048$var$MAXBITS","offs","$b8ea597934691048$var$Z_FINISH$1","$b8ea597934691048$var$Z_BLOCK","$b8ea597934691048$var$Z_TREES","$b8ea597934691048$var$Z_OK$1","$b8ea597934691048$var$Z_STREAM_END$1","$b8ea597934691048$var$Z_NEED_DICT$1","$b8ea597934691048$var$Z_STREAM_ERROR$1","$b8ea597934691048$var$Z_DATA_ERROR$1","$b8ea597934691048$var$Z_MEM_ERROR$1","$b8ea597934691048$var$Z_BUF_ERROR","$b8ea597934691048$var$Z_DEFLATED","$b8ea597934691048$var$zswap32","$b8ea597934691048$var$InflateState","havedict","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","$b8ea597934691048$var$inflateStateCheck","$b8ea597934691048$var$inflateResetKeep","Int32Array","$b8ea597934691048$var$inflateReset","$b8ea597934691048$var$inflateReset2","$b8ea597934691048$var$inflateInit2","$b8ea597934691048$var$virgin","$b8ea597934691048$var$fixedtables","$b8ea597934691048$var$updatewindow","$b8ea597934691048$var$inflate_1$2","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInit2","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflateInfo","$b8ea597934691048$var$gzheader","$b8ea597934691048$var$toString","$b8ea597934691048$var$Z_NO_FLUSH","$b8ea597934691048$var$Z_FINISH","$b8ea597934691048$var$Z_OK","$b8ea597934691048$var$Z_STREAM_END","$b8ea597934691048$var$Z_NEED_DICT","$b8ea597934691048$var$Z_STREAM_ERROR","$b8ea597934691048$var$Z_DATA_ERROR","$b8ea597934691048$var$Z_MEM_ERROR","$b8ea597934691048$var$Inflate$1","$b8ea597934691048$var$inflate$1","inflator","last_avail_out","next_out_utf8","utf8str","Deflate","$b8ea597934691048$var$Deflate","$b8ea597934691048$var$deflate","deflateRaw","$b8ea597934691048$var$deflateRaw","$b8ea597934691048$var$gzip","constants","Inflate","$b8ea597934691048$var$Inflate","$b8ea597934691048$var$inflate","inflateRaw","$b8ea597934691048$var$inflateRaw","ungzip","$b8ea597934691048$var$ungzip","$b8ea597934691048$export$2e2bcd8739ae039","$c7b2729851fa20d7$exports","factory","limit$2","classToType","type$p","PI$2","utils","clip_rgb","_clipped","_unclipped","limit$1","unpack","keyOrder","type$o","type$n","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","input$h","format","autodetect","last$3","clip_rgb$2","type$m","Color$D","_input","chk","me","_rgb","chroma$k","unpack$A","max$2","unpack$z","unpack$y","type$l","rgb2cmyk","Color$C","cmyk","chroma$j","input$g","unpack$x","last$2","rnd","unpack$w","rgb2hsl_1","Number","unpack$v","last$1","hsl2css","hsla","round$6","unpack$u","round$5","hsl2rgb_1","h_","RE_RGB","RE_RGBA","RE_RGB_PCT","RE_RGBA_PCT","RE_HSL","RE_HSLA","round$4","css2rgb$1","css","input$f","named","rgb$1","rgb$2","i$2","rgb$3","i$3","rgb$4","hsl2rgb","hsl$1","rgb$5","type$k","rgb2css","rgba","rgb2hsl$2","Color$B","chroma$i","input$e","css2rgb","unpack$t","input$d","gl","chroma$h","Color$A","unpack$s","unpack$r","floor$3","unpack$q","type$j","rgb2hcg","Color$z","hcg","chroma$g","input$c","assign$1","assign$2","assign$3","assign$4","assign$5","_g","unpack$p","round$3","rgb2hex_1","hxa","RE_HEX","RE_HEXA","hex2rgb_1","u$1","type$i","Color$y","rgb2hex$1","chroma$f","input$b","unpack$o","TWOPI$2","min$2","sqrt$4","unpack$n","TWOPI$1","cos$4","unpack$m","type$h","rgb2hsi","min_","Color$x","hsi","chroma$e","input$a","unpack$l","type$g","Color$w","rgb2hsl$1","chroma$d","input$9","unpack$k","min$1","max$1","unpack$j","floor$2","unpack$i","type$f","rgb2hsv","max_","Color$v","hsv","chroma$c","input$8","labConstants","Kn","Xn","Yn","Zn","unpack$h","pow$a","rgb_xyz","xyz_lab","LAB_CONSTANTS$3","rgb2lab_1","ref$1","unpack$g","pow$9","xyz_rgb","lab_xyz","LAB_CONSTANTS$2","lab2rgb_1","unpack$f","type$e","Color$u","rgb2lab$1","chroma$b","input$7","unpack$e","sqrt$3","atan2$2","round$2","lab2lch_1","unpack$d","unpack$c","sin$3","cos$3","lch2lab_1","unpack$b","lch2rgb_1","lch2lab$1","lab2rgb","unpack$a","unpack$9","type$d","rgb2lch","rgb2lab","lab2lch$1","Color$t","lch","hcl","chroma$a","input$6","lch2rgb","w3cx11_1","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflower","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","laserlemon","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrod","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","maroon2","maroon3","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","purple2","purple3","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","type$c","Color$s","rgb2hex","w3cx11","input$5","hex2rgb","unpack$8","type$b","type$a","rgb2num","Color$r","chroma$9","input$4","unpack$7","type$9","round$1","Color$q","chroma$8","input$3","log$1","temperature2rgb_1","kelvin","unpack$6","rgb2temperature","minTemp","maxTemp","temperature2rgb","Color$p","temperature","chroma$7","input$2","unpack$5","cbrt","pow$8","sign$1","rgb2oklab_1","rgb2lrgb","lr","lg","lb","unpack$4","pow$7","oklab2rgb_1","L","lrgb2rgb","unpack$3","type$8","Color$o","oklab","rgb2oklab$1","chroma$6","input$1","unpack$2","unpack$1","type$7","rgb2oklch","rgb2oklab","lab2lch","Color$n","oklch","chroma$5","lch2lab","oklab2rgb","type$6","Color$m","mutate","Color$l","Color$k","LAB_CONSTANTS$1","brighten","darker","brighter","Color$j","mc","channel","type$5","pow$6","Color$i","luminance","lum","cur_lum","max_iter","high","lm","rgb2luminance","luminance_x","interpolator$1","type$4","mix$1","col1","col2","interpolator","Color$g","mix","Color$f","premultiply","Color$e","saturate","LAB_CONSTANTS","desaturate","type$3","Color$d","xyz0","xyz1","sqrt$2","pow$5","lrgb","z1","z2","_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","lbv","dh","interpolate_hsx$5","interpolate_hsx$4","interpolate_hsx$3","interpolate_hsx$2","interpolate_hsx$1","interpolate_hsx","clip_rgb$1","pow$4","sqrt$1","PI$1","cos$2","sin$2","atan2$1","_average_lrgb","colors","xyz","type$2","pow$3","scale$2","_mode","_nacol","chroma$4","_spread","_domain","_pos","_padding","_classes","_colors","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","c$1","resetCache","getClass","tMapLightness","tMapDomain","bypassMap","classes","analyze","limits","domain","tOut","tBreaks","every","_m","_o","spread","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","numColors","dm","dd","__range__","inclusive","ascending","samples","asc","gamma","nodata","binom_row","row","newrow","bezier","I","lab0","lab1","lab2","lab3","labs","RangeError","blend","blend_f","chroma$3","dodge","burn","type$1","pow$2","sin$1","cos$1","floor$1","pow$1","abs$1","MAX_VALUE","min_log","LOG10E","max_log","pb","pr","cluster","assignments","clusterSizes","repeat","nb_iters","centroids","i$4","mindist","best","j$1","newCentroids","j$2","i$5","j$3","j$4","kClusters","j$5","i$6","tmpKMeansBreaks","j$6","i$7","analyze_1","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","chroma","cnt","ci","xyz2","A$1","scale$1","cubehelix","rotations","lightness","dl","fract","amp","cos_a","sin_a","chroma$2","digits","contrast","deltaE","Kl","Kc","Kh","rad2deg","deg2rad","deg","L2","avgL","avgC","C1","G","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","T","deltaHp","deltaCp","sl","sh","deltaTheta","Rt","deltaL","sum_sq","scales","cool","chroma$1","hot","$hFpCu","$c5a0b96abcd6dbcd$var$location","$c5a0b96abcd6dbcd$export$281ad3752a540efe","URLSearchParams","$c5a0b96abcd6dbcd$export$128fa18b7194ef","URL","$c5a0b96abcd6dbcd$export$1bb10639a2cd4297","$c5a0b96abcd6dbcd$export$9cb4719e2e525b7a","$c5a0b96abcd6dbcd$export$afb15ede80c42aab","binString","atob","codePointAt","$c5a0b96abcd6dbcd$export$4e633de97d65d1c8","fromCodePoint","$c5a0b96abcd6dbcd$export$9a00dee1beb8f576","$c5a0b96abcd6dbcd$export$6e5538615c060df7","findLast","xv","yv","$c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1","detail","dispatchEvent","CustomEvent","$c5a0b96abcd6dbcd$export$c23f9d3341b5fd07","pointA","pointB","maxDiff","$c5a0b96abcd6dbcd$export$3cb91a81090b9eee","span","classList","backgroundColor","title","$c5a0b96abcd6dbcd$export$6d3741128bd5bb7d","some","maxColorIndex","plus","$c5a0b96abcd6dbcd$export$79376507b09a66f","$c5a0b96abcd6dbcd$export$f6292fcace2a1886","$c5a0b96abcd6dbcd$export$78da85ac75754159","$c5a0b96abcd6dbcd$export$bd58da2e19cd17da","direction","$c5a0b96abcd6dbcd$export$c43d7a950587702b","$c5a0b96abcd6dbcd$export$35d6177dfa7903b5","toPaperJs","$c5a0b96abcd6dbcd$export$43941667eccc070","$c5a0b96abcd6dbcd$export$8793edee2d425525","base64decode","base64encode","$77e640c1aaab669f$var$console","$77e640c1aaab669f$var$consoleDebug","$77e640c1aaab669f$export$1c9f709888824e05","has","$1024ef6a63be0e18$export$2e382909194b1aab","toAxialCoordinates","$3f2d62ea7d5da3d6$export$c56d3ccff2456440","isNeighbor","neighbor","directions","toOffsetCoordinates","axial","$92f12ea2067f7a87$export$654f18991713c8c4","setState","getState","structuredClone","updateState","updater","Events","Update","freeze","$7f0d958f0726b89e$export$6d08773d2e66f8f2","uniqueId","sortOrder","configuration","otherItem","getColorElements","getCompoundPath","collidable","onTap","onCollision","collisionStep","onDeselected","onInitialization","onSelected","Types","fromEntries","$7cd91973a7925acd$export$b20b719ec758a20f","$40d8a77a984c51a9$export$94affb487e701bf2","hasKeys","includes","unset","$b8e3951689bc8f9e$export$b0d759d807f751d4","CacheKeys","eventListener","onPointerUp","onPointerDown","onPointerMove","onMouseWheel","offsetX","offsetY","deltaY","onPan","pan","getGesture","GestureKeys","Pan","setGesture","onPinch","pointer0","pointer1","point0","pinch","Pinch","Down","pointerId","Move","Gesture","Tap","maxZoom","minZoom","touchPoint","touchOffset","zoomOffset","vibratePattern","$1f24870028eeabcc$var$modifiersImmutable","$1f24870028eeabcc$var$modifiersMutable","$1f24870028eeabcc$var$navigator","$1f24870028eeabcc$var$uniqueId","$1f24870028eeabcc$export$5acd5e6efc9671b7","selectionTime","timeoutId","immutable","tile","li","deselect","modifier","addModifier","moveFilter","afterModify","Deselected","button","onToggle","lock","clearTimeout","vibrate","$15dbe6491c90ff2e$export$a9753b1ffc289935","Mask","onMask","beforeModify","maskOnTap","tileFilter","removeModifier","toggle","puzzle","fromTile","updateSelectedTile","unmask","Moved","selectedModifier","querySelector","Invoked","$f00c5e8e3b24f55c$export$e49a5ad3dd6df925","movable","onUnmask","moveItems","moved","tiles","beam","toTile","$f00c5e8e3b24f55c$export$1288a4f7eae890b0","SuperClass","removeItem","addItem","onMove","$268becbe2ffcc8a3$export$fd55ce593607084a","connected","onAdd","onRemove","pathIndex","segmentIndex","$268becbe2ffcc8a3$export$81262d6ca0162a3","Class","find","Reflect","construct","Collision","collision","Filter","MergeInto","mergeInto","MergeWith","mergeWith","Portal","portal","entryPortal","exitPortal","Reflector","reflector","TerminusConnection","terminusConnection","terminus","opening","$903d7b3eecd4d3a8$export$ec91da630f36d5ea","parameters","circumradius","currentStep","nextStep","$f48c890393349af7$export$152db69a76b6b79e","Names","rotatable","$f48c890393349af7$export$781de49a9284d537","rotationDegrees","getMaxRotation","getDirection","rotateGroup","$d430de8cd820c3cd$export$602eac185826482c","ring","pointer","portalState","stepIndex","entryDirection","existing","stateId","destinationId","moves","destinations","getExitDirection","getStep","destinationTiles","addStep","destinationTile","$6756284c9622095f$export$bea8ebba691c5813","toggled","toggleable","$6756284c9622095f$export$cdb1ce8c4b8a5afe","$ff7d3b28e31d2a30$export$88c9f72b40fcdd85","itemIds","withSelf","mirror","$ff7d3b28e31d2a30$export$20aab196240bbdf2","beams","getColors","$eb2b229f23b512af$export$693b33588b3dd9d8","steps","lastStepIndex","getLastStepIndex","currentPath","previousStep","getItemIndex","getCollision","getOpening","getSteps","getMergeWith","openings","isComplete","isOn","isConnected","isPending","onBeamUpdated","beamLastStep","lastStep","isSelf","findLastIndex","stepPoint","nextStepPoint","isSameSide","isSameDirection","getBeamsUpdateDelay","updateHistory","onModifierInvoked","findIndex","startDirection","currentStepIndex","inradius","getTile","updateStep","nextStepIndex","existingNextStep","lastPathIndex","lastSegmentIndex","getCollisions","collisionIndex","timeout","updatedStep","getUpdatedStep","firstPoint","curveLocation","Set","intersection","drawDebugPoint","spliceIndex","deletedSteps","Connection","Merge","$d8b66316ed43c40f$export$3ad31a823e05e6fb","ui","flatMap","Opening","directionFrom","onConnection","onDisconnection","connect","disconnect","Disconnection","openingOffOpacity","$b41b1d7e9f79d24a$export$edf083caefbff926","midLine","directionTo","beamDirection","reflectorDirection","beamAngle","$c5a0b96abcd6dbcd$export$1a23559e655dacdd","original","reflectorAngle","$3d5ce7d56315a48f$export$cb4338d67ffa8a1d","walls","firstSegment","hexagon","nextDirection","lastSegment","$d12f93ae41726cf2$export$4b0ab9e4fad38dea","$54e671c4824aed95$export$5b9db7ce80343746","$7993f13e9449b6b9$export$bdb5f0a1b77546f4","toItems","fromItems","$e980209ca439f282$export$235cb65c20ad2b7","layout","indicator","wall","swap","selectedTile","deselectedTile","teardown","startingOffsetX","startingOffsetY","dashWidth","Styles","edit","Selected","$99408c3658777a44$export$c84671f46d6a1ca","tilesByAxial","tilesByOffset","layers","tileSize","oddR","widestRow","isOffsetRow","rowByAxial","rowByOffset","rowOffset","getTileByAxial","getTileByOffset","getNeighboringTile","evenR","$01f46eb6f3519d51$export$991dcf7284de63d","$d156ca7729efc9b3$export$88c9f72b40fcdd85","$b090bea9f5eab78e$var$configuration","entries","solution","test_infinite_loop","test_layout","$cd73c3f23e791522$var$layout","test_portal","test_reflector","$b090bea9f5eab78e$var$traverse","$b090bea9f5eab78e$var$PuzzleGroup","firstId","lastId","nextId","previousId","$b090bea9f5eab78e$export$f68871ba002ca835","startsWith","titles","$4c3397e7d04ad378$var$history","history","$4c3397e7d04ad378$var$localStorage","localStorage","$4c3397e7d04ad378$export$7254cc27399e90bd","deltasIndex","updateCache","canRedo","canUndo","getCurrent","getTitle","getSelectedTile","redo","clearCache","setSelectedTile","undo","previousIndex","newState","pushState","fromEncoded","fromId","ParamKeys","pathSegments","localState","cachedVersion","originalVersion","$784ae6de7637c8a9$export$a337a674d761bdc2","conditions","condition","conditionFactory","replaceChildren","isSolved","isMet","$784ae6de7637c8a9$var$SolutionCondition","connections","$784ae6de7637c8a9$var$Connections","$784ae6de7637c8a9$var$Moves","completed","eventListeners","connectionId","connectionIndex","connection","Operators","equalTo","Updated","greaterThan","lessThan","$15dbe6491c90ff2e$var$elements","main","puzzleId","solved","beamsUpdateDelay","interact","isUpdatingBeams","maskQueue","termini","onBeamUpdate","onSelect","onKeyup","delay","onStateUpdate","updateDropdown","select","centerOnTile","clearDebugPoints","reload","updateMessage","updateBeams","previouslySelectedTile","updateActions","addLayers","collisionId","addBeam","otherBeam","cause","onSolved","solvedMask","Solved","removeLayers","viewSize","Loaded","selectedTileId","className","disable","innerText","colorElements","rounded","connectedBeams","$796068c1abf8becc$var$script","$796068c1abf8becc$var$dataLayer","dataLayer","$796068c1abf8becc$var$gtag","$43a0370408551d62$var$doorbellOptions","doorbellOptions","appKey","hideButton","$43a0370408551d62$var$script","$b7ac0cf7b7632c81$var$puzzle","$b7ac0cf7b7632c81$var$beaming","beaming"],"version":3,"file":"index.ae5e88e1.js.map"} \ No newline at end of file diff --git a/index.bb48da16.js.map b/index.bb48da16.js.map deleted file mode 100644 index f85b2d6..0000000 --- a/index.bb48da16.js.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":"C,A,euBkLI,EACA,EACA,EAkyJA,EAAQ,E,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,S,E,C,E,O,G,E,U,C,E,O,C,C,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,C,E,Q,S,C,C,C,EtBt9JZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,EAEW,AAAA,CAAA,SAAS,CAAI,CAAE,CAAS,EAGpC,IAAI,EAAS,AADb,CAAA,EAAO,GAAP,EAAA,QAAA,EACkB,MAAM,CACvB,EAAW,EAAK,QAAQ,CAErB,EAAO,IAAI,WACd,IAAI,EAAS,wCACZ,EAAQ,EAAE,CACV,EAAQ,EAAM,KAAK,CACnB,EAAS,OAAO,MAAM,CACtB,EAAW,OAAO,wBAAwB,CAC1C,EAAS,OAAO,cAAc,CAE9B,EAAU,EAAM,OAAO,EAAI,SAAS,CAAI,CAAE,CAAI,EAC7C,IAAK,IAAI,EAAI,EAAG,EAAI,IAAI,CAAC,MAAM,CAAE,EAAI,EAAG,IACvC,EAAK,IAAI,CAAC,EAAM,IAAI,CAAC,EAAE,CAAE,EAAG,IAAI,CAElC,EAEA,EAAQ,SAAS,CAAI,CAAE,CAAI,EAC1B,IAAK,IAAI,KAAK,IAAI,CACb,IAAI,CAAC,cAAc,CAAC,IACvB,EAAK,IAAI,CAAC,EAAM,IAAI,CAAC,EAAE,CAAE,EAAG,IAAI,CAEnC,EAEA,EAAM,OAAO,MAAM,EAAI,SAAS,CAAG,EAClC,IAAK,IAAI,EAAI,EAAG,EAAI,UAAU,MAAM,CAAE,EAAI,EAAG,IAAK,CACjD,IAAI,EAAM,SAAS,CAAC,EAAE,CACtB,IAAK,IAAI,KAAO,EACX,EAAI,cAAc,CAAC,IACtB,CAAA,CAAG,CAAC,EAAI,CAAG,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,CAAE,EAAO,EAAO,OAAO,EAEhD,EAAO,YAAY,CAAC,oBAAqB,QAClC,CACR,CACD,CAEA,SAAS,IACR,EAAK,IAAI,CAAC,GAAY,EAAS,oBAAoB,CAAC,UAClD,EACH,QApYA,EAAM,MAAM,CAAC,GACb,EAAK,MAAM,CAAC,GACZ,EAAM,MAAM,CAAC,GAwYT,IACC,AAAwB,aAAxB,EAAS,UAAU,CACtB,WAAW,GAEX,EAAS,GAAG,CAAC,EAAQ,CAAE,KAAM,CAAQ,IAIhC,CACN,QAAS,EACT,QAAS,EACT,KAfD,SAAc,CAAM,EACnB,OAAO,EAAS,EAAW,GAAU,GACtC,EAcC,MAAO,EACP,gBAAiB,EACjB,eAAgB,CACjB,CAED,CAAA,EAAE,IAAI,CAAC,IAAI,EAEX,IAAI,GAAQ,GAAK,CAAA,EAAW,MAAM,CAAC,EAAK,OAAO,CAAE,CAChD,KAAM,EACN,UAAW,EACX,IAAK,EACL,SAAU,EACV,WAAY,EACZ,SAAU,EACV,OAAQ,EACR,OAAQ,EACR,aAAc,CACf,EAAA,EAYA,OAVI,GAAM,KAAK,CAAC,IAAI,EACnB,AAAA,EAAA,SAA4B,IAGzB,AAAkB,YAAlB,OAAO,QAAyB,OAAO,GAAG,CAC7C,OAAO,QAAS,IACwB,GACxC,CAAA,EAAO,OAAO,CAAG,EADX,EAIA,EACP,CAAA,EAAE,IAAI,CAAC,IAAI,CAAE,AAAgB,UAAhB,OAAO,KAAoB,KAAO,K,G,E,Q,S,C,C,C,E,G,E,Q,S,C,C,C,E,E,E,O,C,oB,W,O,C,G,E,E,O,C,mB,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,e,W,O,C,G,E,E,O,C,W,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,a,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,qB,W,O,C,G,E,E,O,C,W,W,O,C,G,E,E,O,C,iB,W,O,C,G,E,E,O,C,c,W,O,C,G,E,E,O,C,iB,W,O,C,G,E,E,O,C,S,W,O,C,G,E,E,O,C,a,W,O,E,G,E,E,O,C,c,W,O,E,G,E,E,O,C,O,W,O,E,G,E,E,O,C,Q,W,O,E,G,E,E,O,C,U,W,O,E,G,E,E,O,C,Q,W,O,E,G,E,E,O,C,oB,W,O,E,G,E,E,O,C,Y,W,O,E,GE9jiB/C,IAAI,EAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,MAAO,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,MAAO,EAAG,KAAM,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,KAAM,EAAG,OAAQ,IAAI,CAGxhC,EAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,GAAI,GAAI,KAAM,GAAI,EAAG,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG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EACf,CAAE,KAAM,MAAO,EACf,CAAE,UAAW,CAAA,EAAO,KAAM,QAAS,EACpC,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EAChB,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,ELnDE,MM1Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,SAAU,CACR,KACA,KACA,KACA,CAAE,MAAO,MAAO,KAAM,MAAO,EAC7B,KACA,CAAE,MAAO,OAAQ,GAAI,CAAA,EAAM,KAAM,MAAO,EACzC,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,CACR,CAAE,MAAO,OAAQ,KAAM,MAAO,EAC9B,KACA,CAAE,MAAO,MAAO,GAAI,CAAA,EAAM,KAAM,MAAO,EACvC,KACA,KACA,KACD,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,EN7EE,MO3Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CA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AChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,KACA,CACE,MAAO,CACL,CACE,MAAO,QACP,SAAU,CAAC,KAAM,KAAM,KAAM,CAAE,KAAM,MAAO,EAAG,KAAM,KAAK,CAC1D,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,WAAY,EACrB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,KACA,KACA,CACE,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EAChB,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,ET9DE,MU9Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EACf,KACA,KACA,CACE,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EAChB,CACD,CACE,CACE,MAAO,CACL,CACE,MAAO,QACP,SAAU,CAAC,KAAM,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAG,KAAM,KAAM,KAAM,KAAK,CACpE,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CAAE,KAAM,MAAO,EACf,KACA,CACE,MAAO,CACL,CACE,MAAO,QACP,SAAU,CAAC,KAAM,KAAM,KAAM,CAAE,KAAM,MAAO,EAAG,KAAM,KAAK,CAC1D,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,QAAS,EAClB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CAAE,KAAM,WAAY,EACrB,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,KACA,KACA,CAAE,KAAM,MAAO,EACf,CAAE,KAAM,MAAO,EAChB,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,AACH,EV3DE,MW/Ba,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,MAAO,CACL,CACE,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,SAAU,CACR,KACA,KACA,CAAE,MAAO,OAAQ,GAAI,CAAA,EAAM,KAAM,MAAO,EACxC,KACA,KACA,KACD,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,QAAS,EAClB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,CACR,KACA,KACA,KACA,KACA,KACA,CAAE,MAAO,OAAQ,KAAM,MAAO,EAC/B,CACD,KAAM,UACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,WAAY,EACrB,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,UAAW,EACX,KAAM,QACR,EACD,CACD,UAAW,CACT,CAAE,KAAM,MAAO,EAChB,CACD,KAAM,MACR,EACD,CACF,CACD,KAAM,QACR,EACA,SAAU,CACR,CAAE,OAAQ,EAAG,KAAM,aAAc,EAClC,CACD,QAAS,CACX,EXjFE,mBehCa,CACb,OAAQ,CACN,MAAO,CACL,CACE,CACE,MAAO,CACL,CACE,MAAO,MACP,SAAU,CAAC,KAAM,KAAM,KAAM,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAG,KAAM,KAAK,CACpE,KAAM,UACR,EACD,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,MAAO,MACP,SAAU,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAE,CACpE,KAAM,UACR,EACD,CACD,KAAM,MACR,EACD,CACD,CACE,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACA,CACE,KAAM,MACR,EACD,CACD,CACE,KACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,SAAU,EACV,KAAM,WACR,EACD,CACD,KAAM,MACR,EACA,CACE,MAAO,CACL,CACE,MAAO,OACP,SAAU,CAAC,CAAE,GAAI,CAAA,EAAM,KAAM,MAAO,EAAG,KAAM,KAAM,KAAM,KAAM,KAAK,CACpE,KAAM,UACR,EACD,CACD,KAAM,MACR,EACD,CACF,AACH,EACA,SAAU,CACR,CAAE,OAAQ,IAAK,KAAM,aAAc,EACpC,AACH,EfnDE,YYzBa,CACb,OAAQ,CACN,MAAO,AAVI,CACb,CAAC,IAAK,IAAK,IAAK,IAAI,CACpB,CAAC,IAAK,IAAK,IAAK,IAAI,CACpB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAI,CACzB,CAAC,IAAK,IAAK,IAAK,IAAI,CACpB,CAAC,IAAK,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","sources":["","node_modules/paper/dist/paper-full.js","node_modules/@parcel/node-resolver-core/lib/_empty.js","node_modules/acorn/dist/acorn.mjs","src/index.js","src/info.js","src/components/debug.js","src/components/util.js","node_modules/jsondiffpatch/lib/index.js","node_modules/jsondiffpatch/lib/diffpatcher.js","node_modules/jsondiffpatch/lib/processor.js","node_modules/jsondiffpatch/lib/pipe.js","node_modules/jsondiffpatch/lib/contexts/diff.js","node_modules/jsondiffpatch/lib/contexts/context.js","node_modules/jsondiffpatch/lib/clone.js","node_modules/jsondiffpatch/lib/contexts/patch.js","node_modules/jsondiffpatch/lib/contexts/reverse.js","node_modules/jsondiffpatch/lib/filters/trivial.js","node_modules/jsondiffpatch/lib/filters/nested.js","node_modules/jsondiffpatch/lib/filters/arrays.js","node_modules/jsondiffpatch/lib/filters/lcs.js","node_modules/jsondiffpatch/lib/filters/dates.js","node_modules/jsondiffpatch/lib/filters/texts.js","node_modules/pako/dist/pako.esm.mjs","node_modules/chroma-js/chroma.js","src/components/puzzle.js","src/components/layout.js","src/components/coordinates/cube.js","src/components/coordinates/offset.js","src/components/items/tile.js","src/components/item.js","src/components/stateful.js","src/components/itemFactory.js","src/components/items/filter.js","src/components/modifiers/move.js","src/components/modifier.js","src/components/eventListeners.js","src/components/interact.js","src/components/cache.js","src/components/step.js","src/components/items/portal.js","src/components/modifiers/rotate.js","src/components/items/terminus.js","src/components/modifiers/toggle.js","src/components/items/beam.js","src/components/collision.js","src/components/items/reflector.js","src/components/items/wall.js","src/components/modifierFactory.js","src/components/modifiers/immutable.js","src/components/modifiers/lock.js","src/components/modifiers/swap.js","src/components/items/mask.js","src/components/items/collision.js","src/components/state.js","src/puzzles/index.js","src/puzzles/001.js","src/puzzles/002.js","src/puzzles/003.js","src/puzzles/004.js","src/puzzles/005.js","src/puzzles/006.js","src/puzzles/007.js","src/puzzles/008.js","src/puzzles/009.js","src/puzzles/010.js","src/puzzles/011.js","src/puzzles/testLayout.js","src/puzzles/testPortal.js","src/puzzles/testReflector.js","src/puzzles/testInfiniteLoop.js","src/components/solution.js","src/analytics.js","src/feedback.js"],"sourcesContent":["(function () {\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequiref3c5\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequiref3c5\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"hvNIE\", function(module, exports) {\n/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */ \n\n\nvar paper = (function(self1, undefined) {\n self1 = self1 || (parcelRequire(\"1S6xU\"));\n var window = self1.window, document = self1.document;\n var Base = new function() {\n var hidden = /^(statics|enumerable|beans|preserve)$/, array = [], slice = array.slice, create = Object.create, describe = Object.getOwnPropertyDescriptor, define1 = Object.defineProperty, forEach = array.forEach || function(iter, bind) {\n for(var i = 0, l = this.length; i < l; i++)iter.call(bind, this[i], i, this);\n }, forIn = function(iter, bind) {\n for(var i in this)if (this.hasOwnProperty(i)) iter.call(bind, this[i], i, this);\n }, set = Object.assign || function(dst) {\n for(var i = 1, l = arguments.length; i < l; i++){\n var src = arguments[i];\n for(var key in src)if (src.hasOwnProperty(key)) dst[key] = src[key];\n }\n return dst;\n }, each = function(obj, iter, bind) {\n if (obj) {\n var desc = describe(obj, \"length\");\n (desc && typeof desc.value === \"number\" ? forEach : forIn).call(obj, iter, bind = bind || obj);\n }\n return bind;\n };\n function inject(dest, src, enumerable, beans, preserve) {\n var beansNames = {};\n function field(name, val) {\n val = val || (val = describe(src, name)) && (val.get ? val : val.value);\n if (typeof val === \"string\" && val[0] === \"#\") val = dest[val.substring(1)] || val;\n var isFunc = typeof val === \"function\", res = val, prev = preserve || isFunc && !val.base ? val && val.get ? name in dest : dest[name] : null, bean;\n if (!preserve || !prev) {\n if (isFunc && prev) val.base = prev;\n if (isFunc && beans !== false && (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/))) beansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n if (!res || isFunc || !res.get || typeof res.get !== \"function\" || !Base.isPlainObject(res)) res = {\n value: res,\n writable: true\n };\n if ((describe(dest, name) || {\n configurable: true\n }).configurable) {\n res.configurable = true;\n res.enumerable = enumerable != null ? enumerable : !bean;\n }\n define1(dest, name, res);\n }\n }\n if (src) {\n for(var name in src)if (src.hasOwnProperty(name) && !hidden.test(name)) field(name);\n for(var name in beansNames){\n var part = beansNames[name], set = dest[\"set\" + part], get = dest[\"get\" + part] || set && dest[\"is\" + part];\n if (get && (beans === true || get.length === 0)) field(name, {\n get: get,\n set: set\n });\n }\n }\n return dest;\n }\n function Base() {\n for(var i = 0, l = arguments.length; i < l; i++){\n var src = arguments[i];\n if (src) set(this, src);\n }\n return this;\n }\n return inject(Base, {\n inject: function(src) {\n if (src) {\n var statics = src.statics === true ? src : src.statics, beans = src.beans, preserve = src.preserve;\n if (statics !== src) inject(this.prototype, src, src.enumerable, beans, preserve);\n inject(this, statics, null, beans, preserve);\n }\n for(var i = 1, l = arguments.length; i < l; i++)this.inject(arguments[i]);\n return this;\n },\n extend: function() {\n var base = this, ctor, proto;\n for(var i = 0, obj, l = arguments.length; i < l && !(ctor && proto); i++){\n obj = arguments[i];\n ctor = ctor || obj.initialize;\n proto = proto || obj.prototype;\n }\n ctor = ctor || function() {\n base.apply(this, arguments);\n };\n proto = ctor.prototype = proto || create(this.prototype);\n define1(proto, \"constructor\", {\n value: ctor,\n writable: true,\n configurable: true\n });\n inject(ctor, this);\n if (arguments.length) this.inject.apply(ctor, arguments);\n ctor.base = base;\n return ctor;\n }\n }).inject({\n enumerable: false,\n initialize: Base,\n set: Base,\n inject: function() {\n for(var i = 0, l = arguments.length; i < l; i++){\n var src = arguments[i];\n if (src) inject(this, src, src.enumerable, src.beans, src.preserve);\n }\n return this;\n },\n extend: function() {\n var res = create(this);\n return res.inject.apply(res, arguments);\n },\n each: function(iter, bind) {\n return each(this, iter, bind);\n },\n clone: function() {\n return new this.constructor(this);\n },\n statics: {\n set: set,\n each: each,\n create: create,\n define: define1,\n describe: describe,\n clone: function(obj) {\n return set(new obj.constructor(), obj);\n },\n isPlainObject: function(obj) {\n var ctor = obj != null && obj.constructor;\n return ctor && (ctor === Object || ctor === Base || ctor.name === \"Object\");\n },\n pick: function(a, b) {\n return a !== undefined ? a : b;\n },\n slice: function(list, begin, end) {\n return slice.call(list, begin, end);\n }\n }\n });\n };\n module.exports = Base;\n Base.inject({\n enumerable: false,\n toString: function() {\n return this._id != null ? (this._class || \"Object\") + (this._name ? \" '\" + this._name + \"'\" : \" @\" + this._id) : \"{ \" + Base.each(this, function(value, key) {\n if (!/^_/.test(key)) {\n var type = typeof value;\n this.push(key + \": \" + (type === \"number\" ? Formatter.instance.number(value) : type === \"string\" ? \"'\" + value + \"'\" : value));\n }\n }, []).join(\", \") + \" }\";\n },\n getClassName: function() {\n return this._class || \"\";\n },\n importJSON: function(json) {\n return Base.importJSON(json, this);\n },\n exportJSON: function(options) {\n return Base.exportJSON(this, options);\n },\n toJSON: function() {\n return Base.serialize(this);\n },\n set: function(props, exclude) {\n if (props) Base.filter(this, props, exclude, this._prioritize);\n return this;\n }\n }, {\n beans: false,\n statics: {\n exports: {},\n extend: function extend() {\n var res = extend.base.apply(this, arguments), name = res.prototype._class;\n if (name && !Base.exports[name]) Base.exports[name] = res;\n return res;\n },\n equals: function(obj1, obj2) {\n if (obj1 === obj2) return true;\n if (obj1 && obj1.equals) return obj1.equals(obj2);\n if (obj2 && obj2.equals) return obj2.equals(obj1);\n if (obj1 && obj2 && typeof obj1 === \"object\" && typeof obj2 === \"object\") {\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n var length = obj1.length;\n if (length !== obj2.length) return false;\n while(length--){\n if (!Base.equals(obj1[length], obj2[length])) return false;\n }\n } else {\n var keys = Object.keys(obj1), length = keys.length;\n if (length !== Object.keys(obj2).length) return false;\n while(length--){\n var key = keys[length];\n if (!(obj2.hasOwnProperty(key) && Base.equals(obj1[key], obj2[key]))) return false;\n }\n }\n return true;\n }\n return false;\n },\n read: function(list, start, options, amount) {\n if (this === Base) {\n var value = this.peek(list, start);\n list.__index++;\n return value;\n }\n var proto = this.prototype, readIndex = proto._readIndex, begin = start || readIndex && list.__index || 0, length = list.length, obj = list[begin];\n amount = amount || length - begin;\n if (obj instanceof this || options && options.readNull && obj == null && amount <= 1) {\n if (readIndex) list.__index = begin + 1;\n return obj && options && options.clone ? obj.clone() : obj;\n }\n obj = Base.create(proto);\n if (readIndex) obj.__read = true;\n obj = obj.initialize.apply(obj, begin > 0 || begin + amount < length ? Base.slice(list, begin, begin + amount) : list) || obj;\n if (readIndex) {\n list.__index = begin + obj.__read;\n var filtered = obj.__filtered;\n if (filtered) {\n list.__filtered = filtered;\n obj.__filtered = undefined;\n }\n obj.__read = undefined;\n }\n return obj;\n },\n peek: function(list, start) {\n return list[list.__index = start || list.__index || 0];\n },\n remain: function(list) {\n return list.length - (list.__index || 0);\n },\n readList: function(list, start, options, amount) {\n var res = [], entry, begin = start || 0, end = amount ? begin + amount : list.length;\n for(var i = begin; i < end; i++)res.push(Array.isArray(entry = list[i]) ? this.read(entry, 0, options) : this.read(list, i, options, 1));\n return res;\n },\n readNamed: function(list, name, start, options, amount) {\n var value = this.getNamed(list, name), hasValue = value !== undefined;\n if (hasValue) {\n var filtered = list.__filtered;\n if (!filtered) {\n var source = this.getSource(list);\n filtered = list.__filtered = Base.create(source);\n filtered.__unfiltered = source;\n }\n filtered[name] = undefined;\n }\n return this.read(hasValue ? [\n value\n ] : list, start, options, amount);\n },\n readSupported: function(list, dest) {\n var source = this.getSource(list), that = this, read = false;\n if (source) Object.keys(source).forEach(function(key) {\n if (key in dest) {\n var value = that.readNamed(list, key);\n if (value !== undefined) dest[key] = value;\n read = true;\n }\n });\n return read;\n },\n getSource: function(list) {\n var source = list.__source;\n if (source === undefined) {\n var arg = list.length === 1 && list[0];\n source = list.__source = arg && Base.isPlainObject(arg) ? arg : null;\n }\n return source;\n },\n getNamed: function(list, name) {\n var source = this.getSource(list);\n if (source) return name ? source[name] : list.__filtered || source;\n },\n hasNamed: function(list, name) {\n return !!this.getNamed(list, name);\n },\n filter: function(dest, source, exclude, prioritize) {\n var processed;\n function handleKey(key) {\n if (!(exclude && key in exclude) && !(processed && key in processed)) {\n var value = source[key];\n if (value !== undefined) dest[key] = value;\n }\n }\n if (prioritize) {\n var keys = {};\n for(var i = 0, key, l = prioritize.length; i < l; i++)if ((key = prioritize[i]) in source) {\n handleKey(key);\n keys[key] = true;\n }\n processed = keys;\n }\n Object.keys(source.__unfiltered || source).forEach(handleKey);\n return dest;\n },\n isPlainValue: function(obj, asString) {\n return Base.isPlainObject(obj) || Array.isArray(obj) || asString && typeof obj === \"string\";\n },\n serialize: function(obj, options, compact, dictionary) {\n options = options || {};\n var isRoot = !dictionary, res;\n if (isRoot) {\n options.formatter = new Formatter(options.precision);\n dictionary = {\n length: 0,\n definitions: {},\n references: {},\n add: function(item, create) {\n var id = \"#\" + item._id, ref = this.references[id];\n if (!ref) {\n this.length++;\n var res = create.call(item), name = item._class;\n if (name && res[0] !== name) res.unshift(name);\n this.definitions[id] = res;\n ref = this.references[id] = [\n id\n ];\n }\n return ref;\n }\n };\n }\n if (obj && obj._serialize) {\n res = obj._serialize(options, dictionary);\n var name = obj._class;\n if (name && !obj._compactSerialize && (isRoot || !compact) && res[0] !== name) res.unshift(name);\n } else if (Array.isArray(obj)) {\n res = [];\n for(var i = 0, l = obj.length; i < l; i++)res[i] = Base.serialize(obj[i], options, compact, dictionary);\n } else if (Base.isPlainObject(obj)) {\n res = {};\n var keys = Object.keys(obj);\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i];\n res[key] = Base.serialize(obj[key], options, compact, dictionary);\n }\n } else if (typeof obj === \"number\") res = options.formatter.number(obj, options.precision);\n else res = obj;\n return isRoot && dictionary.length > 0 ? [\n [\n \"dictionary\",\n dictionary.definitions\n ],\n res\n ] : res;\n },\n deserialize: function(json, create, _data, _setDictionary, _isRoot) {\n var res = json, isFirst = !_data, hasDictionary = isFirst && json && json.length && json[0][0] === \"dictionary\";\n _data = _data || {};\n if (Array.isArray(json)) {\n var type = json[0], isDictionary = type === \"dictionary\";\n if (json.length == 1 && /^#/.test(type)) return _data.dictionary[type];\n type = Base.exports[type];\n res = [];\n for(var i = type ? 1 : 0, l = json.length; i < l; i++)res.push(Base.deserialize(json[i], create, _data, isDictionary, hasDictionary));\n if (type) {\n var args = res;\n if (create) res = create(type, args, isFirst || _isRoot);\n else res = new type(args);\n }\n } else if (Base.isPlainObject(json)) {\n res = {};\n if (_setDictionary) _data.dictionary = res;\n for(var key in json)res[key] = Base.deserialize(json[key], create, _data);\n }\n return hasDictionary ? res[1] : res;\n },\n exportJSON: function(obj, options) {\n var json = Base.serialize(obj, options);\n return options && options.asString == false ? json : JSON.stringify(json);\n },\n importJSON: function(json, target) {\n return Base.deserialize(typeof json === \"string\" ? JSON.parse(json) : json, function(ctor, args, isRoot) {\n var useTarget = isRoot && target && target.constructor === ctor, obj = useTarget ? target : Base.create(ctor.prototype);\n if (args.length === 1 && obj instanceof Item && (useTarget || !(obj instanceof Layer))) {\n var arg = args[0];\n if (Base.isPlainObject(arg)) {\n arg.insert = false;\n if (useTarget) args = args.concat([\n Item.INSERT\n ]);\n }\n }\n (useTarget ? obj.set : ctor).apply(obj, args);\n if (useTarget) target = null;\n return obj;\n });\n },\n push: function(list, items) {\n var itemsLength = items.length;\n if (itemsLength < 4096) list.push.apply(list, items);\n else {\n var startLength = list.length;\n list.length += itemsLength;\n for(var i = 0; i < itemsLength; i++)list[startLength + i] = items[i];\n }\n return list;\n },\n splice: function(list, items, index, remove) {\n var amount = items && items.length, append = index === undefined;\n index = append ? list.length : index;\n if (index > list.length) index = list.length;\n for(var i = 0; i < amount; i++)items[i]._index = index + i;\n if (append) {\n Base.push(list, items);\n return [];\n } else {\n var args = [\n index,\n remove\n ];\n if (items) Base.push(args, items);\n var removed = list.splice.apply(list, args);\n for(var i = 0, l = removed.length; i < l; i++)removed[i]._index = undefined;\n for(var i = index + amount, l = list.length; i < l; i++)list[i]._index = i;\n return removed;\n }\n },\n capitalize: function(str) {\n return str.replace(/\\b[a-z]/g, function(match) {\n return match.toUpperCase();\n });\n },\n camelize: function(str) {\n return str.replace(/-(.)/g, function(match, chr) {\n return chr.toUpperCase();\n });\n },\n hyphenate: function(str) {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n }\n }\n });\n var Emitter = {\n on: function(type, func) {\n if (typeof type !== \"string\") Base.each(type, function(value, key) {\n this.on(key, value);\n }, this);\n else {\n var types = this._eventTypes, entry = types && types[type], handlers = this._callbacks = this._callbacks || {};\n handlers = handlers[type] = handlers[type] || [];\n if (handlers.indexOf(func) === -1) {\n handlers.push(func);\n if (entry && entry.install && handlers.length === 1) entry.install.call(this, type);\n }\n }\n return this;\n },\n off: function(type, func) {\n if (typeof type !== \"string\") {\n Base.each(type, function(value, key) {\n this.off(key, value);\n }, this);\n return;\n }\n var types = this._eventTypes, entry = types && types[type], handlers = this._callbacks && this._callbacks[type], index;\n if (handlers) {\n if (!func || (index = handlers.indexOf(func)) !== -1 && handlers.length === 1) {\n if (entry && entry.uninstall) entry.uninstall.call(this, type);\n delete this._callbacks[type];\n } else if (index !== -1) handlers.splice(index, 1);\n }\n return this;\n },\n once: function(type, func) {\n return this.on(type, function handler() {\n func.apply(this, arguments);\n this.off(type, handler);\n });\n },\n emit: function(type, event) {\n var handlers = this._callbacks && this._callbacks[type];\n if (!handlers) return false;\n var args = Base.slice(arguments, 1), setTarget = event && event.target && !event.currentTarget;\n handlers = handlers.slice();\n if (setTarget) event.currentTarget = this;\n for(var i = 0, l = handlers.length; i < l; i++)if (handlers[i].apply(this, args) == false) {\n if (event && event.stop) event.stop();\n break;\n }\n if (setTarget) delete event.currentTarget;\n return true;\n },\n responds: function(type) {\n return !!(this._callbacks && this._callbacks[type]);\n },\n attach: \"#on\",\n detach: \"#off\",\n fire: \"#emit\",\n _installEvents: function(install) {\n var types = this._eventTypes, handlers = this._callbacks, key = install ? \"install\" : \"uninstall\";\n if (types) {\n for(var type in handlers)if (handlers[type].length > 0) {\n var entry = types[type], func = entry && entry[key];\n if (func) func.call(this, type);\n }\n }\n },\n statics: {\n inject: function inject(src) {\n var events = src._events;\n if (events) {\n var types = {};\n Base.each(events, function(entry, key) {\n var isString = typeof entry === \"string\", name = isString ? entry : key, part = Base.capitalize(name), type = name.substring(2).toLowerCase();\n types[type] = isString ? {} : entry;\n name = \"_\" + name;\n src[\"get\" + part] = function() {\n return this[name];\n };\n src[\"set\" + part] = function(func) {\n var prev = this[name];\n if (prev) this.off(type, prev);\n if (func) this.on(type, func);\n this[name] = func;\n };\n });\n src._eventTypes = types;\n }\n return inject.base.apply(this, arguments);\n }\n }\n };\n var PaperScope = Base.extend({\n _class: \"PaperScope\",\n initialize: function PaperScope() {\n paper = this;\n this.settings = new Base({\n applyMatrix: true,\n insertItems: true,\n handleSize: 4,\n hitTolerance: 0\n });\n this.project = null;\n this.projects = [];\n this.tools = [];\n this._id = PaperScope._id++;\n PaperScope._scopes[this._id] = this;\n var proto = PaperScope.prototype;\n if (!this.support) {\n var ctx = CanvasProvider.getContext(1, 1) || {};\n proto.support = {\n nativeDash: \"setLineDash\" in ctx || \"mozDash\" in ctx,\n nativeBlendModes: BlendMode.nativeModes\n };\n CanvasProvider.release(ctx);\n }\n if (!this.agent) {\n var user = self1.navigator.userAgent.toLowerCase(), os = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user) || [])[0], platform = os === \"darwin\" ? \"mac\" : os, agent = proto.agent = proto.browser = {\n platform: platform\n };\n if (platform) agent[platform] = true;\n user.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g, function(match, n, v1, v2, rv) {\n if (!agent.chrome) {\n var v = n === \"opera\" ? v2 : /^(node|trident)$/.test(n) ? rv : v1;\n agent.version = v;\n agent.versionNumber = parseFloat(v);\n n = ({\n trident: \"msie\",\n jsdom: \"node\"\n })[n] || n;\n agent.name = n;\n agent[n] = true;\n }\n });\n if (agent.chrome) delete agent.webkit;\n if (agent.atom) delete agent.chrome;\n }\n },\n version: \"0.12.17\",\n getView: function() {\n var project = this.project;\n return project && project._view;\n },\n getPaper: function() {\n return this;\n },\n execute: function(code, options) {\n var exports = paper.PaperScript.execute(code, this, options);\n View.updateFocus();\n return exports;\n },\n install: function(scope) {\n var that = this;\n Base.each([\n \"project\",\n \"view\",\n \"tool\"\n ], function(key) {\n Base.define(scope, key, {\n configurable: true,\n get: function() {\n return that[key];\n }\n });\n });\n for(var key in this)if (!/^_/.test(key) && this[key]) scope[key] = this[key];\n },\n setup: function(element) {\n paper = this;\n this.project = new Project(element);\n return this;\n },\n createCanvas: function(width, height) {\n return CanvasProvider.getCanvas(width, height);\n },\n activate: function() {\n paper = this;\n },\n clear: function() {\n var projects = this.projects, tools = this.tools;\n for(var i = projects.length - 1; i >= 0; i--)projects[i].remove();\n for(var i = tools.length - 1; i >= 0; i--)tools[i].remove();\n },\n remove: function() {\n this.clear();\n delete PaperScope._scopes[this._id];\n },\n statics: new function() {\n function handleAttribute(name) {\n name += \"Attribute\";\n return function(el, attr) {\n return el[name](attr) || el[name](\"data-paper-\" + attr);\n };\n }\n return {\n _scopes: {},\n _id: 0,\n get: function(id) {\n return this._scopes[id] || null;\n },\n getAttribute: handleAttribute(\"get\"),\n hasAttribute: handleAttribute(\"has\")\n };\n }\n });\n var PaperScopeItem = Base.extend(Emitter, {\n initialize: function(activate) {\n this._scope = paper;\n this._index = this._scope[this._list].push(this) - 1;\n if (activate || !this._scope[this._reference]) this.activate();\n },\n activate: function() {\n if (!this._scope) return false;\n var prev = this._scope[this._reference];\n if (prev && prev !== this) prev.emit(\"deactivate\");\n this._scope[this._reference] = this;\n this.emit(\"activate\", prev);\n return true;\n },\n isActive: function() {\n return this._scope[this._reference] === this;\n },\n remove: function() {\n if (this._index == null) return false;\n Base.splice(this._scope[this._list], null, this._index, 1);\n if (this._scope[this._reference] == this) this._scope[this._reference] = null;\n this._scope = null;\n return true;\n },\n getView: function() {\n return this._scope.getView();\n }\n });\n var CollisionDetection = {\n findItemBoundsCollisions: function(items1, items2, tolerance) {\n function getBounds(items) {\n var bounds = new Array(items.length);\n for(var i = 0; i < items.length; i++){\n var rect = items[i].getBounds();\n bounds[i] = [\n rect.left,\n rect.top,\n rect.right,\n rect.bottom\n ];\n }\n return bounds;\n }\n var bounds1 = getBounds(items1), bounds2 = !items2 || items2 === items1 ? bounds1 : getBounds(items2);\n return this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n },\n findCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n function getBounds(curves) {\n var min = Math.min, max = Math.max, bounds = new Array(curves.length);\n for(var i = 0; i < curves.length; i++){\n var v = curves[i];\n bounds[i] = [\n min(v[0], v[2], v[4], v[6]),\n min(v[1], v[3], v[5], v[7]),\n max(v[0], v[2], v[4], v[6]),\n max(v[1], v[3], v[5], v[7])\n ];\n }\n return bounds;\n }\n var bounds1 = getBounds(curves1), bounds2 = !curves2 || curves2 === curves1 ? bounds1 : getBounds(curves2);\n if (bothAxis) {\n var hor = this.findBoundsCollisions(bounds1, bounds2, tolerance || 0, false, true), ver = this.findBoundsCollisions(bounds1, bounds2, tolerance || 0, true, true), list = [];\n for(var i = 0, l = hor.length; i < l; i++)list[i] = {\n hor: hor[i],\n ver: ver[i]\n };\n return list;\n }\n return this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n },\n findBoundsCollisions: function(boundsA, boundsB, tolerance, sweepVertical, onlySweepAxisCollisions) {\n var self1 = !boundsB || boundsA === boundsB, allBounds = self1 ? boundsA : boundsA.concat(boundsB), lengthA = boundsA.length, lengthAll = allBounds.length;\n function binarySearch(indices, coord, value) {\n var lo = 0, hi = indices.length;\n while(lo < hi){\n var mid = hi + lo >>> 1;\n if (allBounds[indices[mid]][coord] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo - 1;\n }\n var pri0 = sweepVertical ? 1 : 0, pri1 = pri0 + 2, sec0 = sweepVertical ? 0 : 1, sec1 = sec0 + 2;\n var allIndicesByPri0 = new Array(lengthAll);\n for(var i = 0; i < lengthAll; i++)allIndicesByPri0[i] = i;\n allIndicesByPri0.sort(function(i1, i2) {\n return allBounds[i1][pri0] - allBounds[i2][pri0];\n });\n var activeIndicesByPri1 = [], allCollisions = new Array(lengthA);\n for(var i = 0; i < lengthAll; i++){\n var curIndex = allIndicesByPri0[i], curBounds = allBounds[curIndex], origIndex = self1 ? curIndex : curIndex - lengthA, isCurrentA = curIndex < lengthA, isCurrentB = self1 || !isCurrentA, curCollisions = isCurrentA ? [] : null;\n if (activeIndicesByPri1.length) {\n var pruneCount = binarySearch(activeIndicesByPri1, pri1, curBounds[pri0] - tolerance) + 1;\n activeIndicesByPri1.splice(0, pruneCount);\n if (self1 && onlySweepAxisCollisions) {\n curCollisions = curCollisions.concat(activeIndicesByPri1);\n for(var j = 0; j < activeIndicesByPri1.length; j++){\n var activeIndex = activeIndicesByPri1[j];\n allCollisions[activeIndex].push(origIndex);\n }\n } else {\n var curSec1 = curBounds[sec1], curSec0 = curBounds[sec0];\n for(var j = 0; j < activeIndicesByPri1.length; j++){\n var activeIndex = activeIndicesByPri1[j], activeBounds = allBounds[activeIndex], isActiveA = activeIndex < lengthA, isActiveB = self1 || activeIndex >= lengthA;\n if (onlySweepAxisCollisions || (isCurrentA && isActiveB || isCurrentB && isActiveA) && curSec1 >= activeBounds[sec0] - tolerance && curSec0 <= activeBounds[sec1] + tolerance) {\n if (isCurrentA && isActiveB) curCollisions.push(self1 ? activeIndex : activeIndex - lengthA);\n if (isCurrentB && isActiveA) allCollisions[activeIndex].push(origIndex);\n }\n }\n }\n }\n if (isCurrentA) {\n if (boundsA === boundsB) curCollisions.push(curIndex);\n allCollisions[curIndex] = curCollisions;\n }\n if (activeIndicesByPri1.length) {\n var curPri1 = curBounds[pri1], index = binarySearch(activeIndicesByPri1, pri1, curPri1);\n activeIndicesByPri1.splice(index + 1, 0, curIndex);\n } else activeIndicesByPri1.push(curIndex);\n }\n for(var i = 0; i < allCollisions.length; i++){\n var collisions = allCollisions[i];\n if (collisions) collisions.sort(function(i1, i2) {\n return i1 - i2;\n });\n }\n return allCollisions;\n }\n };\n var Formatter = Base.extend({\n initialize: function(precision) {\n this.precision = Base.pick(precision, 5);\n this.multiplier = Math.pow(10, this.precision);\n },\n number: function(val) {\n return this.precision < 16 ? Math.round(val * this.multiplier) / this.multiplier : val;\n },\n pair: function(val1, val2, separator) {\n return this.number(val1) + (separator || \",\") + this.number(val2);\n },\n point: function(val, separator) {\n return this.number(val.x) + (separator || \",\") + this.number(val.y);\n },\n size: function(val, separator) {\n return this.number(val.width) + (separator || \",\") + this.number(val.height);\n },\n rectangle: function(val, separator) {\n return this.point(val, separator) + (separator || \",\") + this.size(val, separator);\n }\n });\n Formatter.instance = new Formatter();\n var Numerical = new function() {\n var abscissas = [\n [\n 0.5773502691896257645091488\n ],\n [\n 0,\n 0.7745966692414833770358531\n ],\n [\n 0.3399810435848562648026658,\n 0.8611363115940525752239465\n ],\n [\n 0,\n 0.5384693101056830910363144,\n 0.9061798459386639927976269\n ],\n [\n 0.2386191860831969086305017,\n 0.6612093864662645136613996,\n 0.9324695142031520278123016\n ],\n [\n 0,\n 0.4058451513773971669066064,\n 0.7415311855993944398638648,\n 0.9491079123427585245261897\n ],\n [\n 0.1834346424956498049394761,\n 0.5255324099163289858177390,\n 0.7966664774136267395915539,\n 0.9602898564975362316835609\n ],\n [\n 0,\n 0.3242534234038089290385380,\n 0.6133714327005903973087020,\n 0.8360311073266357942994298,\n 0.9681602395076260898355762\n ],\n [\n 0.1488743389816312108848260,\n 0.4333953941292471907992659,\n 0.6794095682990244062343274,\n 0.8650633666889845107320967,\n 0.9739065285171717200779640\n ],\n [\n 0,\n 0.2695431559523449723315320,\n 0.5190961292068118159257257,\n 0.7301520055740493240934163,\n 0.8870625997680952990751578,\n 0.9782286581460569928039380\n ],\n [\n 0.1252334085114689154724414,\n 0.3678314989981801937526915,\n 0.5873179542866174472967024,\n 0.7699026741943046870368938,\n 0.9041172563704748566784659,\n 0.9815606342467192506905491\n ],\n [\n 0,\n 0.2304583159551347940655281,\n 0.4484927510364468528779129,\n 0.6423493394403402206439846,\n 0.8015780907333099127942065,\n 0.9175983992229779652065478,\n 0.9841830547185881494728294\n ],\n [\n 0.1080549487073436620662447,\n 0.3191123689278897604356718,\n 0.5152486363581540919652907,\n 0.6872929048116854701480198,\n 0.8272013150697649931897947,\n 0.9284348836635735173363911,\n 0.9862838086968123388415973\n ],\n [\n 0,\n 0.2011940939974345223006283,\n 0.3941513470775633698972074,\n 0.5709721726085388475372267,\n 0.7244177313601700474161861,\n 0.8482065834104272162006483,\n 0.9372733924007059043077589,\n 0.9879925180204854284895657\n ],\n [\n 0.0950125098376374401853193,\n 0.2816035507792589132304605,\n 0.4580167776572273863424194,\n 0.6178762444026437484466718,\n 0.7554044083550030338951012,\n 0.8656312023878317438804679,\n 0.9445750230732325760779884,\n 0.9894009349916499325961542\n ]\n ];\n var weights = [\n [\n 1\n ],\n [\n 0.8888888888888888888888889,\n 0.5555555555555555555555556\n ],\n [\n 0.6521451548625461426269361,\n 0.3478548451374538573730639\n ],\n [\n 0.5688888888888888888888889,\n 0.4786286704993664680412915,\n 0.2369268850561890875142640\n ],\n [\n 0.4679139345726910473898703,\n 0.3607615730481386075698335,\n 0.1713244923791703450402961\n ],\n [\n 0.4179591836734693877551020,\n 0.3818300505051189449503698,\n 0.2797053914892766679014678,\n 0.1294849661688696932706114\n ],\n [\n 0.3626837833783619829651504,\n 0.3137066458778872873379622,\n 0.2223810344533744705443560,\n 0.1012285362903762591525314\n ],\n [\n 0.3302393550012597631645251,\n 0.3123470770400028400686304,\n 0.2606106964029354623187429,\n 0.1806481606948574040584720,\n 0.0812743883615744119718922\n ],\n [\n 0.2955242247147528701738930,\n 0.2692667193099963550912269,\n 0.2190863625159820439955349,\n 0.1494513491505805931457763,\n 0.0666713443086881375935688\n ],\n [\n 0.2729250867779006307144835,\n 0.2628045445102466621806889,\n 0.2331937645919904799185237,\n 0.1862902109277342514260976,\n 0.1255803694649046246346943,\n 0.0556685671161736664827537\n ],\n [\n 0.2491470458134027850005624,\n 0.2334925365383548087608499,\n 0.2031674267230659217490645,\n 0.1600783285433462263346525,\n 0.1069393259953184309602547,\n 0.0471753363865118271946160\n ],\n [\n 0.2325515532308739101945895,\n 0.2262831802628972384120902,\n 0.2078160475368885023125232,\n 0.1781459807619457382800467,\n 0.1388735102197872384636018,\n 0.0921214998377284479144218,\n 0.0404840047653158795200216\n ],\n [\n 0.2152638534631577901958764,\n 0.2051984637212956039659241,\n 0.1855383974779378137417166,\n 0.1572031671581935345696019,\n 0.1215185706879031846894148,\n 0.0801580871597602098056333,\n 0.0351194603317518630318329\n ],\n [\n 0.2025782419255612728806202,\n 0.1984314853271115764561183,\n 0.1861610000155622110268006,\n 0.1662692058169939335532009,\n 0.1395706779261543144478048,\n 0.1071592204671719350118695,\n 0.0703660474881081247092674,\n 0.0307532419961172683546284\n ],\n [\n 0.1894506104550684962853967,\n 0.1826034150449235888667637,\n 0.1691565193950025381893121,\n 0.1495959888165767320815017,\n 0.1246289712555338720524763,\n 0.0951585116824927848099251,\n 0.0622535239386478928628438,\n 0.0271524594117540948517806\n ]\n ];\n var abs = Math.abs, sqrt = Math.sqrt, pow = Math.pow, log2 = Math.log2 || function(x) {\n return Math.log(x) * Math.LOG2E;\n }, EPSILON = 1e-12, MACHINE_EPSILON = 1.12e-16;\n function clamp(value, min, max) {\n return value < min ? min : value > max ? max : value;\n }\n function getDiscriminant(a, b, c) {\n function split(v) {\n var x = v * 134217729, y = v - x, hi = y + x, lo = v - hi;\n return [\n hi,\n lo\n ];\n }\n var D = b * b - a * c, E = b * b + a * c;\n if (abs(D) * 3 < E) {\n var ad = split(a), bd = split(b), cd = split(c), p = b * b, dp = bd[0] * bd[0] - p + 2 * bd[0] * bd[1] + bd[1] * bd[1], q = a * c, dq = ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0] + ad[1] * cd[1];\n D = p - q + (dp - dq);\n }\n return D;\n }\n function getNormalizationFactor() {\n var norm = Math.max.apply(Math, arguments);\n return norm && (norm < 1e-8 || norm > 1e8) ? pow(2, -Math.round(log2(norm))) : 0;\n }\n return {\n EPSILON: EPSILON,\n MACHINE_EPSILON: MACHINE_EPSILON,\n CURVETIME_EPSILON: 1e-8,\n GEOMETRIC_EPSILON: 1e-7,\n TRIGONOMETRIC_EPSILON: 1e-8,\n ANGULAR_EPSILON: 1e-5,\n KAPPA: 4 * (sqrt(2) - 1) / 3,\n isZero: function(val) {\n return val >= -EPSILON && val <= EPSILON;\n },\n isMachineZero: function(val) {\n return val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n },\n clamp: clamp,\n integrate: function(f, a, b, n) {\n var x = abscissas[n - 2], w = weights[n - 2], A = (b - a) * 0.5, B = A + a, i = 0, m = n + 1 >> 1, sum = n & 1 ? w[i++] * f(B) : 0;\n while(i < m){\n var Ax = A * x[i];\n sum += w[i++] * (f(B + Ax) + f(B - Ax));\n }\n return A * sum;\n },\n findRoot: function(f, df, x, a, b, n, tolerance) {\n for(var i = 0; i < n; i++){\n var fx = f(x), dx = fx / df(x), nx = x - dx;\n if (abs(dx) < tolerance) {\n x = nx;\n break;\n }\n if (fx > 0) {\n b = x;\n x = nx <= a ? (a + b) * 0.5 : nx;\n } else {\n a = x;\n x = nx >= b ? (a + b) * 0.5 : nx;\n }\n }\n return clamp(x, a, b);\n },\n solveQuadratic: function(a, b, c, roots, min, max) {\n var x1, x2 = Infinity;\n if (abs(a) < EPSILON) {\n if (abs(b) < EPSILON) return abs(c) < EPSILON ? -1 : 0;\n x1 = -c / b;\n } else {\n b *= -0.5;\n var D = getDiscriminant(a, b, c);\n if (D && abs(D) < MACHINE_EPSILON) {\n var f = getNormalizationFactor(abs(a), abs(b), abs(c));\n if (f) {\n a *= f;\n b *= f;\n c *= f;\n D = getDiscriminant(a, b, c);\n }\n }\n if (D >= -MACHINE_EPSILON) {\n var Q = D < 0 ? 0 : sqrt(D), R = b + (b < 0 ? -Q : Q);\n if (R === 0) {\n x1 = c / a;\n x2 = -x1;\n } else {\n x1 = R / a;\n x2 = c / R;\n }\n }\n }\n var count = 0, boundless = min == null, minB = min - EPSILON, maxB = max + EPSILON;\n if (isFinite(x1) && (boundless || x1 > minB && x1 < maxB)) roots[count++] = boundless ? x1 : clamp(x1, min, max);\n if (x2 !== x1 && isFinite(x2) && (boundless || x2 > minB && x2 < maxB)) roots[count++] = boundless ? x2 : clamp(x2, min, max);\n return count;\n },\n solveCubic: function(a, b, c, d, roots, min, max) {\n var f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)), x, b1, c2, qd, q;\n if (f) {\n a *= f;\n b *= f;\n c *= f;\n d *= f;\n }\n function evaluate(x0) {\n x = x0;\n var tmp = a * x;\n b1 = tmp + b;\n c2 = b1 * x + c;\n qd = (tmp + b1) * x + c2;\n q = c2 * x + d;\n }\n if (abs(a) < EPSILON) {\n a = b;\n b1 = c;\n c2 = d;\n x = Infinity;\n } else if (abs(d) < EPSILON) {\n b1 = b;\n c2 = c;\n x = 0;\n } else {\n evaluate(-(b / a) / 3);\n var t = q / a, r = pow(abs(t), 1 / 3), s = t < 0 ? -1 : 1, td = -qd / a, rd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r, x0 = x - s * rd;\n if (x0 !== x) {\n do {\n evaluate(x0);\n x0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n }while (s * x0 > s * x);\n if (abs(a) * x * x > abs(d / x)) {\n c2 = -d / x;\n b1 = (c2 - c) / x;\n }\n }\n }\n var count = Numerical.solveQuadratic(a, b1, c2, roots, min, max), boundless = min == null;\n if (isFinite(x) && (count === 0 || count > 0 && x !== roots[0] && x !== roots[1]) && (boundless || x > min - EPSILON && x < max + EPSILON)) roots[count++] = boundless ? x : clamp(x, min, max);\n return count;\n }\n };\n };\n var UID = {\n _id: 1,\n _pools: {},\n get: function(name) {\n if (name) {\n var pool = this._pools[name];\n if (!pool) pool = this._pools[name] = {\n _id: 1\n };\n return pool._id++;\n } else return this._id++;\n }\n };\n var Point = Base.extend({\n _class: \"Point\",\n _readIndex: true,\n initialize: function Point(arg0, arg1) {\n var type = typeof arg0, reading = this.__read, read = 0;\n if (type === \"number\") {\n var hasY = typeof arg1 === \"number\";\n this._set(arg0, hasY ? arg1 : arg0);\n if (reading) read = hasY ? 2 : 1;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0);\n if (reading) read = arg0 === null ? 1 : 0;\n } else {\n var obj = type === \"string\" ? arg0.split(/[\\s,]+/) || [] : arg0;\n read = 1;\n if (Array.isArray(obj)) this._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n else if (\"x\" in obj) this._set(obj.x || 0, obj.y || 0);\n else if (\"width\" in obj) this._set(obj.width || 0, obj.height || 0);\n else if (\"angle\" in obj) {\n this._set(obj.length || 0, 0);\n this.setAngle(obj.angle || 0);\n } else {\n this._set(0, 0);\n read = 0;\n }\n }\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n equals: function(point) {\n return this === point || point && (this.x === point.x && this.y === point.y || Array.isArray(point) && this.x === point[0] && this.y === point[1]) || false;\n },\n clone: function() {\n return new Point(this.x, this.y);\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ x: \" + f.number(this.x) + \", y: \" + f.number(this.y) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.x),\n f.number(this.y)\n ];\n },\n getLength: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n setLength: function(length) {\n if (this.isZero()) {\n var angle = this._angle || 0;\n this._set(Math.cos(angle) * length, Math.sin(angle) * length);\n } else {\n var scale = length / this.getLength();\n if (Numerical.isZero(scale)) this.getAngle();\n this._set(this.x * scale, this.y * scale);\n }\n },\n getAngle: function() {\n return this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n },\n setAngle: function(angle) {\n this.setAngleInRadians.call(this, angle * Math.PI / 180);\n },\n getAngleInDegrees: \"#getAngle\",\n setAngleInDegrees: \"#setAngle\",\n getAngleInRadians: function() {\n if (!arguments.length) return this.isZero() ? this._angle || 0 : this._angle = Math.atan2(this.y, this.x);\n else {\n var point = Point.read(arguments), div = this.getLength() * point.getLength();\n if (Numerical.isZero(div)) return NaN;\n else {\n var a = this.dot(point) / div;\n return Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n }\n }\n },\n setAngleInRadians: function(angle) {\n this._angle = angle;\n if (!this.isZero()) {\n var length = this.getLength();\n this._set(Math.cos(angle) * length, Math.sin(angle) * length);\n }\n },\n getQuadrant: function() {\n return this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n }\n }, {\n beans: false,\n getDirectedAngle: function() {\n var point = Point.read(arguments);\n return Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n },\n getDistance: function() {\n var args = arguments, point = Point.read(args), x = point.x - this.x, y = point.y - this.y, d = x * x + y * y, squared = Base.read(args);\n return squared ? d : Math.sqrt(d);\n },\n normalize: function(length) {\n if (length === undefined) length = 1;\n var current = this.getLength(), scale = current !== 0 ? length / current : 0, point = new Point(this.x * scale, this.y * scale);\n if (scale >= 0) point._angle = this._angle;\n return point;\n },\n rotate: function(angle, center) {\n if (angle === 0) return this.clone();\n angle = angle * Math.PI / 180;\n var point = center ? this.subtract(center) : this, sin = Math.sin(angle), cos = Math.cos(angle);\n point = new Point(point.x * cos - point.y * sin, point.x * sin + point.y * cos);\n return center ? point.add(center) : point;\n },\n transform: function(matrix) {\n return matrix ? matrix._transformPoint(this) : this;\n },\n add: function() {\n var point = Point.read(arguments);\n return new Point(this.x + point.x, this.y + point.y);\n },\n subtract: function() {\n var point = Point.read(arguments);\n return new Point(this.x - point.x, this.y - point.y);\n },\n multiply: function() {\n var point = Point.read(arguments);\n return new Point(this.x * point.x, this.y * point.y);\n },\n divide: function() {\n var point = Point.read(arguments);\n return new Point(this.x / point.x, this.y / point.y);\n },\n modulo: function() {\n var point = Point.read(arguments);\n return new Point(this.x % point.x, this.y % point.y);\n },\n negate: function() {\n return new Point(-this.x, -this.y);\n },\n isInside: function() {\n return Rectangle.read(arguments).contains(this);\n },\n isClose: function() {\n var args = arguments, point = Point.read(args), tolerance = Base.read(args);\n return this.getDistance(point) <= tolerance;\n },\n isCollinear: function() {\n var point = Point.read(arguments);\n return Point.isCollinear(this.x, this.y, point.x, point.y);\n },\n isColinear: \"#isCollinear\",\n isOrthogonal: function() {\n var point = Point.read(arguments);\n return Point.isOrthogonal(this.x, this.y, point.x, point.y);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this.x) && isZero(this.y);\n },\n isNaN: function() {\n return isNaN(this.x) || isNaN(this.y);\n },\n isInQuadrant: function(q) {\n return this.x * (q > 1 && q < 4 ? -1 : 1) >= 0 && this.y * (q > 2 ? -1 : 1) >= 0;\n },\n dot: function() {\n var point = Point.read(arguments);\n return this.x * point.x + this.y * point.y;\n },\n cross: function() {\n var point = Point.read(arguments);\n return this.x * point.y - this.y * point.x;\n },\n project: function() {\n var point = Point.read(arguments), scale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n return new Point(point.x * scale, point.y * scale);\n },\n statics: {\n min: function() {\n var args = arguments, point1 = Point.read(args), point2 = Point.read(args);\n return new Point(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y));\n },\n max: function() {\n var args = arguments, point1 = Point.read(args), point2 = Point.read(args);\n return new Point(Math.max(point1.x, point2.x), Math.max(point1.y, point2.y));\n },\n random: function() {\n return new Point(Math.random(), Math.random());\n },\n isCollinear: function(x1, y1, x2, y2) {\n return Math.abs(x1 * y2 - y1 * x2) <= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2)) * 1e-8;\n },\n isOrthogonal: function(x1, y1, x2, y2) {\n return Math.abs(x1 * x2 + y1 * y2) <= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2)) * 1e-8;\n }\n }\n }, Base.each([\n \"round\",\n \"ceil\",\n \"floor\",\n \"abs\"\n ], function(key) {\n var op = Math[key];\n this[key] = function() {\n return new Point(op(this.x), op(this.y));\n };\n }, {}));\n var LinkedPoint = Point.extend({\n initialize: function Point(x, y, owner, setter) {\n this._x = x;\n this._y = y;\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(x, y, _dontNotify) {\n this._x = x;\n this._y = y;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n },\n getX: function() {\n return this._x;\n },\n setX: function(x) {\n this._x = x;\n this._owner[this._setter](this);\n },\n getY: function() {\n return this._y;\n },\n setY: function(y) {\n this._y = y;\n this._owner[this._setter](this);\n },\n isSelected: function() {\n return !!(this._owner._selection & this._getSelection());\n },\n setSelected: function(selected) {\n this._owner._changeSelection(this._getSelection(), selected);\n },\n _getSelection: function() {\n return this._setter === \"setPosition\" ? 4 : 0;\n }\n });\n var Size = Base.extend({\n _class: \"Size\",\n _readIndex: true,\n initialize: function Size(arg0, arg1) {\n var type = typeof arg0, reading = this.__read, read = 0;\n if (type === \"number\") {\n var hasHeight = typeof arg1 === \"number\";\n this._set(arg0, hasHeight ? arg1 : arg0);\n if (reading) read = hasHeight ? 2 : 1;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0);\n if (reading) read = arg0 === null ? 1 : 0;\n } else {\n var obj = type === \"string\" ? arg0.split(/[\\s,]+/) || [] : arg0;\n read = 1;\n if (Array.isArray(obj)) this._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n else if (\"width\" in obj) this._set(obj.width || 0, obj.height || 0);\n else if (\"x\" in obj) this._set(obj.x || 0, obj.y || 0);\n else {\n this._set(0, 0);\n read = 0;\n }\n }\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(width, height) {\n this.width = width;\n this.height = height;\n return this;\n },\n equals: function(size) {\n return size === this || size && (this.width === size.width && this.height === size.height || Array.isArray(size) && this.width === size[0] && this.height === size[1]) || false;\n },\n clone: function() {\n return new Size(this.width, this.height);\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ width: \" + f.number(this.width) + \", height: \" + f.number(this.height) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.width),\n f.number(this.height)\n ];\n },\n add: function() {\n var size = Size.read(arguments);\n return new Size(this.width + size.width, this.height + size.height);\n },\n subtract: function() {\n var size = Size.read(arguments);\n return new Size(this.width - size.width, this.height - size.height);\n },\n multiply: function() {\n var size = Size.read(arguments);\n return new Size(this.width * size.width, this.height * size.height);\n },\n divide: function() {\n var size = Size.read(arguments);\n return new Size(this.width / size.width, this.height / size.height);\n },\n modulo: function() {\n var size = Size.read(arguments);\n return new Size(this.width % size.width, this.height % size.height);\n },\n negate: function() {\n return new Size(-this.width, -this.height);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this.width) && isZero(this.height);\n },\n isNaN: function() {\n return isNaN(this.width) || isNaN(this.height);\n },\n statics: {\n min: function(size1, size2) {\n return new Size(Math.min(size1.width, size2.width), Math.min(size1.height, size2.height));\n },\n max: function(size1, size2) {\n return new Size(Math.max(size1.width, size2.width), Math.max(size1.height, size2.height));\n },\n random: function() {\n return new Size(Math.random(), Math.random());\n }\n }\n }, Base.each([\n \"round\",\n \"ceil\",\n \"floor\",\n \"abs\"\n ], function(key) {\n var op = Math[key];\n this[key] = function() {\n return new Size(op(this.width), op(this.height));\n };\n }, {}));\n var LinkedSize = Size.extend({\n initialize: function Size(width, height, owner, setter) {\n this._width = width;\n this._height = height;\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(width, height, _dontNotify) {\n this._width = width;\n this._height = height;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n },\n getWidth: function() {\n return this._width;\n },\n setWidth: function(width) {\n this._width = width;\n this._owner[this._setter](this);\n },\n getHeight: function() {\n return this._height;\n },\n setHeight: function(height) {\n this._height = height;\n this._owner[this._setter](this);\n }\n });\n var Rectangle = Base.extend({\n _class: \"Rectangle\",\n _readIndex: true,\n beans: true,\n initialize: function Rectangle(arg0, arg1, arg2, arg3) {\n var args = arguments, type = typeof arg0, read;\n if (type === \"number\") {\n this._set(arg0, arg1, arg2, arg3);\n read = 4;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0, 0, 0);\n read = arg0 === null ? 1 : 0;\n } else if (args.length === 1) {\n if (Array.isArray(arg0)) {\n this._set.apply(this, arg0);\n read = 1;\n } else if (arg0.x !== undefined || arg0.width !== undefined) {\n this._set(arg0.x || 0, arg0.y || 0, arg0.width || 0, arg0.height || 0);\n read = 1;\n } else if (arg0.from === undefined && arg0.to === undefined) {\n this._set(0, 0, 0, 0);\n if (Base.readSupported(args, this)) read = 1;\n }\n }\n if (read === undefined) {\n var frm = Point.readNamed(args, \"from\"), next = Base.peek(args), x = frm.x, y = frm.y, width, height;\n if (next && next.x !== undefined || Base.hasNamed(args, \"to\")) {\n var to = Point.readNamed(args, \"to\");\n width = to.x - x;\n height = to.y - y;\n if (width < 0) {\n x = to.x;\n width = -width;\n }\n if (height < 0) {\n y = to.y;\n height = -height;\n }\n } else {\n var size = Size.read(args);\n width = size.width;\n height = size.height;\n }\n this._set(x, y, width, height);\n read = args.__index;\n }\n var filtered = args.__filtered;\n if (filtered) this.__filtered = filtered;\n if (this.__read) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this;\n },\n clone: function() {\n return new Rectangle(this.x, this.y, this.width, this.height);\n },\n equals: function(rect) {\n var rt = Base.isPlainValue(rect) ? Rectangle.read(arguments) : rect;\n return rt === this || rt && this.x === rt.x && this.y === rt.y && this.width === rt.width && this.height === rt.height || false;\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ x: \" + f.number(this.x) + \", y: \" + f.number(this.y) + \", width: \" + f.number(this.width) + \", height: \" + f.number(this.height) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.x),\n f.number(this.y),\n f.number(this.width),\n f.number(this.height)\n ];\n },\n getPoint: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this.x, this.y, this, \"setPoint\");\n },\n setPoint: function() {\n var point = Point.read(arguments);\n this.x = point.x;\n this.y = point.y;\n },\n getSize: function(_dontLink) {\n var ctor = _dontLink ? Size : LinkedSize;\n return new ctor(this.width, this.height, this, \"setSize\");\n },\n _fw: 1,\n _fh: 1,\n setSize: function() {\n var size = Size.read(arguments), sx = this._sx, sy = this._sy, w = size.width, h = size.height;\n if (sx) this.x += (this.width - w) * sx;\n if (sy) this.y += (this.height - h) * sy;\n this.width = w;\n this.height = h;\n this._fw = this._fh = 1;\n },\n getLeft: function() {\n return this.x;\n },\n setLeft: function(left) {\n if (!this._fw) {\n var amount = left - this.x;\n this.width -= this._sx === 0.5 ? amount * 2 : amount;\n }\n this.x = left;\n this._sx = this._fw = 0;\n },\n getTop: function() {\n return this.y;\n },\n setTop: function(top) {\n if (!this._fh) {\n var amount = top - this.y;\n this.height -= this._sy === 0.5 ? amount * 2 : amount;\n }\n this.y = top;\n this._sy = this._fh = 0;\n },\n getRight: function() {\n return this.x + this.width;\n },\n setRight: function(right) {\n if (!this._fw) {\n var amount = right - this.x;\n this.width = this._sx === 0.5 ? amount * 2 : amount;\n }\n this.x = right - this.width;\n this._sx = 1;\n this._fw = 0;\n },\n getBottom: function() {\n return this.y + this.height;\n },\n setBottom: function(bottom) {\n if (!this._fh) {\n var amount = bottom - this.y;\n this.height = this._sy === 0.5 ? amount * 2 : amount;\n }\n this.y = bottom - this.height;\n this._sy = 1;\n this._fh = 0;\n },\n getCenterX: function() {\n return this.x + this.width / 2;\n },\n setCenterX: function(x) {\n if (this._fw || this._sx === 0.5) this.x = x - this.width / 2;\n else {\n if (this._sx) this.x += (x - this.x) * 2 * this._sx;\n this.width = (x - this.x) * 2;\n }\n this._sx = 0.5;\n this._fw = 0;\n },\n getCenterY: function() {\n return this.y + this.height / 2;\n },\n setCenterY: function(y) {\n if (this._fh || this._sy === 0.5) this.y = y - this.height / 2;\n else {\n if (this._sy) this.y += (y - this.y) * 2 * this._sy;\n this.height = (y - this.y) * 2;\n }\n this._sy = 0.5;\n this._fh = 0;\n },\n getCenter: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this.getCenterX(), this.getCenterY(), this, \"setCenter\");\n },\n setCenter: function() {\n var point = Point.read(arguments);\n this.setCenterX(point.x);\n this.setCenterY(point.y);\n return this;\n },\n getArea: function() {\n return this.width * this.height;\n },\n isEmpty: function() {\n return this.width === 0 || this.height === 0;\n },\n contains: function(arg) {\n return arg && arg.width !== undefined || (Array.isArray(arg) ? arg : arguments).length === 4 ? this._containsRectangle(Rectangle.read(arguments)) : this._containsPoint(Point.read(arguments));\n },\n _containsPoint: function(point) {\n var x = point.x, y = point.y;\n return x >= this.x && y >= this.y && x <= this.x + this.width && y <= this.y + this.height;\n },\n _containsRectangle: function(rect) {\n var x = rect.x, y = rect.y;\n return x >= this.x && y >= this.y && x + rect.width <= this.x + this.width && y + rect.height <= this.y + this.height;\n },\n intersects: function() {\n var rect = Rectangle.read(arguments), epsilon = Base.read(arguments) || 0;\n return rect.x + rect.width > this.x - epsilon && rect.y + rect.height > this.y - epsilon && rect.x < this.x + this.width + epsilon && rect.y < this.y + this.height + epsilon;\n },\n intersect: function() {\n var rect = Rectangle.read(arguments), x1 = Math.max(this.x, rect.x), y1 = Math.max(this.y, rect.y), x2 = Math.min(this.x + this.width, rect.x + rect.width), y2 = Math.min(this.y + this.height, rect.y + rect.height);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n unite: function() {\n var rect = Rectangle.read(arguments), x1 = Math.min(this.x, rect.x), y1 = Math.min(this.y, rect.y), x2 = Math.max(this.x + this.width, rect.x + rect.width), y2 = Math.max(this.y + this.height, rect.y + rect.height);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n include: function() {\n var point = Point.read(arguments);\n var x1 = Math.min(this.x, point.x), y1 = Math.min(this.y, point.y), x2 = Math.max(this.x + this.width, point.x), y2 = Math.max(this.y + this.height, point.y);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n expand: function() {\n var amount = Size.read(arguments), hor = amount.width, ver = amount.height;\n return new Rectangle(this.x - hor / 2, this.y - ver / 2, this.width + hor, this.height + ver);\n },\n scale: function(hor, ver) {\n return this.expand(this.width * hor - this.width, this.height * (ver === undefined ? hor : ver) - this.height);\n }\n }, Base.each([\n [\n \"Top\",\n \"Left\"\n ],\n [\n \"Top\",\n \"Right\"\n ],\n [\n \"Bottom\",\n \"Left\"\n ],\n [\n \"Bottom\",\n \"Right\"\n ],\n [\n \"Left\",\n \"Center\"\n ],\n [\n \"Top\",\n \"Center\"\n ],\n [\n \"Right\",\n \"Center\"\n ],\n [\n \"Bottom\",\n \"Center\"\n ]\n ], function(parts, index) {\n var part = parts.join(\"\"), xFirst = /^[RL]/.test(part);\n if (index >= 4) parts[1] += xFirst ? \"Y\" : \"X\";\n var x = parts[xFirst ? 0 : 1], y = parts[xFirst ? 1 : 0], getX = \"get\" + x, getY = \"get\" + y, setX = \"set\" + x, setY = \"set\" + y, get = \"get\" + part, set = \"set\" + part;\n this[get] = function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this[getX](), this[getY](), this, set);\n };\n this[set] = function() {\n var point = Point.read(arguments);\n this[setX](point.x);\n this[setY](point.y);\n };\n }, {\n beans: true\n }));\n var LinkedRectangle = Rectangle.extend({\n initialize: function Rectangle(x, y, width, height, owner, setter) {\n this._set(x, y, width, height, true);\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(x, y, width, height, _dontNotify) {\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n }\n }, new function() {\n var proto = Rectangle.prototype;\n return Base.each([\n \"x\",\n \"y\",\n \"width\",\n \"height\"\n ], function(key) {\n var part = Base.capitalize(key), internal = \"_\" + key;\n this[\"get\" + part] = function() {\n return this[internal];\n };\n this[\"set\" + part] = function(value) {\n this[internal] = value;\n if (!this._dontNotify) this._owner[this._setter](this);\n };\n }, Base.each([\n \"Point\",\n \"Size\",\n \"Center\",\n \"Left\",\n \"Top\",\n \"Right\",\n \"Bottom\",\n \"CenterX\",\n \"CenterY\",\n \"TopLeft\",\n \"TopRight\",\n \"BottomLeft\",\n \"BottomRight\",\n \"LeftCenter\",\n \"TopCenter\",\n \"RightCenter\",\n \"BottomCenter\"\n ], function(key) {\n var name = \"set\" + key;\n this[name] = function() {\n this._dontNotify = true;\n proto[name].apply(this, arguments);\n this._dontNotify = false;\n this._owner[this._setter](this);\n };\n }, {\n isSelected: function() {\n return !!(this._owner._selection & 2);\n },\n setSelected: function(selected) {\n var owner = this._owner;\n if (owner._changeSelection) owner._changeSelection(2, selected);\n }\n }));\n });\n var Matrix = Base.extend({\n _class: \"Matrix\",\n initialize: function Matrix(arg, _dontNotify) {\n var args = arguments, count = args.length, ok = true;\n if (count >= 6) this._set.apply(this, args);\n else if (count === 1 || count === 2) {\n if (arg instanceof Matrix) this._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty, _dontNotify);\n else if (Array.isArray(arg)) this._set.apply(this, _dontNotify ? arg.concat([\n _dontNotify\n ]) : arg);\n else ok = false;\n } else if (!count) this.reset();\n else ok = false;\n if (!ok) throw new Error(\"Unsupported matrix parameters\");\n return this;\n },\n set: \"#initialize\",\n _set: function(a, b, c, d, tx, ty, _dontNotify) {\n this._a = a;\n this._b = b;\n this._c = c;\n this._d = d;\n this._tx = tx;\n this._ty = ty;\n if (!_dontNotify) this._changed();\n return this;\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this.getValues(), options, true, dictionary);\n },\n _changed: function() {\n var owner = this._owner;\n if (owner) {\n if (owner._applyMatrix) owner.transform(null, true);\n else owner._changed(25);\n }\n },\n clone: function() {\n return new Matrix(this._a, this._b, this._c, this._d, this._tx, this._ty);\n },\n equals: function(mx) {\n return mx === this || mx && this._a === mx._a && this._b === mx._b && this._c === mx._c && this._d === mx._d && this._tx === mx._tx && this._ty === mx._ty;\n },\n toString: function() {\n var f = Formatter.instance;\n return \"[[\" + [\n f.number(this._a),\n f.number(this._c),\n f.number(this._tx)\n ].join(\", \") + \"], [\" + [\n f.number(this._b),\n f.number(this._d),\n f.number(this._ty)\n ].join(\", \") + \"]]\";\n },\n reset: function(_dontNotify) {\n this._a = this._d = 1;\n this._b = this._c = this._tx = this._ty = 0;\n if (!_dontNotify) this._changed();\n return this;\n },\n apply: function(recursively, _setApplyMatrix) {\n var owner = this._owner;\n if (owner) {\n owner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n return this.isIdentity();\n }\n return false;\n },\n translate: function() {\n var point = Point.read(arguments), x = point.x, y = point.y;\n this._tx += x * this._a + y * this._c;\n this._ty += x * this._b + y * this._d;\n this._changed();\n return this;\n },\n scale: function() {\n var args = arguments, scale = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n });\n if (center) this.translate(center);\n this._a *= scale.x;\n this._b *= scale.x;\n this._c *= scale.y;\n this._d *= scale.y;\n if (center) this.translate(center.negate());\n this._changed();\n return this;\n },\n rotate: function(angle) {\n angle *= Math.PI / 180;\n var center = Point.read(arguments, 1), x = center.x, y = center.y, cos = Math.cos(angle), sin = Math.sin(angle), tx = x - x * cos + y * sin, ty = y - x * sin - y * cos, a = this._a, b = this._b, c = this._c, d = this._d;\n this._a = cos * a + sin * c;\n this._b = cos * b + sin * d;\n this._c = -sin * a + cos * c;\n this._d = -sin * b + cos * d;\n this._tx += tx * a + ty * c;\n this._ty += tx * b + ty * d;\n this._changed();\n return this;\n },\n shear: function() {\n var args = arguments, shear = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n });\n if (center) this.translate(center);\n var a = this._a, b = this._b;\n this._a += shear.y * this._c;\n this._b += shear.y * this._d;\n this._c += shear.x * a;\n this._d += shear.x * b;\n if (center) this.translate(center.negate());\n this._changed();\n return this;\n },\n skew: function() {\n var args = arguments, skew = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n }), toRadians = Math.PI / 180, shear = new Point(Math.tan(skew.x * toRadians), Math.tan(skew.y * toRadians));\n return this.shear(shear, center);\n },\n append: function(mx, _dontNotify) {\n if (mx) {\n var a1 = this._a, b1 = this._b, c1 = this._c, d1 = this._d, a2 = mx._a, b2 = mx._c, c2 = mx._b, d2 = mx._d, tx2 = mx._tx, ty2 = mx._ty;\n this._a = a2 * a1 + c2 * c1;\n this._c = b2 * a1 + d2 * c1;\n this._b = a2 * b1 + c2 * d1;\n this._d = b2 * b1 + d2 * d1;\n this._tx += tx2 * a1 + ty2 * c1;\n this._ty += tx2 * b1 + ty2 * d1;\n if (!_dontNotify) this._changed();\n }\n return this;\n },\n prepend: function(mx, _dontNotify) {\n if (mx) {\n var a1 = this._a, b1 = this._b, c1 = this._c, d1 = this._d, tx1 = this._tx, ty1 = this._ty, a2 = mx._a, b2 = mx._c, c2 = mx._b, d2 = mx._d, tx2 = mx._tx, ty2 = mx._ty;\n this._a = a2 * a1 + b2 * b1;\n this._c = a2 * c1 + b2 * d1;\n this._b = c2 * a1 + d2 * b1;\n this._d = c2 * c1 + d2 * d1;\n this._tx = a2 * tx1 + b2 * ty1 + tx2;\n this._ty = c2 * tx1 + d2 * ty1 + ty2;\n if (!_dontNotify) this._changed();\n }\n return this;\n },\n appended: function(mx) {\n return this.clone().append(mx);\n },\n prepended: function(mx) {\n return this.clone().prepend(mx);\n },\n invert: function() {\n var a = this._a, b = this._b, c = this._c, d = this._d, tx = this._tx, ty = this._ty, det = a * d - b * c, res = null;\n if (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n this._a = d / det;\n this._b = -b / det;\n this._c = -c / det;\n this._d = a / det;\n this._tx = (c * ty - d * tx) / det;\n this._ty = (b * tx - a * ty) / det;\n res = this;\n }\n return res;\n },\n inverted: function() {\n return this.clone().invert();\n },\n concatenate: \"#append\",\n preConcatenate: \"#prepend\",\n chain: \"#appended\",\n _shiftless: function() {\n return new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n },\n _orNullIfIdentity: function() {\n return this.isIdentity() ? null : this;\n },\n isIdentity: function() {\n return this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1 && this._tx === 0 && this._ty === 0;\n },\n isInvertible: function() {\n var det = this._a * this._d - this._c * this._b;\n return det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n },\n isSingular: function() {\n return !this.isInvertible();\n },\n transform: function(src, dst, count) {\n return arguments.length < 3 ? this._transformPoint(Point.read(arguments)) : this._transformCoordinates(src, dst, count);\n },\n _transformPoint: function(point, dest, _dontNotify) {\n var x = point.x, y = point.y;\n if (!dest) dest = new Point();\n return dest._set(x * this._a + y * this._c + this._tx, x * this._b + y * this._d + this._ty, _dontNotify);\n },\n _transformCoordinates: function(src, dst, count) {\n for(var i = 0, max = 2 * count; i < max; i += 2){\n var x = src[i], y = src[i + 1];\n dst[i] = x * this._a + y * this._c + this._tx;\n dst[i + 1] = x * this._b + y * this._d + this._ty;\n }\n return dst;\n },\n _transformCorners: function(rect) {\n var x1 = rect.x, y1 = rect.y, x2 = x1 + rect.width, y2 = y1 + rect.height, coords = [\n x1,\n y1,\n x2,\n y1,\n x2,\n y2,\n x1,\n y2\n ];\n return this._transformCoordinates(coords, coords, 4);\n },\n _transformBounds: function(bounds, dest, _dontNotify) {\n var coords = this._transformCorners(bounds), min = coords.slice(0, 2), max = min.slice();\n for(var i = 2; i < 8; i++){\n var val = coords[i], j = i & 1;\n if (val < min[j]) min[j] = val;\n else if (val > max[j]) max[j] = val;\n }\n if (!dest) dest = new Rectangle();\n return dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1], _dontNotify);\n },\n inverseTransform: function() {\n return this._inverseTransform(Point.read(arguments));\n },\n _inverseTransform: function(point, dest, _dontNotify) {\n var a = this._a, b = this._b, c = this._c, d = this._d, tx = this._tx, ty = this._ty, det = a * d - b * c, res = null;\n if (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n var x = point.x - this._tx, y = point.y - this._ty;\n if (!dest) dest = new Point();\n res = dest._set((x * d - y * c) / det, (y * a - x * b) / det, _dontNotify);\n }\n return res;\n },\n decompose: function() {\n var a = this._a, b = this._b, c = this._c, d = this._d, det = a * d - b * c, sqrt = Math.sqrt, atan2 = Math.atan2, degrees = 180 / Math.PI, rotate, scale, skew;\n if (a !== 0 || b !== 0) {\n var r = sqrt(a * a + b * b);\n rotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n scale = [\n r,\n det / r\n ];\n skew = [\n atan2(a * c + b * d, r * r),\n 0\n ];\n } else if (c !== 0 || d !== 0) {\n var s = sqrt(c * c + d * d);\n rotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n scale = [\n det / s,\n s\n ];\n skew = [\n 0,\n atan2(a * c + b * d, s * s)\n ];\n } else {\n rotate = 0;\n skew = scale = [\n 0,\n 0\n ];\n }\n return {\n translation: this.getTranslation(),\n rotation: rotate * degrees,\n scaling: new Point(scale),\n skewing: new Point(skew[0] * degrees, skew[1] * degrees)\n };\n },\n getValues: function() {\n return [\n this._a,\n this._b,\n this._c,\n this._d,\n this._tx,\n this._ty\n ];\n },\n getTranslation: function() {\n return new Point(this._tx, this._ty);\n },\n getScaling: function() {\n return this.decompose().scaling;\n },\n getRotation: function() {\n return this.decompose().rotation;\n },\n applyToContext: function(ctx) {\n if (!this.isIdentity()) ctx.transform(this._a, this._b, this._c, this._d, this._tx, this._ty);\n }\n }, Base.each([\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"tx\",\n \"ty\"\n ], function(key) {\n var part = Base.capitalize(key), prop = \"_\" + key;\n this[\"get\" + part] = function() {\n return this[prop];\n };\n this[\"set\" + part] = function(value) {\n this[prop] = value;\n this._changed();\n };\n }, {}));\n var Line = Base.extend({\n _class: \"Line\",\n initialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n var asVector = false;\n if (arguments.length >= 4) {\n this._px = arg0;\n this._py = arg1;\n this._vx = arg2;\n this._vy = arg3;\n asVector = arg4;\n } else {\n this._px = arg0.x;\n this._py = arg0.y;\n this._vx = arg1.x;\n this._vy = arg1.y;\n asVector = arg2;\n }\n if (!asVector) {\n this._vx -= this._px;\n this._vy -= this._py;\n }\n },\n getPoint: function() {\n return new Point(this._px, this._py);\n },\n getVector: function() {\n return new Point(this._vx, this._vy);\n },\n getLength: function() {\n return this.getVector().getLength();\n },\n intersect: function(line, isInfinite) {\n return Line.intersect(this._px, this._py, this._vx, this._vy, line._px, line._py, line._vx, line._vy, true, isInfinite);\n },\n getSide: function(point, isInfinite) {\n return Line.getSide(this._px, this._py, this._vx, this._vy, point.x, point.y, true, isInfinite);\n },\n getDistance: function(point) {\n return Math.abs(this.getSignedDistance(point));\n },\n getSignedDistance: function(point) {\n return Line.getSignedDistance(this._px, this._py, this._vx, this._vy, point.x, point.y, true);\n },\n isCollinear: function(line) {\n return Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n },\n isOrthogonal: function(line) {\n return Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n },\n statics: {\n intersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector, isInfinite) {\n if (!asVector) {\n v1x -= p1x;\n v1y -= p1y;\n v2x -= p2x;\n v2y -= p2y;\n }\n var cross = v1x * v2y - v1y * v2x;\n if (!Numerical.isMachineZero(cross)) {\n var dx = p1x - p2x, dy = p1y - p2y, u1 = (v2x * dy - v2y * dx) / cross, u2 = (v1x * dy - v1y * dx) / cross, epsilon = 1e-12, uMin = -epsilon, uMax = 1 + epsilon;\n if (isInfinite || uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n if (!isInfinite) u1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n return new Point(p1x + u1 * v1x, p1y + u1 * v1y);\n }\n }\n },\n getSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n if (!asVector) {\n vx -= px;\n vy -= py;\n }\n var v2x = x - px, v2y = y - py, ccw = v2x * vy - v2y * vx;\n if (!isInfinite && Numerical.isMachineZero(ccw)) {\n ccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n if (ccw >= 0 && ccw <= 1) ccw = 0;\n }\n return ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n },\n getSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n if (!asVector) {\n vx -= px;\n vy -= py;\n }\n return vx === 0 ? vy > 0 ? x - px : px - x : vy === 0 ? vx < 0 ? y - py : py - y : ((x - px) * vy - (y - py) * vx) / (vy > vx ? vy * Math.sqrt(1 + vx * vx / (vy * vy)) : vx * Math.sqrt(1 + vy * vy / (vx * vx)));\n },\n getDistance: function(px, py, vx, vy, x, y, asVector) {\n return Math.abs(Line.getSignedDistance(px, py, vx, vy, x, y, asVector));\n }\n }\n });\n var Project = PaperScopeItem.extend({\n _class: \"Project\",\n _list: \"projects\",\n _reference: \"project\",\n _compactSerialize: true,\n initialize: function Project(element) {\n PaperScopeItem.call(this, true);\n this._children = [];\n this._namedChildren = {};\n this._activeLayer = null;\n this._currentStyle = new Style(null, null, this);\n this._view = View.create(this, element || CanvasProvider.getCanvas(1, 1));\n this._selectionItems = {};\n this._selectionCount = 0;\n this._updateVersion = 0;\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this._children, options, true, dictionary);\n },\n _changed: function(flags, item) {\n if (flags & 1) {\n var view = this._view;\n if (view) {\n view._needsUpdate = true;\n if (!view._requested && view._autoUpdate) view.requestUpdate();\n }\n }\n var changes = this._changes;\n if (changes && item) {\n var changesById = this._changesById, id = item._id, entry = changesById[id];\n if (entry) entry.flags |= flags;\n else changes.push(changesById[id] = {\n item: item,\n flags: flags\n });\n }\n },\n clear: function() {\n var children = this._children;\n for(var i = children.length - 1; i >= 0; i--)children[i].remove();\n },\n isEmpty: function() {\n return !this._children.length;\n },\n remove: function remove() {\n if (!remove.base.call(this)) return false;\n if (this._view) this._view.remove();\n return true;\n },\n getView: function() {\n return this._view;\n },\n getCurrentStyle: function() {\n return this._currentStyle;\n },\n setCurrentStyle: function(style) {\n this._currentStyle.set(style);\n },\n getIndex: function() {\n return this._index;\n },\n getOptions: function() {\n return this._scope.settings;\n },\n getLayers: function() {\n return this._children;\n },\n getActiveLayer: function() {\n return this._activeLayer || new Layer({\n project: this,\n insert: true\n });\n },\n getSymbolDefinitions: function() {\n var definitions = [], ids = {};\n this.getItems({\n class: SymbolItem,\n match: function(item) {\n var definition = item._definition, id = definition._id;\n if (!ids[id]) {\n ids[id] = true;\n definitions.push(definition);\n }\n return false;\n }\n });\n return definitions;\n },\n getSymbols: \"getSymbolDefinitions\",\n getSelectedItems: function() {\n var selectionItems = this._selectionItems, items = [];\n for(var id in selectionItems){\n var item = selectionItems[id], selection = item._selection;\n if (selection & 1 && item.isInserted()) items.push(item);\n else if (!selection) this._updateSelection(item);\n }\n return items;\n },\n _updateSelection: function(item) {\n var id = item._id, selectionItems = this._selectionItems;\n if (item._selection) {\n if (selectionItems[id] !== item) {\n this._selectionCount++;\n selectionItems[id] = item;\n }\n } else if (selectionItems[id] === item) {\n this._selectionCount--;\n delete selectionItems[id];\n }\n },\n selectAll: function() {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setFullySelected(true);\n },\n deselectAll: function() {\n var selectionItems = this._selectionItems;\n for(var i in selectionItems)selectionItems[i].setFullySelected(false);\n },\n addLayer: function(layer) {\n return this.insertLayer(undefined, layer);\n },\n insertLayer: function(index, layer) {\n if (layer instanceof Layer) {\n layer._remove(false, true);\n Base.splice(this._children, [\n layer\n ], index, 0);\n layer._setProject(this, true);\n var name = layer._name;\n if (name) layer.setName(name);\n if (this._changes) layer._changed(5);\n if (!this._activeLayer) this._activeLayer = layer;\n } else layer = null;\n return layer;\n },\n _insertItem: function(index, item, _created) {\n item = this.insertLayer(index, item) || (this._activeLayer || this._insertItem(undefined, new Layer(Item.NO_INSERT), true)).insertChild(index, item);\n if (_created && item.activate) item.activate();\n return item;\n },\n getItems: function(options) {\n return Item._getItems(this, options);\n },\n getItem: function(options) {\n return Item._getItems(this, options, null, null, true)[0] || null;\n },\n importJSON: function(json) {\n this.activate();\n var layer = this._activeLayer;\n return Base.importJSON(json, layer && layer.isEmpty() && layer);\n },\n removeOn: function(type) {\n var sets = this._removeSets;\n if (sets) {\n if (type === \"mouseup\") sets.mousedrag = null;\n var set = sets[type];\n if (set) {\n for(var id in set){\n var item = set[id];\n for(var key in sets){\n var other = sets[key];\n if (other && other != set) delete other[item._id];\n }\n item.remove();\n }\n sets[type] = null;\n }\n }\n },\n draw: function(ctx, matrix, pixelRatio) {\n this._updateVersion++;\n ctx.save();\n matrix.applyToContext(ctx);\n var children = this._children, param = new Base({\n offset: new Point(0, 0),\n pixelRatio: pixelRatio,\n viewMatrix: matrix.isIdentity() ? null : matrix,\n matrices: [\n new Matrix()\n ],\n updateMatrix: true\n });\n for(var i = 0, l = children.length; i < l; i++)children[i].draw(ctx, param);\n ctx.restore();\n if (this._selectionCount > 0) {\n ctx.save();\n ctx.strokeWidth = 1;\n var items = this._selectionItems, size = this._scope.settings.handleSize, version = this._updateVersion;\n for(var id in items)items[id]._drawSelection(ctx, matrix, size, items, version);\n ctx.restore();\n }\n }\n });\n var Item = Base.extend(Emitter, {\n statics: {\n extend: function extend(src) {\n if (src._serializeFields) src._serializeFields = Base.set({}, this.prototype._serializeFields, src._serializeFields);\n return extend.base.apply(this, arguments);\n },\n INSERT: {\n insert: true\n },\n NO_INSERT: {\n insert: false\n }\n },\n _class: \"Item\",\n _name: null,\n _applyMatrix: true,\n _canApplyMatrix: true,\n _canScaleStroke: false,\n _pivot: null,\n _visible: true,\n _blendMode: \"normal\",\n _opacity: 1,\n _locked: false,\n _guide: false,\n _clipMask: false,\n _selection: 0,\n _selectBounds: true,\n _selectChildren: false,\n _serializeFields: {\n name: null,\n applyMatrix: null,\n matrix: new Matrix(),\n pivot: null,\n visible: true,\n blendMode: \"normal\",\n opacity: 1,\n locked: false,\n guide: false,\n clipMask: false,\n selected: false,\n data: {}\n },\n _prioritize: [\n \"applyMatrix\"\n ]\n }, new function() {\n var handlers = [\n \"onMouseDown\",\n \"onMouseUp\",\n \"onMouseDrag\",\n \"onClick\",\n \"onDoubleClick\",\n \"onMouseMove\",\n \"onMouseEnter\",\n \"onMouseLeave\"\n ];\n return Base.each(handlers, function(name) {\n this._events[name] = {\n install: function(type) {\n this.getView()._countItemEvent(type, 1);\n },\n uninstall: function(type) {\n this.getView()._countItemEvent(type, -1);\n }\n };\n }, {\n _events: {\n onFrame: {\n install: function() {\n this.getView()._animateItem(this, true);\n },\n uninstall: function() {\n this.getView()._animateItem(this, false);\n }\n },\n onLoad: {},\n onError: {}\n },\n statics: {\n _itemHandlers: handlers\n }\n });\n }, {\n initialize: function Item() {},\n _initialize: function(props, point) {\n var hasProps = props && Base.isPlainObject(props), internal = hasProps && props.internal === true, matrix = this._matrix = new Matrix(), project = hasProps && props.project || paper.project, settings = paper.settings;\n this._id = internal ? null : UID.get();\n this._parent = this._index = null;\n this._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n if (point) matrix.translate(point);\n matrix._owner = this;\n this._style = new Style(project._currentStyle, this, project);\n if (internal || hasProps && props.insert == false || !settings.insertItems && !(hasProps && props.insert == true)) this._setProject(project);\n else (hasProps && props.parent || project)._insertItem(undefined, this, true);\n if (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) this.set(props, {\n internal: true,\n insert: true,\n project: true,\n parent: true\n });\n return hasProps;\n },\n _serialize: function(options, dictionary) {\n var props = {}, that = this;\n function serialize(fields) {\n for(var key in fields){\n var value = that[key];\n if (!Base.equals(value, key === \"leading\" ? fields.fontSize * 1.2 : fields[key])) props[key] = Base.serialize(value, options, key !== \"data\", dictionary);\n }\n }\n serialize(this._serializeFields);\n if (!(this instanceof Group)) serialize(this._style._defaults);\n return [\n this._class,\n props\n ];\n },\n _changed: function(flags) {\n var symbol = this._symbol, cacheParent = this._parent || symbol, project = this._project;\n if (flags & 8) this._bounds = this._position = this._decomposed = undefined;\n if (flags & 16) this._globalMatrix = undefined;\n if (cacheParent && flags & 72) Item._clearBoundsCache(cacheParent);\n if (flags & 2) Item._clearBoundsCache(this);\n if (project) project._changed(flags, this);\n if (symbol) symbol._changed(flags);\n },\n getId: function() {\n return this._id;\n },\n getName: function() {\n return this._name;\n },\n setName: function(name) {\n if (this._name) this._removeNamed();\n if (name === +name + \"\") throw new Error(\"Names consisting only of numbers are not supported.\");\n var owner = this._getOwner();\n if (name && owner) {\n var children = owner._children, namedChildren = owner._namedChildren;\n (namedChildren[name] = namedChildren[name] || []).push(this);\n if (!(name in children)) children[name] = this;\n }\n this._name = name || undefined;\n this._changed(256);\n },\n getStyle: function() {\n return this._style;\n },\n setStyle: function(style) {\n this.getStyle().set(style);\n }\n }, Base.each([\n \"locked\",\n \"visible\",\n \"blendMode\",\n \"opacity\",\n \"guide\"\n ], function(name) {\n var part = Base.capitalize(name), key = \"_\" + name, flags = {\n locked: 256,\n visible: 265\n };\n this[\"get\" + part] = function() {\n return this[key];\n };\n this[\"set\" + part] = function(value) {\n if (value != this[key]) {\n this[key] = value;\n this._changed(flags[name] || 257);\n }\n };\n }, {}), {\n beans: true,\n getSelection: function() {\n return this._selection;\n },\n setSelection: function(selection) {\n if (selection !== this._selection) {\n this._selection = selection;\n var project = this._project;\n if (project) {\n project._updateSelection(this);\n this._changed(257);\n }\n }\n },\n _changeSelection: function(flag, selected) {\n var selection = this._selection;\n this.setSelection(selected ? selection | flag : selection & ~flag);\n },\n isSelected: function() {\n if (this._selectChildren) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)if (children[i].isSelected()) return true;\n }\n return !!(this._selection & 1);\n },\n setSelected: function(selected) {\n if (this._selectChildren) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setSelected(selected);\n }\n this._changeSelection(1, selected);\n },\n isFullySelected: function() {\n var children = this._children, selected = !!(this._selection & 1);\n if (children && selected) {\n for(var i = 0, l = children.length; i < l; i++)if (!children[i].isFullySelected()) return false;\n return true;\n }\n return selected;\n },\n setFullySelected: function(selected) {\n var children = this._children;\n if (children) for(var i = 0, l = children.length; i < l; i++)children[i].setFullySelected(selected);\n this._changeSelection(1, selected);\n },\n isClipMask: function() {\n return this._clipMask;\n },\n setClipMask: function(clipMask) {\n if (this._clipMask != (clipMask = !!clipMask)) {\n this._clipMask = clipMask;\n if (clipMask) {\n this.setFillColor(null);\n this.setStrokeColor(null);\n }\n this._changed(257);\n if (this._parent) this._parent._changed(2048);\n }\n },\n getData: function() {\n if (!this._data) this._data = {};\n return this._data;\n },\n setData: function(data) {\n this._data = data;\n },\n getPosition: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n var position = this._position || (this._position = this._getPositionFromBounds());\n return new ctor(position.x, position.y, this, \"setPosition\");\n },\n setPosition: function() {\n this.translate(Point.read(arguments).subtract(this.getPosition(true)));\n },\n _getPositionFromBounds: function(bounds) {\n return this._pivot ? this._matrix._transformPoint(this._pivot) : (bounds || this.getBounds()).getCenter(true);\n },\n getPivot: function() {\n var pivot = this._pivot;\n return pivot ? new LinkedPoint(pivot.x, pivot.y, this, \"setPivot\") : null;\n },\n setPivot: function() {\n this._pivot = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n this._position = undefined;\n }\n }, Base.each({\n getStrokeBounds: {\n stroke: true\n },\n getHandleBounds: {\n handle: true\n },\n getInternalBounds: {\n internal: true\n }\n }, function(options, key) {\n this[key] = function(matrix) {\n return this.getBounds(matrix, options);\n };\n }, {\n beans: true,\n getBounds: function(matrix, options) {\n var hasMatrix = options || matrix instanceof Matrix, opts = Base.set({}, hasMatrix ? options : matrix, this._boundsOptions);\n if (!opts.stroke || this.getStrokeScaling()) opts.cacheItem = this;\n var rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n return !arguments.length ? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height, this, \"setBounds\") : rect;\n },\n setBounds: function() {\n var rect = Rectangle.read(arguments), bounds = this.getBounds(), _matrix = this._matrix, matrix = new Matrix(), center = rect.getCenter();\n matrix.translate(center);\n if (rect.width != bounds.width || rect.height != bounds.height) {\n if (!_matrix.isInvertible()) {\n _matrix.set(_matrix._backup || new Matrix().translate(_matrix.getTranslation()));\n bounds = this.getBounds();\n }\n matrix.scale(bounds.width !== 0 ? rect.width / bounds.width : 0, bounds.height !== 0 ? rect.height / bounds.height : 0);\n }\n center = bounds.getCenter();\n matrix.translate(-center.x, -center.y);\n this.transform(matrix);\n },\n _getBounds: function(matrix, options) {\n var children = this._children;\n if (!children || !children.length) return new Rectangle();\n Item._updateBoundsCache(this, options.cacheItem);\n return Item._getBounds(children, matrix, options);\n },\n _getBoundsCacheKey: function(options, internal) {\n return [\n options.stroke ? 1 : 0,\n options.handle ? 1 : 0,\n internal ? 1 : 0\n ].join(\"\");\n },\n _getCachedBounds: function(matrix, options, noInternal) {\n matrix = matrix && matrix._orNullIfIdentity();\n var internal = options.internal && !noInternal, cacheItem = options.cacheItem, _matrix = internal ? null : this._matrix._orNullIfIdentity(), cacheKey = cacheItem && (!matrix || matrix.equals(_matrix)) && this._getBoundsCacheKey(options, internal), bounds = this._bounds;\n Item._updateBoundsCache(this._parent || this._symbol, cacheItem);\n if (cacheKey && bounds && cacheKey in bounds) {\n var cached = bounds[cacheKey];\n return {\n rect: cached.rect.clone(),\n nonscaling: cached.nonscaling\n };\n }\n var res = this._getBounds(matrix || _matrix, options), rect = res.rect || res, style = this._style, nonscaling = res.nonscaling || style.hasStroke() && !style.getStrokeScaling();\n if (cacheKey) {\n if (!bounds) this._bounds = bounds = {};\n var cached = bounds[cacheKey] = {\n rect: rect.clone(),\n nonscaling: nonscaling,\n internal: internal\n };\n }\n return {\n rect: rect,\n nonscaling: nonscaling\n };\n },\n _getStrokeMatrix: function(matrix, options) {\n var parent = this.getStrokeScaling() ? null : options && options.internal ? this : this._parent || this._symbol && this._symbol._item, mx = parent ? parent.getViewMatrix().invert() : matrix;\n return mx && mx._shiftless();\n },\n statics: {\n _updateBoundsCache: function(parent, item) {\n if (parent && item) {\n var id = item._id, ref = parent._boundsCache = parent._boundsCache || {\n ids: {},\n list: []\n };\n if (!ref.ids[id]) {\n ref.list.push(item);\n ref.ids[id] = item;\n }\n }\n },\n _clearBoundsCache: function(item) {\n var cache = item._boundsCache;\n if (cache) {\n item._bounds = item._position = item._boundsCache = undefined;\n for(var i = 0, list = cache.list, l = list.length; i < l; i++){\n var other = list[i];\n if (other !== item) {\n other._bounds = other._position = undefined;\n if (other._boundsCache) Item._clearBoundsCache(other);\n }\n }\n }\n },\n _getBounds: function(items, matrix, options) {\n var x1 = Infinity, x2 = -x1, y1 = x1, y2 = x2, nonscaling = false;\n options = options || {};\n for(var i = 0, l = items.length; i < l; i++){\n var item = items[i];\n if (item._visible && !item.isEmpty(true)) {\n var bounds = item._getCachedBounds(matrix && matrix.appended(item._matrix), options, true), rect = bounds.rect;\n x1 = Math.min(rect.x, x1);\n y1 = Math.min(rect.y, y1);\n x2 = Math.max(rect.x + rect.width, x2);\n y2 = Math.max(rect.y + rect.height, y2);\n if (bounds.nonscaling) nonscaling = true;\n }\n }\n return {\n rect: isFinite(x1) ? new Rectangle(x1, y1, x2 - x1, y2 - y1) : new Rectangle(),\n nonscaling: nonscaling\n };\n }\n }\n }), {\n beans: true,\n _decompose: function() {\n return this._applyMatrix ? null : this._decomposed || (this._decomposed = this._matrix.decompose());\n },\n getRotation: function() {\n var decomposed = this._decompose();\n return decomposed ? decomposed.rotation : 0;\n },\n setRotation: function(rotation) {\n var current = this.getRotation();\n if (current != null && rotation != null) {\n var decomposed = this._decomposed;\n this.rotate(rotation - current);\n if (decomposed) {\n decomposed.rotation = rotation;\n this._decomposed = decomposed;\n }\n }\n },\n getScaling: function() {\n var decomposed = this._decompose(), s = decomposed && decomposed.scaling;\n return new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, \"setScaling\");\n },\n setScaling: function() {\n var current = this.getScaling(), scaling = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n if (current && scaling && !current.equals(scaling)) {\n var rotation = this.getRotation(), decomposed = this._decomposed, matrix = new Matrix(), isZero = Numerical.isZero;\n if (isZero(current.x) || isZero(current.y)) {\n matrix.translate(decomposed.translation);\n if (rotation) matrix.rotate(rotation);\n matrix.scale(scaling.x, scaling.y);\n this._matrix.set(matrix);\n } else {\n var center = this.getPosition(true);\n matrix.translate(center);\n if (rotation) matrix.rotate(rotation);\n matrix.scale(scaling.x / current.x, scaling.y / current.y);\n if (rotation) matrix.rotate(-rotation);\n matrix.translate(center.negate());\n this.transform(matrix);\n }\n if (decomposed) {\n decomposed.scaling = scaling;\n this._decomposed = decomposed;\n }\n }\n },\n getMatrix: function() {\n return this._matrix;\n },\n setMatrix: function() {\n var matrix = this._matrix;\n matrix.set.apply(matrix, arguments);\n },\n getGlobalMatrix: function(_dontClone) {\n var matrix = this._globalMatrix;\n if (matrix) {\n var parent = this._parent;\n var parents = [];\n while(parent){\n if (!parent._globalMatrix) {\n matrix = null;\n for(var i = 0, l = parents.length; i < l; i++)parents[i]._globalMatrix = null;\n break;\n }\n parents.push(parent);\n parent = parent._parent;\n }\n }\n if (!matrix) {\n matrix = this._globalMatrix = this._matrix.clone();\n var parent = this._parent;\n if (parent) matrix.prepend(parent.getGlobalMatrix(true));\n }\n return _dontClone ? matrix : matrix.clone();\n },\n getViewMatrix: function() {\n return this.getGlobalMatrix().prepend(this.getView()._matrix);\n },\n getApplyMatrix: function() {\n return this._applyMatrix;\n },\n setApplyMatrix: function(apply) {\n if (this._applyMatrix = this._canApplyMatrix && !!apply) this.transform(null, true);\n },\n getTransformContent: \"#getApplyMatrix\",\n setTransformContent: \"#setApplyMatrix\"\n }, {\n getProject: function() {\n return this._project;\n },\n _setProject: function(project, installEvents) {\n if (this._project !== project) {\n if (this._project) this._installEvents(false);\n this._project = project;\n var children = this._children;\n for(var i = 0, l = children && children.length; i < l; i++)children[i]._setProject(project);\n installEvents = true;\n }\n if (installEvents) this._installEvents(true);\n },\n getView: function() {\n return this._project._view;\n },\n _installEvents: function _installEvents(install) {\n _installEvents.base.call(this, install);\n var children = this._children;\n for(var i = 0, l = children && children.length; i < l; i++)children[i]._installEvents(install);\n },\n getLayer: function() {\n var parent = this;\n while(parent = parent._parent){\n if (parent instanceof Layer) return parent;\n }\n return null;\n },\n getParent: function() {\n return this._parent;\n },\n setParent: function(item) {\n return item.addChild(this);\n },\n _getOwner: \"#getParent\",\n getChildren: function() {\n return this._children;\n },\n setChildren: function(items) {\n this.removeChildren();\n this.addChildren(items);\n },\n getFirstChild: function() {\n return this._children && this._children[0] || null;\n },\n getLastChild: function() {\n return this._children && this._children[this._children.length - 1] || null;\n },\n getNextSibling: function() {\n var owner = this._getOwner();\n return owner && owner._children[this._index + 1] || null;\n },\n getPreviousSibling: function() {\n var owner = this._getOwner();\n return owner && owner._children[this._index - 1] || null;\n },\n getIndex: function() {\n return this._index;\n },\n equals: function(item) {\n return item === this || item && this._class === item._class && this._style.equals(item._style) && this._matrix.equals(item._matrix) && this._locked === item._locked && this._visible === item._visible && this._blendMode === item._blendMode && this._opacity === item._opacity && this._clipMask === item._clipMask && this._guide === item._guide && this._equals(item) || false;\n },\n _equals: function(item) {\n return Base.equals(this._children, item._children);\n },\n clone: function(options) {\n var copy = new this.constructor(Item.NO_INSERT), children = this._children, insert = Base.pick(options ? options.insert : undefined, options === undefined || options === true), deep = Base.pick(options ? options.deep : undefined, true);\n if (children) copy.copyAttributes(this);\n if (!children || deep) copy.copyContent(this);\n if (!children) copy.copyAttributes(this);\n if (insert) copy.insertAbove(this);\n var name = this._name, parent = this._parent;\n if (name && parent) {\n var children = parent._children, orig = name, i = 1;\n while(children[name])name = orig + \" \" + i++;\n if (name !== orig) copy.setName(name);\n }\n return copy;\n },\n copyContent: function(source) {\n var children = source._children;\n for(var i = 0, l = children && children.length; i < l; i++)this.addChild(children[i].clone(false), true);\n },\n copyAttributes: function(source, excludeMatrix) {\n this.setStyle(source._style);\n var keys = [\n \"_locked\",\n \"_visible\",\n \"_blendMode\",\n \"_opacity\",\n \"_clipMask\",\n \"_guide\"\n ];\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i];\n if (source.hasOwnProperty(key)) this[key] = source[key];\n }\n if (!excludeMatrix) this._matrix.set(source._matrix, true);\n this.setApplyMatrix(source._applyMatrix);\n this.setPivot(source._pivot);\n this.setSelection(source._selection);\n var data = source._data, name = source._name;\n this._data = data ? Base.clone(data) : null;\n if (name) this.setName(name);\n },\n rasterize: function(arg0, arg1) {\n var resolution, insert, raster;\n if (Base.isPlainObject(arg0)) {\n resolution = arg0.resolution;\n insert = arg0.insert;\n raster = arg0.raster;\n } else {\n resolution = arg0;\n insert = arg1;\n }\n if (!raster) raster = new Raster(Item.NO_INSERT);\n var bounds = this.getStrokeBounds(), scale = (resolution || this.getView().getResolution()) / 72, topLeft = bounds.getTopLeft().floor(), bottomRight = bounds.getBottomRight().ceil(), boundsSize = new Size(bottomRight.subtract(topLeft)), rasterSize = boundsSize.multiply(scale);\n raster.setSize(rasterSize, true);\n if (!rasterSize.isZero()) {\n var ctx = raster.getContext(true), matrix = new Matrix().scale(scale).translate(topLeft.negate());\n ctx.save();\n matrix.applyToContext(ctx);\n this.draw(ctx, new Base({\n matrices: [\n matrix\n ]\n }));\n ctx.restore();\n }\n raster._matrix.set(new Matrix().translate(topLeft.add(boundsSize.divide(2))).scale(1 / scale));\n if (insert === undefined || insert) raster.insertAbove(this);\n return raster;\n },\n contains: function() {\n var matrix = this._matrix;\n return matrix.isInvertible() && !!this._contains(matrix._inverseTransform(Point.read(arguments)));\n },\n _contains: function(point) {\n var children = this._children;\n if (children) {\n for(var i = children.length - 1; i >= 0; i--){\n if (children[i].contains(point)) return true;\n }\n return false;\n }\n return point.isInside(this.getInternalBounds());\n },\n isInside: function() {\n return Rectangle.read(arguments).contains(this.getBounds());\n },\n _asPathItem: function() {\n return new Path.Rectangle({\n rectangle: this.getInternalBounds(),\n matrix: this._matrix,\n insert: false\n });\n },\n intersects: function(item, _matrix) {\n if (!(item instanceof Item)) return false;\n return this._asPathItem().getIntersections(item._asPathItem(), null, _matrix, true).length > 0;\n }\n }, new function() {\n function hitTest() {\n var args = arguments;\n return this._hitTest(Point.read(args), HitResult.getOptions(args));\n }\n function hitTestAll() {\n var args = arguments, point = Point.read(args), options = HitResult.getOptions(args), all = [];\n this._hitTest(point, new Base({\n all: all\n }, options));\n return all;\n }\n function hitTestChildren(point, options, viewMatrix, _exclude) {\n var children = this._children;\n if (children) for(var i = children.length - 1; i >= 0; i--){\n var child = children[i];\n var res = child !== _exclude && child._hitTest(point, options, viewMatrix);\n if (res && !options.all) return res;\n }\n return null;\n }\n Project.inject({\n hitTest: hitTest,\n hitTestAll: hitTestAll,\n _hitTest: hitTestChildren\n });\n return {\n hitTest: hitTest,\n hitTestAll: hitTestAll,\n _hitTestChildren: hitTestChildren\n };\n }, {\n _hitTest: function(point, options, parentViewMatrix) {\n if (this._locked || !this._visible || this._guide && !options.guides || this.isEmpty()) return null;\n var matrix = this._matrix, viewMatrix = parentViewMatrix ? parentViewMatrix.appended(matrix) : this.getGlobalMatrix().prepend(this.getView()._matrix), tolerance = Math.max(options.tolerance, 1e-12), tolerancePadding = options._tolerancePadding = new Size(Path._getStrokePadding(tolerance, matrix._shiftless().invert()));\n point = matrix._inverseTransform(point);\n if (!point || !this._children && !this.getBounds({\n internal: true,\n stroke: true,\n handle: true\n }).expand(tolerancePadding.multiply(2))._containsPoint(point)) return null;\n var checkSelf = !(options.guides && !this._guide || options.selected && !this.isSelected() || options.type && options.type !== Base.hyphenate(this._class) || options.class && !(this instanceof options.class)), match = options.match, that = this, bounds, res;\n function filter(hit) {\n if (hit && match && !match(hit)) hit = null;\n if (hit && options.all) options.all.push(hit);\n return hit;\n }\n function checkPoint(type, part) {\n var pt = part ? bounds[\"get\" + part]() : that.getPosition();\n if (point.subtract(pt).divide(tolerancePadding).length <= 1) return new HitResult(type, that, {\n name: part ? Base.hyphenate(part) : type,\n point: pt\n });\n }\n var checkPosition = options.position, checkCenter = options.center, checkBounds = options.bounds;\n if (checkSelf && this._parent && (checkPosition || checkCenter || checkBounds)) {\n if (checkCenter || checkBounds) bounds = this.getInternalBounds();\n res = checkPosition && checkPoint(\"position\") || checkCenter && checkPoint(\"center\", \"Center\");\n if (!res && checkBounds) {\n var points = [\n \"TopLeft\",\n \"TopRight\",\n \"BottomLeft\",\n \"BottomRight\",\n \"LeftCenter\",\n \"TopCenter\",\n \"RightCenter\",\n \"BottomCenter\"\n ];\n for(var i = 0; i < 8 && !res; i++)res = checkPoint(\"bounds\", points[i]);\n }\n res = filter(res);\n }\n if (!res) res = this._hitTestChildren(point, options, viewMatrix) || checkSelf && filter(this._hitTestSelf(point, options, viewMatrix, this.getStrokeScaling() ? null : viewMatrix._shiftless().invert())) || null;\n if (res && res.point) res.point = matrix.transform(res.point);\n return res;\n },\n _hitTestSelf: function(point, options) {\n if (options.fill && this.hasFill() && this._contains(point)) return new HitResult(\"fill\", this);\n },\n matches: function(name, compare) {\n function matchObject(obj1, obj2) {\n for(var i in obj1)if (obj1.hasOwnProperty(i)) {\n var val1 = obj1[i], val2 = obj2[i];\n if (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n if (!matchObject(val1, val2)) return false;\n } else if (!Base.equals(val1, val2)) return false;\n }\n return true;\n }\n var type = typeof name;\n if (type === \"object\") {\n for(var key in name){\n if (name.hasOwnProperty(key) && !this.matches(key, name[key])) return false;\n }\n return true;\n } else if (type === \"function\") return name(this);\n else if (name === \"match\") return compare(this);\n else {\n var value = /^(empty|editable)$/.test(name) ? this[\"is\" + Base.capitalize(name)]() : name === \"type\" ? Base.hyphenate(this._class) : this[name];\n if (name === \"class\") {\n if (typeof compare === \"function\") return this instanceof compare;\n value = this._class;\n }\n if (typeof compare === \"function\") return !!compare(value);\n else if (compare) {\n if (compare.test) return compare.test(value);\n else if (Base.isPlainObject(compare)) return matchObject(compare, value);\n }\n return Base.equals(value, compare);\n }\n },\n getItems: function(options) {\n return Item._getItems(this, options, this._matrix);\n },\n getItem: function(options) {\n return Item._getItems(this, options, this._matrix, null, true)[0] || null;\n },\n statics: {\n _getItems: function _getItems(item, options, matrix, param, firstOnly) {\n if (!param) {\n var obj = typeof options === \"object\" && options, overlapping = obj && obj.overlapping, inside = obj && obj.inside, bounds = overlapping || inside, rect = bounds && Rectangle.read([\n bounds\n ]);\n param = {\n items: [],\n recursive: obj && obj.recursive !== false,\n inside: !!inside,\n overlapping: !!overlapping,\n rect: rect,\n path: overlapping && new Path.Rectangle({\n rectangle: rect,\n insert: false\n })\n };\n if (obj) options = Base.filter({}, options, {\n recursive: true,\n inside: true,\n overlapping: true\n });\n }\n var children = item._children, items = param.items, rect = param.rect;\n matrix = rect && (matrix || new Matrix());\n for(var i = 0, l = children && children.length; i < l; i++){\n var child = children[i], childMatrix = matrix && matrix.appended(child._matrix), add = true;\n if (rect) {\n var bounds = child.getBounds(childMatrix);\n if (!rect.intersects(bounds)) continue;\n if (!(rect.contains(bounds) || param.overlapping && (bounds.contains(rect) || param.path.intersects(child, childMatrix)))) add = false;\n }\n if (add && child.matches(options)) {\n items.push(child);\n if (firstOnly) break;\n }\n if (param.recursive !== false) _getItems(child, options, childMatrix, param, firstOnly);\n if (firstOnly && items.length > 0) break;\n }\n return items;\n }\n }\n }, {\n importJSON: function(json) {\n var res = Base.importJSON(json, this);\n return res !== this ? this.addChild(res) : res;\n },\n addChild: function(item) {\n return this.insertChild(undefined, item);\n },\n insertChild: function(index, item) {\n var res = item ? this.insertChildren(index, [\n item\n ]) : null;\n return res && res[0];\n },\n addChildren: function(items) {\n return this.insertChildren(this._children.length, items);\n },\n insertChildren: function(index, items) {\n var children = this._children;\n if (children && items && items.length > 0) {\n items = Base.slice(items);\n var inserted = {};\n for(var i = items.length - 1; i >= 0; i--){\n var item = items[i], id = item && item._id;\n if (!item || inserted[id]) items.splice(i, 1);\n else {\n item._remove(false, true);\n inserted[id] = true;\n }\n }\n Base.splice(children, items, index, 0);\n var project = this._project, notifySelf = project._changes;\n for(var i = 0, l = items.length; i < l; i++){\n var item = items[i], name = item._name;\n item._parent = this;\n item._setProject(project, true);\n if (name) item.setName(name);\n if (notifySelf) item._changed(5);\n }\n this._changed(11);\n } else items = null;\n return items;\n },\n _insertItem: \"#insertChild\",\n _insertAt: function(item, offset) {\n var owner = item && item._getOwner(), res = item !== this && owner ? this : null;\n if (res) {\n res._remove(false, true);\n owner._insertItem(item._index + offset, res);\n }\n return res;\n },\n insertAbove: function(item) {\n return this._insertAt(item, 1);\n },\n insertBelow: function(item) {\n return this._insertAt(item, 0);\n },\n sendToBack: function() {\n var owner = this._getOwner();\n return owner ? owner._insertItem(0, this) : null;\n },\n bringToFront: function() {\n var owner = this._getOwner();\n return owner ? owner._insertItem(undefined, this) : null;\n },\n appendTop: \"#addChild\",\n appendBottom: function(item) {\n return this.insertChild(0, item);\n },\n moveAbove: \"#insertAbove\",\n moveBelow: \"#insertBelow\",\n addTo: function(owner) {\n return owner._insertItem(undefined, this);\n },\n copyTo: function(owner) {\n return this.clone(false).addTo(owner);\n },\n reduce: function(options) {\n var children = this._children;\n if (children && children.length === 1) {\n var child = children[0].reduce(options);\n if (this._parent) {\n child.insertAbove(this);\n this.remove();\n } else child.remove();\n return child;\n }\n return this;\n },\n _removeNamed: function() {\n var owner = this._getOwner();\n if (owner) {\n var children = owner._children, namedChildren = owner._namedChildren, name = this._name, namedArray = namedChildren[name], index = namedArray ? namedArray.indexOf(this) : -1;\n if (index !== -1) {\n if (children[name] == this) delete children[name];\n namedArray.splice(index, 1);\n if (namedArray.length) children[name] = namedArray[0];\n else delete namedChildren[name];\n }\n }\n },\n _remove: function(notifySelf, notifyParent) {\n var owner = this._getOwner(), project = this._project, index = this._index;\n if (this._style) this._style._dispose();\n if (owner) {\n if (this._name) this._removeNamed();\n if (index != null) {\n if (project._activeLayer === this) project._activeLayer = this.getNextSibling() || this.getPreviousSibling();\n Base.splice(owner._children, null, index, 1);\n }\n this._installEvents(false);\n if (notifySelf && project._changes) this._changed(5);\n if (notifyParent) owner._changed(11, this);\n this._parent = null;\n return true;\n }\n return false;\n },\n remove: function() {\n return this._remove(true, true);\n },\n replaceWith: function(item) {\n var ok = item && item.insertBelow(this);\n if (ok) this.remove();\n return ok;\n },\n removeChildren: function(start, end) {\n if (!this._children) return null;\n start = start || 0;\n end = Base.pick(end, this._children.length);\n var removed = Base.splice(this._children, null, start, end - start);\n for(var i = removed.length - 1; i >= 0; i--)removed[i]._remove(true, false);\n if (removed.length > 0) this._changed(11);\n return removed;\n },\n clear: \"#removeChildren\",\n reverseChildren: function() {\n if (this._children) {\n this._children.reverse();\n for(var i = 0, l = this._children.length; i < l; i++)this._children[i]._index = i;\n this._changed(11);\n }\n },\n isEmpty: function(recursively) {\n var children = this._children;\n var numChildren = children ? children.length : 0;\n if (recursively) {\n for(var i = 0; i < numChildren; i++){\n if (!children[i].isEmpty(recursively)) return false;\n }\n return true;\n }\n return !numChildren;\n },\n isEditable: function() {\n var item = this;\n while(item){\n if (!item._visible || item._locked) return false;\n item = item._parent;\n }\n return true;\n },\n hasFill: function() {\n return this.getStyle().hasFill();\n },\n hasStroke: function() {\n return this.getStyle().hasStroke();\n },\n hasShadow: function() {\n return this.getStyle().hasShadow();\n },\n _getOrder: function(item) {\n function getList(item) {\n var list = [];\n do list.unshift(item);\n while (item = item._parent);\n return list;\n }\n var list1 = getList(this), list2 = getList(item);\n for(var i = 0, l = Math.min(list1.length, list2.length); i < l; i++){\n if (list1[i] != list2[i]) return list1[i]._index < list2[i]._index ? 1 : -1;\n }\n return 0;\n },\n hasChildren: function() {\n return this._children && this._children.length > 0;\n },\n isInserted: function() {\n return this._parent ? this._parent.isInserted() : false;\n },\n isAbove: function(item) {\n return this._getOrder(item) === -1;\n },\n isBelow: function(item) {\n return this._getOrder(item) === 1;\n },\n isParent: function(item) {\n return this._parent === item;\n },\n isChild: function(item) {\n return item && item._parent === this;\n },\n isDescendant: function(item) {\n var parent = this;\n while(parent = parent._parent){\n if (parent === item) return true;\n }\n return false;\n },\n isAncestor: function(item) {\n return item ? item.isDescendant(this) : false;\n },\n isSibling: function(item) {\n return this._parent === item._parent;\n },\n isGroupedWith: function(item) {\n var parent = this._parent;\n while(parent){\n if (parent._parent && /^(Group|Layer|CompoundPath)$/.test(parent._class) && item.isDescendant(parent)) return true;\n parent = parent._parent;\n }\n return false;\n }\n }, Base.each([\n \"rotate\",\n \"scale\",\n \"shear\",\n \"skew\"\n ], function(key) {\n var rotate = key === \"rotate\";\n this[key] = function() {\n var args = arguments, value = (rotate ? Base : Point).read(args), center = Point.read(args, 0, {\n readNull: true\n });\n return this.transform(new Matrix()[key](value, center || this.getPosition(true)));\n };\n }, {\n translate: function() {\n var mx = new Matrix();\n return this.transform(mx.translate.apply(mx, arguments));\n },\n transform: function(matrix, _applyRecursively, _setApplyMatrix) {\n var _matrix = this._matrix, transformMatrix = matrix && !matrix.isIdentity(), applyMatrix = _setApplyMatrix && this._canApplyMatrix || this._applyMatrix && (transformMatrix || !_matrix.isIdentity() || _applyRecursively && this._children);\n if (!transformMatrix && !applyMatrix) return this;\n if (transformMatrix) {\n if (!matrix.isInvertible() && _matrix.isInvertible()) _matrix._backup = _matrix.getValues();\n _matrix.prepend(matrix, true);\n var style = this._style, fillColor = style.getFillColor(true), strokeColor = style.getStrokeColor(true);\n if (fillColor) fillColor.transform(matrix);\n if (strokeColor) strokeColor.transform(matrix);\n }\n if (applyMatrix && (applyMatrix = this._transformContent(_matrix, _applyRecursively, _setApplyMatrix))) {\n var pivot = this._pivot;\n if (pivot) _matrix._transformPoint(pivot, pivot, true);\n _matrix.reset(true);\n if (_setApplyMatrix && this._canApplyMatrix) this._applyMatrix = true;\n }\n var bounds = this._bounds, position = this._position;\n if (transformMatrix || applyMatrix) this._changed(25);\n var decomp = transformMatrix && bounds && matrix.decompose();\n if (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n for(var key in bounds){\n var cache = bounds[key];\n if (cache.nonscaling) delete bounds[key];\n else if (applyMatrix || !cache.internal) {\n var rect = cache.rect;\n matrix._transformBounds(rect, rect);\n }\n }\n this._bounds = bounds;\n var cached = bounds[this._getBoundsCacheKey(this._boundsOptions || {})];\n if (cached) this._position = this._getPositionFromBounds(cached.rect);\n } else if (transformMatrix && position && this._pivot) this._position = matrix._transformPoint(position, position);\n return this;\n },\n _transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n var children = this._children;\n if (children) {\n for(var i = 0, l = children.length; i < l; i++)children[i].transform(matrix, applyRecursively, setApplyMatrix);\n return true;\n }\n },\n globalToLocal: function() {\n return this.getGlobalMatrix(true)._inverseTransform(Point.read(arguments));\n },\n localToGlobal: function() {\n return this.getGlobalMatrix(true)._transformPoint(Point.read(arguments));\n },\n parentToLocal: function() {\n return this._matrix._inverseTransform(Point.read(arguments));\n },\n localToParent: function() {\n return this._matrix._transformPoint(Point.read(arguments));\n },\n fitBounds: function(rectangle, fill) {\n rectangle = Rectangle.read(arguments);\n var bounds = this.getBounds(), itemRatio = bounds.height / bounds.width, rectRatio = rectangle.height / rectangle.width, scale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio) ? rectangle.width / bounds.width : rectangle.height / bounds.height, newBounds = new Rectangle(new Point(), new Size(bounds.width * scale, bounds.height * scale));\n newBounds.setCenter(rectangle.getCenter());\n this.setBounds(newBounds);\n }\n }), {\n _setStyles: function(ctx, param, viewMatrix) {\n var style = this._style, matrix = this._matrix;\n if (style.hasFill()) ctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n if (style.hasStroke()) {\n ctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n ctx.lineWidth = style.getStrokeWidth();\n var strokeJoin = style.getStrokeJoin(), strokeCap = style.getStrokeCap(), miterLimit = style.getMiterLimit();\n if (strokeJoin) ctx.lineJoin = strokeJoin;\n if (strokeCap) ctx.lineCap = strokeCap;\n if (miterLimit) ctx.miterLimit = miterLimit;\n if (paper.support.nativeDash) {\n var dashArray = style.getDashArray(), dashOffset = style.getDashOffset();\n if (dashArray && dashArray.length) {\n if (\"setLineDash\" in ctx) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashOffset;\n } else {\n ctx.mozDash = dashArray;\n ctx.mozDashOffset = dashOffset;\n }\n }\n }\n }\n if (style.hasShadow()) {\n var pixelRatio = param.pixelRatio || 1, mx = viewMatrix._shiftless().prepend(new Matrix().scale(pixelRatio, pixelRatio)), blur = mx.transform(new Point(style.getShadowBlur(), 0)), offset = mx.transform(this.getShadowOffset());\n ctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n ctx.shadowBlur = blur.getLength();\n ctx.shadowOffsetX = offset.x;\n ctx.shadowOffsetY = offset.y;\n }\n },\n draw: function(ctx, param, parentStrokeMatrix) {\n var updateVersion = this._updateVersion = this._project._updateVersion;\n if (!this._visible || this._opacity === 0) return;\n var matrices = param.matrices, viewMatrix = param.viewMatrix, matrix = this._matrix, globalMatrix = matrices[matrices.length - 1].appended(matrix);\n if (!globalMatrix.isInvertible()) return;\n viewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix) : globalMatrix;\n matrices.push(globalMatrix);\n if (param.updateMatrix) this._globalMatrix = globalMatrix;\n var blendMode = this._blendMode, opacity = Numerical.clamp(this._opacity, 0, 1), normalBlend = blendMode === \"normal\", nativeBlend = BlendMode.nativeModes[blendMode], direct = normalBlend && opacity === 1 || param.dontStart || param.clip || (nativeBlend || normalBlend && opacity < 1) && this._canComposite(), pixelRatio = param.pixelRatio || 1, mainCtx, itemOffset, prevOffset;\n if (!direct) {\n var bounds = this.getStrokeBounds(viewMatrix);\n if (!bounds.width || !bounds.height) {\n matrices.pop();\n return;\n }\n prevOffset = param.offset;\n itemOffset = param.offset = bounds.getTopLeft().floor();\n mainCtx = ctx;\n ctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1).multiply(pixelRatio));\n if (pixelRatio !== 1) ctx.scale(pixelRatio, pixelRatio);\n }\n ctx.save();\n var strokeMatrix = parentStrokeMatrix ? parentStrokeMatrix.appended(matrix) : this._canScaleStroke && !this.getStrokeScaling(true) && viewMatrix, clip = !direct && param.clipItem, transform = !strokeMatrix || clip;\n if (direct) {\n ctx.globalAlpha = opacity;\n if (nativeBlend) ctx.globalCompositeOperation = blendMode;\n } else if (transform) ctx.translate(-itemOffset.x, -itemOffset.y);\n if (transform) (direct ? matrix : viewMatrix).applyToContext(ctx);\n if (clip) param.clipItem.draw(ctx, param.extend({\n clip: true\n }));\n if (strokeMatrix) {\n ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n var offset = param.offset;\n if (offset) ctx.translate(-offset.x, -offset.y);\n }\n this._draw(ctx, param, viewMatrix, strokeMatrix);\n ctx.restore();\n matrices.pop();\n if (param.clip && !param.dontFinish) ctx.clip(this.getFillRule());\n if (!direct) {\n BlendMode.process(blendMode, ctx, mainCtx, opacity, itemOffset.subtract(prevOffset).multiply(pixelRatio));\n CanvasProvider.release(ctx);\n param.offset = prevOffset;\n }\n },\n _isUpdated: function(updateVersion) {\n var parent = this._parent;\n if (parent instanceof CompoundPath) return parent._isUpdated(updateVersion);\n var updated = this._updateVersion === updateVersion;\n if (!updated && parent && parent._visible && parent._isUpdated(updateVersion)) {\n this._updateVersion = updateVersion;\n updated = true;\n }\n return updated;\n },\n _drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n var selection = this._selection, itemSelected = selection & 1, boundsSelected = selection & 2 || itemSelected && this._selectBounds, positionSelected = selection & 4;\n if (!this._drawSelected) itemSelected = false;\n if ((itemSelected || boundsSelected || positionSelected) && this._isUpdated(updateVersion)) {\n var layer, color = this.getSelectedColor(true) || (layer = this.getLayer()) && layer.getSelectedColor(true), mx = matrix.appended(this.getGlobalMatrix(true)), half = size / 2;\n ctx.strokeStyle = ctx.fillStyle = color ? color.toCanvasStyle(ctx) : \"#009dec\";\n if (itemSelected) this._drawSelected(ctx, mx, selectionItems);\n if (positionSelected) {\n var pos = this.getPosition(true), parent = this._parent, point = parent ? parent.localToGlobal(pos) : pos, x = point.x, y = point.y;\n ctx.beginPath();\n ctx.arc(x, y, half, 0, Math.PI * 2, true);\n ctx.stroke();\n var deltas = [\n [\n 0,\n -1\n ],\n [\n 1,\n 0\n ],\n [\n 0,\n 1\n ],\n [\n -1,\n 0\n ]\n ], start = half, end = size + 1;\n for(var i = 0; i < 4; i++){\n var delta = deltas[i], dx = delta[0], dy = delta[1];\n ctx.moveTo(x + dx * start, y + dy * start);\n ctx.lineTo(x + dx * end, y + dy * end);\n ctx.stroke();\n }\n }\n if (boundsSelected) {\n var coords = mx._transformCorners(this.getInternalBounds());\n ctx.beginPath();\n for(var i = 0; i < 8; i++)ctx[!i ? \"moveTo\" : \"lineTo\"](coords[i], coords[++i]);\n ctx.closePath();\n ctx.stroke();\n for(var i = 0; i < 8; i++)ctx.fillRect(coords[i] - half, coords[++i] - half, size, size);\n }\n }\n },\n _canComposite: function() {\n return false;\n }\n }, Base.each([\n \"down\",\n \"drag\",\n \"up\",\n \"move\"\n ], function(key) {\n this[\"removeOn\" + Base.capitalize(key)] = function() {\n var hash = {};\n hash[key] = true;\n return this.removeOn(hash);\n };\n }, {\n removeOn: function(obj) {\n for(var name in obj)if (obj[name]) {\n var key = \"mouse\" + name, project = this._project, sets = project._removeSets = project._removeSets || {};\n sets[key] = sets[key] || {};\n sets[key][this._id] = this;\n }\n return this;\n }\n }), {\n tween: function(from, to, options) {\n if (!options) {\n options = to;\n to = from;\n from = null;\n if (!options) {\n options = to;\n to = null;\n }\n }\n var easing = options && options.easing, start = options && options.start, duration = options != null && (typeof options === \"number\" ? options : options.duration), tween = new Tween(this, from, to, duration, easing, start);\n function onFrame(event) {\n tween._handleFrame(event.time * 1000);\n if (!tween.running) this.off(\"frame\", onFrame);\n }\n if (duration) this.on(\"frame\", onFrame);\n return tween;\n },\n tweenTo: function(to, options) {\n return this.tween(null, to, options);\n },\n tweenFrom: function(from, options) {\n return this.tween(from, null, options);\n }\n });\n var Group = Item.extend({\n _class: \"Group\",\n _selectBounds: false,\n _selectChildren: true,\n _serializeFields: {\n children: []\n },\n initialize: function Group(arg) {\n this._children = [];\n this._namedChildren = {};\n if (!this._initialize(arg)) this.addChildren(Array.isArray(arg) ? arg : arguments);\n },\n _changed: function _changed(flags) {\n _changed.base.call(this, flags);\n if (flags & 2050) this._clipItem = undefined;\n },\n _getClipItem: function() {\n var clipItem = this._clipItem;\n if (clipItem === undefined) {\n clipItem = null;\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)if (children[i]._clipMask) {\n clipItem = children[i];\n break;\n }\n this._clipItem = clipItem;\n }\n return clipItem;\n },\n isClipped: function() {\n return !!this._getClipItem();\n },\n setClipped: function(clipped) {\n var child = this.getFirstChild();\n if (child) child.setClipMask(clipped);\n },\n _getBounds: function _getBounds(matrix, options) {\n var clipItem = this._getClipItem();\n return clipItem ? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix), Base.set({}, options, {\n stroke: false\n })) : _getBounds.base.call(this, matrix, options);\n },\n _hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n var clipItem = this._getClipItem();\n return (!clipItem || clipItem.contains(point)) && _hitTestChildren.base.call(this, point, options, viewMatrix, clipItem);\n },\n _draw: function(ctx, param) {\n var clip = param.clip, clipItem = !clip && this._getClipItem();\n param = param.extend({\n clipItem: clipItem,\n clip: false\n });\n if (clip) {\n ctx.beginPath();\n param.dontStart = param.dontFinish = true;\n } else if (clipItem) clipItem.draw(ctx, param.extend({\n clip: true\n }));\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n var item = children[i];\n if (item !== clipItem) item.draw(ctx, param);\n }\n }\n });\n var Layer = Group.extend({\n _class: \"Layer\",\n initialize: function Layer() {\n Group.apply(this, arguments);\n },\n _getOwner: function() {\n return this._parent || this._index != null && this._project;\n },\n isInserted: function isInserted() {\n return this._parent ? isInserted.base.call(this) : this._index != null;\n },\n activate: function() {\n this._project._activeLayer = this;\n },\n _hitTestSelf: function() {}\n });\n var Shape = Item.extend({\n _class: \"Shape\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _canScaleStroke: true,\n _serializeFields: {\n type: null,\n size: null,\n radius: null\n },\n initialize: function Shape(props, point) {\n this._initialize(props, point);\n },\n _equals: function(item) {\n return this._type === item._type && this._size.equals(item._size) && Base.equals(this._radius, item._radius);\n },\n copyContent: function(source) {\n this.setType(source._type);\n this.setSize(source._size);\n this.setRadius(source._radius);\n },\n getType: function() {\n return this._type;\n },\n setType: function(type) {\n this._type = type;\n },\n getShape: \"#getType\",\n setShape: \"#setType\",\n getSize: function() {\n var size = this._size;\n return new LinkedSize(size.width, size.height, this, \"setSize\");\n },\n setSize: function() {\n var size = Size.read(arguments);\n if (!this._size) this._size = size.clone();\n else if (!this._size.equals(size)) {\n var type = this._type, width = size.width, height = size.height;\n if (type === \"rectangle\") this._radius.set(Size.min(this._radius, size.divide(2).abs()));\n else if (type === \"circle\") {\n width = height = (width + height) / 2;\n this._radius = width / 2;\n } else if (type === \"ellipse\") this._radius._set(width / 2, height / 2);\n this._size._set(width, height);\n this._changed(9);\n }\n },\n getRadius: function() {\n var rad = this._radius;\n return this._type === \"circle\" ? rad : new LinkedSize(rad.width, rad.height, this, \"setRadius\");\n },\n setRadius: function(radius) {\n var type = this._type;\n if (type === \"circle\") {\n if (radius === this._radius) return;\n var size = radius * 2;\n this._radius = radius;\n this._size._set(size, size);\n } else {\n radius = Size.read(arguments);\n if (!this._radius) this._radius = radius.clone();\n else {\n if (this._radius.equals(radius)) return;\n this._radius.set(radius);\n if (type === \"rectangle\") {\n var size = Size.max(this._size, radius.multiply(2));\n this._size.set(size);\n } else if (type === \"ellipse\") this._size._set(radius.width * 2, radius.height * 2);\n }\n }\n this._changed(9);\n },\n isEmpty: function() {\n return false;\n },\n toPath: function(insert) {\n var path = new Path[Base.capitalize(this._type)]({\n center: new Point(),\n size: this._size,\n radius: this._radius,\n insert: false\n });\n path.copyAttributes(this);\n if (paper.settings.applyMatrix) path.setApplyMatrix(true);\n if (insert === undefined || insert) path.insertAbove(this);\n return path;\n },\n toShape: \"#clone\",\n _asPathItem: function() {\n return this.toPath(false);\n },\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var style = this._style, hasFill = style.hasFill(), hasStroke = style.hasStroke(), dontPaint = param.dontFinish || param.clip, untransformed = !strokeMatrix;\n if (hasFill || hasStroke || dontPaint) {\n var type = this._type, radius = this._radius, isCircle = type === \"circle\";\n if (!param.dontStart) ctx.beginPath();\n if (untransformed && isCircle) ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n else {\n var rx = isCircle ? radius : radius.width, ry = isCircle ? radius : radius.height, size = this._size, width = size.width, height = size.height;\n if (untransformed && type === \"rectangle\" && rx === 0 && ry === 0) ctx.rect(-width / 2, -height / 2, width, height);\n else {\n var x = width / 2, y = height / 2, kappa = 0.44771525016920644, cx = rx * kappa, cy = ry * kappa, c = [\n -x,\n -y + ry,\n -x,\n -y + cy,\n -x + cx,\n -y,\n -x + rx,\n -y,\n x - rx,\n -y,\n x - cx,\n -y,\n x,\n -y + cy,\n x,\n -y + ry,\n x,\n y - ry,\n x,\n y - cy,\n x - cx,\n y,\n x - rx,\n y,\n -x + rx,\n y,\n -x + cx,\n y,\n -x,\n y - cy,\n -x,\n y - ry\n ];\n if (strokeMatrix) strokeMatrix.transform(c, c, 32);\n ctx.moveTo(c[0], c[1]);\n ctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n if (x !== rx) ctx.lineTo(c[8], c[9]);\n ctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n if (y !== ry) ctx.lineTo(c[16], c[17]);\n ctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n if (x !== rx) ctx.lineTo(c[24], c[25]);\n ctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n }\n }\n ctx.closePath();\n }\n if (!dontPaint && (hasFill || hasStroke)) {\n this._setStyles(ctx, param, viewMatrix);\n if (hasFill) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) ctx.stroke();\n }\n },\n _canComposite: function() {\n return !(this.hasFill() && this.hasStroke());\n },\n _getBounds: function(matrix, options) {\n var rect = new Rectangle(this._size).setCenter(0, 0), style = this._style, strokeWidth = options.stroke && style.hasStroke() && style.getStrokeWidth();\n if (matrix) rect = matrix._transformBounds(rect);\n return strokeWidth ? rect.expand(Path._getStrokePadding(strokeWidth, this._getStrokeMatrix(matrix, options))) : rect;\n }\n }, new function() {\n function getCornerCenter(that, point, expand) {\n var radius = that._radius;\n if (!radius.isZero()) {\n var halfSize = that._size.divide(2);\n for(var q = 1; q <= 4; q++){\n var dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1), corner = dir.multiply(halfSize), center = corner.subtract(dir.multiply(radius)), rect = new Rectangle(expand ? corner.add(dir.multiply(expand)) : corner, center);\n if (rect.contains(point)) return {\n point: center,\n quadrant: q\n };\n }\n }\n }\n function isOnEllipseStroke(point, radius, padding, quadrant) {\n var vector = point.divide(radius);\n return (!quadrant || vector.isInQuadrant(quadrant)) && vector.subtract(vector.normalize()).multiply(radius).divide(padding).length <= 1;\n }\n return {\n _contains: function _contains(point) {\n if (this._type === \"rectangle\") {\n var center = getCornerCenter(this, point);\n return center ? point.subtract(center.point).divide(this._radius).getLength() <= 1 : _contains.base.call(this, point);\n } else return point.divide(this.size).getLength() <= 0.5;\n },\n _hitTestSelf: function _hitTestSelf(point, options, viewMatrix, strokeMatrix) {\n var hit = false, style = this._style, hitStroke = options.stroke && style.hasStroke(), hitFill = options.fill && style.hasFill();\n if (hitStroke || hitFill) {\n var type = this._type, radius = this._radius, strokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0, strokePadding = options._tolerancePadding.add(Path._getStrokePadding(strokeRadius, !style.getStrokeScaling() && strokeMatrix));\n if (type === \"rectangle\") {\n var padding = strokePadding.multiply(2), center = getCornerCenter(this, point, padding);\n if (center) hit = isOnEllipseStroke(point.subtract(center.point), radius, strokePadding, center.quadrant);\n else {\n var rect = new Rectangle(this._size).setCenter(0, 0), outer = rect.expand(padding), inner = rect.expand(padding.negate());\n hit = outer._containsPoint(point) && !inner._containsPoint(point);\n }\n } else hit = isOnEllipseStroke(point, radius, strokePadding);\n }\n return hit ? new HitResult(hitStroke ? \"stroke\" : \"fill\", this) : _hitTestSelf.base.apply(this, arguments);\n }\n };\n }, {\n statics: new function() {\n function createShape(type, point, size, radius, args) {\n var item = Base.create(Shape.prototype);\n item._type = type;\n item._size = size;\n item._radius = radius;\n item._initialize(Base.getNamed(args), point);\n return item;\n }\n return {\n Circle: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), radius = Base.readNamed(args, \"radius\");\n return createShape(\"circle\", center, new Size(radius * 2), radius, args);\n },\n Rectangle: function() {\n var args = arguments, rect = Rectangle.readNamed(args, \"rectangle\"), radius = Size.min(Size.readNamed(args, \"radius\"), rect.getSize(true).divide(2));\n return createShape(\"rectangle\", rect.getCenter(true), rect.getSize(true), radius, args);\n },\n Ellipse: function() {\n var args = arguments, ellipse = Shape._readEllipse(args), radius = ellipse.radius;\n return createShape(\"ellipse\", ellipse.center, radius.multiply(2), radius, args);\n },\n _readEllipse: function(args) {\n var center, radius;\n if (Base.hasNamed(args, \"radius\")) {\n center = Point.readNamed(args, \"center\");\n radius = Size.readNamed(args, \"radius\");\n } else {\n var rect = Rectangle.readNamed(args, \"rectangle\");\n center = rect.getCenter(true);\n radius = rect.getSize(true).divide(2);\n }\n return {\n center: center,\n radius: radius\n };\n }\n };\n }\n });\n var Raster = Item.extend({\n _class: \"Raster\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _boundsOptions: {\n stroke: false,\n handle: false\n },\n _serializeFields: {\n crossOrigin: null,\n source: null\n },\n _prioritize: [\n \"crossOrigin\"\n ],\n _smoothing: \"low\",\n beans: true,\n initialize: function Raster(source, position) {\n if (!this._initialize(source, position !== undefined && Point.read(arguments))) {\n var image, type = typeof source, object = type === \"string\" ? document.getElementById(source) : type === \"object\" ? source : null;\n if (object && object !== Item.NO_INSERT) {\n if (object.getContext || object.naturalHeight != null) image = object;\n else if (object) {\n var size = Size.read(arguments);\n if (!size.isZero()) image = CanvasProvider.getCanvas(size);\n }\n }\n if (image) this.setImage(image);\n else this.setSource(source);\n }\n if (!this._size) {\n this._size = new Size();\n this._loaded = false;\n }\n },\n _equals: function(item) {\n return this.getSource() === item.getSource();\n },\n copyContent: function(source) {\n var image = source._image, canvas = source._canvas;\n if (image) this._setImage(image);\n else if (canvas) {\n var copyCanvas = CanvasProvider.getCanvas(source._size);\n copyCanvas.getContext(\"2d\").drawImage(canvas, 0, 0);\n this._setImage(copyCanvas);\n }\n this._crossOrigin = source._crossOrigin;\n },\n getSize: function() {\n var size = this._size;\n return new LinkedSize(size ? size.width : 0, size ? size.height : 0, this, \"setSize\");\n },\n setSize: function(_size, _clear) {\n var size = Size.read(arguments);\n if (!size.equals(this._size)) {\n if (size.width > 0 && size.height > 0) {\n var element = !_clear && this.getElement();\n this._setImage(CanvasProvider.getCanvas(size));\n if (element) this.getContext(true).drawImage(element, 0, 0, size.width, size.height);\n } else {\n if (this._canvas) CanvasProvider.release(this._canvas);\n this._size = size.clone();\n }\n } else if (_clear) this.clear();\n },\n getWidth: function() {\n return this._size ? this._size.width : 0;\n },\n setWidth: function(width) {\n this.setSize(width, this.getHeight());\n },\n getHeight: function() {\n return this._size ? this._size.height : 0;\n },\n setHeight: function(height) {\n this.setSize(this.getWidth(), height);\n },\n getLoaded: function() {\n return this._loaded;\n },\n isEmpty: function() {\n var size = this._size;\n return !size || size.width === 0 && size.height === 0;\n },\n getResolution: function() {\n var matrix = this._matrix, orig = new Point(0, 0).transform(matrix), u = new Point(1, 0).transform(matrix).subtract(orig), v = new Point(0, 1).transform(matrix).subtract(orig);\n return new Size(72 / u.getLength(), 72 / v.getLength());\n },\n getPpi: \"#getResolution\",\n getImage: function() {\n return this._image;\n },\n setImage: function(image) {\n var that = this;\n function emit(event) {\n var view = that.getView(), type = event && event.type || \"load\";\n if (view && that.responds(type)) {\n paper = view._scope;\n that.emit(type, new Event(event));\n }\n }\n this._setImage(image);\n if (this._loaded) setTimeout(emit, 0);\n else if (image) DomEvent.add(image, {\n load: function(event) {\n that._setImage(image);\n emit(event);\n },\n error: emit\n });\n },\n _setImage: function(image) {\n if (this._canvas) CanvasProvider.release(this._canvas);\n if (image && image.getContext) {\n this._image = null;\n this._canvas = image;\n this._loaded = true;\n } else {\n this._image = image;\n this._canvas = null;\n this._loaded = !!(image && image.src && image.complete);\n }\n this._size = new Size(image ? image.naturalWidth || image.width : 0, image ? image.naturalHeight || image.height : 0);\n this._context = null;\n this._changed(1033);\n },\n getCanvas: function() {\n if (!this._canvas) {\n var ctx = CanvasProvider.getContext(this._size);\n try {\n if (this._image) ctx.drawImage(this._image, 0, 0);\n this._canvas = ctx.canvas;\n } catch (e) {\n CanvasProvider.release(ctx);\n }\n }\n return this._canvas;\n },\n setCanvas: \"#setImage\",\n getContext: function(_change) {\n if (!this._context) this._context = this.getCanvas().getContext(\"2d\");\n if (_change) {\n this._image = null;\n this._changed(1025);\n }\n return this._context;\n },\n setContext: function(context) {\n this._context = context;\n },\n getSource: function() {\n var image = this._image;\n return image && image.src || this.toDataURL();\n },\n setSource: function(src) {\n var image = new self1.Image(), crossOrigin = this._crossOrigin;\n if (crossOrigin) image.crossOrigin = crossOrigin;\n if (src) image.src = src;\n this.setImage(image);\n },\n getCrossOrigin: function() {\n var image = this._image;\n return image && image.crossOrigin || this._crossOrigin || \"\";\n },\n setCrossOrigin: function(crossOrigin) {\n this._crossOrigin = crossOrigin;\n var image = this._image;\n if (image) image.crossOrigin = crossOrigin;\n },\n getSmoothing: function() {\n return this._smoothing;\n },\n setSmoothing: function(smoothing) {\n this._smoothing = typeof smoothing === \"string\" ? smoothing : smoothing ? \"low\" : \"off\";\n this._changed(257);\n },\n getElement: function() {\n return this._canvas || this._loaded && this._image;\n }\n }, {\n beans: false,\n getSubCanvas: function() {\n var rect = Rectangle.read(arguments), ctx = CanvasProvider.getContext(rect.getSize());\n ctx.drawImage(this.getCanvas(), rect.x, rect.y, rect.width, rect.height, 0, 0, rect.width, rect.height);\n return ctx.canvas;\n },\n getSubRaster: function() {\n var rect = Rectangle.read(arguments), raster = new Raster(Item.NO_INSERT);\n raster._setImage(this.getSubCanvas(rect));\n raster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n raster._matrix.prepend(this._matrix);\n raster.insertAbove(this);\n return raster;\n },\n toDataURL: function() {\n var image = this._image, src = image && image.src;\n if (/^data:/.test(src)) return src;\n var canvas = this.getCanvas();\n return canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n },\n drawImage: function(image) {\n var point = Point.read(arguments, 1);\n this.getContext(true).drawImage(image, point.x, point.y);\n },\n getAverageColor: function(object) {\n var bounds, path;\n if (!object) bounds = this.getBounds();\n else if (object instanceof PathItem) {\n path = object;\n bounds = object.getBounds();\n } else if (typeof object === \"object\") {\n if (\"width\" in object) bounds = new Rectangle(object);\n else if (\"x\" in object) bounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n }\n if (!bounds) return null;\n var sampleSize = 32, width = Math.min(bounds.width, sampleSize), height = Math.min(bounds.height, sampleSize);\n var ctx = Raster._sampleContext;\n if (!ctx) ctx = Raster._sampleContext = CanvasProvider.getContext(new Size(sampleSize));\n else ctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n ctx.save();\n var matrix = new Matrix().scale(width / bounds.width, height / bounds.height).translate(-bounds.x, -bounds.y);\n matrix.applyToContext(ctx);\n if (path) path.draw(ctx, new Base({\n clip: true,\n matrices: [\n matrix\n ]\n }));\n this._matrix.applyToContext(ctx);\n var element = this.getElement(), size = this._size;\n if (element) ctx.drawImage(element, -size.width / 2, -size.height / 2);\n ctx.restore();\n var pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width), Math.ceil(height)).data, channels = [\n 0,\n 0,\n 0\n ], total = 0;\n for(var i = 0, l = pixels.length; i < l; i += 4){\n var alpha = pixels[i + 3];\n total += alpha;\n alpha /= 255;\n channels[0] += pixels[i] * alpha;\n channels[1] += pixels[i + 1] * alpha;\n channels[2] += pixels[i + 2] * alpha;\n }\n for(var i = 0; i < 3; i++)channels[i] /= total;\n return total ? Color.read(channels) : null;\n },\n getPixel: function() {\n var point = Point.read(arguments);\n var data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n return new Color(\"rgb\", [\n data[0] / 255,\n data[1] / 255,\n data[2] / 255\n ], data[3] / 255);\n },\n setPixel: function() {\n var args = arguments, point = Point.read(args), color = Color.read(args), components = color._convert(\"rgb\"), alpha = color._alpha, ctx = this.getContext(true), imageData = ctx.createImageData(1, 1), data = imageData.data;\n data[0] = components[0] * 255;\n data[1] = components[1] * 255;\n data[2] = components[2] * 255;\n data[3] = alpha != null ? alpha * 255 : 255;\n ctx.putImageData(imageData, point.x, point.y);\n },\n clear: function() {\n var size = this._size;\n this.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n },\n createImageData: function() {\n var size = Size.read(arguments);\n return this.getContext().createImageData(size.width, size.height);\n },\n getImageData: function() {\n var rect = Rectangle.read(arguments);\n if (rect.isEmpty()) rect = new Rectangle(this._size);\n return this.getContext().getImageData(rect.x, rect.y, rect.width, rect.height);\n },\n putImageData: function(data) {\n var point = Point.read(arguments, 1);\n this.getContext(true).putImageData(data, point.x, point.y);\n },\n setImageData: function(data) {\n this.setSize(data);\n this.getContext(true).putImageData(data, 0, 0);\n },\n _getBounds: function(matrix, options) {\n var rect = new Rectangle(this._size).setCenter(0, 0);\n return matrix ? matrix._transformBounds(rect) : rect;\n },\n _hitTestSelf: function(point) {\n if (this._contains(point)) {\n var that = this;\n return new HitResult(\"pixel\", that, {\n offset: point.add(that._size.divide(2)).round(),\n color: {\n get: function() {\n return that.getPixel(this.offset);\n }\n }\n });\n }\n },\n _draw: function(ctx, param, viewMatrix) {\n var element = this.getElement();\n if (element && element.width > 0 && element.height > 0) {\n ctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n this._setStyles(ctx, param, viewMatrix);\n var smoothing = this._smoothing, disabled = smoothing === \"off\";\n DomElement.setPrefixed(ctx, disabled ? \"imageSmoothingEnabled\" : \"imageSmoothingQuality\", disabled ? false : smoothing);\n ctx.drawImage(element, -this._size.width / 2, -this._size.height / 2);\n }\n },\n _canComposite: function() {\n return true;\n }\n });\n var SymbolItem = Item.extend({\n _class: \"SymbolItem\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _boundsOptions: {\n stroke: true\n },\n _serializeFields: {\n symbol: null\n },\n initialize: function SymbolItem(arg0, arg1) {\n if (!this._initialize(arg0, arg1 !== undefined && Point.read(arguments, 1))) this.setDefinition(arg0 instanceof SymbolDefinition ? arg0 : new SymbolDefinition(arg0));\n },\n _equals: function(item) {\n return this._definition === item._definition;\n },\n copyContent: function(source) {\n this.setDefinition(source._definition);\n },\n getDefinition: function() {\n return this._definition;\n },\n setDefinition: function(definition) {\n this._definition = definition;\n this._changed(9);\n },\n getSymbol: \"#getDefinition\",\n setSymbol: \"#setDefinition\",\n isEmpty: function() {\n return this._definition._item.isEmpty();\n },\n _getBounds: function(matrix, options) {\n var item = this._definition._item;\n return item._getCachedBounds(item._matrix.prepended(matrix), options);\n },\n _hitTestSelf: function(point, options, viewMatrix) {\n var opts = options.extend({\n all: false\n });\n var res = this._definition._item._hitTest(point, opts, viewMatrix);\n if (res) res.item = this;\n return res;\n },\n _draw: function(ctx, param) {\n this._definition._item.draw(ctx, param);\n }\n });\n var SymbolDefinition = Base.extend({\n _class: \"SymbolDefinition\",\n initialize: function SymbolDefinition(item, dontCenter) {\n this._id = UID.get();\n this.project = paper.project;\n if (item) this.setItem(item, dontCenter);\n },\n _serialize: function(options, dictionary) {\n return dictionary.add(this, function() {\n return Base.serialize([\n this._class,\n this._item\n ], options, false, dictionary);\n });\n },\n _changed: function(flags) {\n if (flags & 8) Item._clearBoundsCache(this);\n if (flags & 1) this.project._changed(flags);\n },\n getItem: function() {\n return this._item;\n },\n setItem: function(item, _dontCenter) {\n if (item._symbol) item = item.clone();\n if (this._item) this._item._symbol = null;\n this._item = item;\n item.remove();\n item.setSelected(false);\n if (!_dontCenter) item.setPosition(new Point());\n item._symbol = this;\n this._changed(9);\n },\n getDefinition: \"#getItem\",\n setDefinition: \"#setItem\",\n place: function(position) {\n return new SymbolItem(this, position);\n },\n clone: function() {\n return new SymbolDefinition(this._item.clone(false));\n },\n equals: function(symbol) {\n return symbol === this || symbol && this._item.equals(symbol._item) || false;\n }\n });\n var HitResult = Base.extend({\n _class: \"HitResult\",\n initialize: function HitResult(type, item, values) {\n this.type = type;\n this.item = item;\n if (values) this.inject(values);\n },\n statics: {\n getOptions: function(args) {\n var options = args && Base.read(args);\n return new Base({\n type: null,\n tolerance: paper.settings.hitTolerance,\n fill: !options,\n stroke: !options,\n segments: !options,\n handles: false,\n ends: false,\n position: false,\n center: false,\n bounds: false,\n guides: false,\n selected: false\n }, options);\n }\n }\n });\n var Segment = Base.extend({\n _class: \"Segment\",\n beans: true,\n _selection: 0,\n initialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n var count = arguments.length, point, handleIn, handleOut, selection;\n if (count > 0) {\n if (arg0 == null || typeof arg0 === \"object\") {\n if (count === 1 && arg0 && \"point\" in arg0) {\n point = arg0.point;\n handleIn = arg0.handleIn;\n handleOut = arg0.handleOut;\n selection = arg0.selection;\n } else {\n point = arg0;\n handleIn = arg1;\n handleOut = arg2;\n selection = arg3;\n }\n } else {\n point = [\n arg0,\n arg1\n ];\n handleIn = arg2 !== undefined ? [\n arg2,\n arg3\n ] : null;\n handleOut = arg4 !== undefined ? [\n arg4,\n arg5\n ] : null;\n }\n }\n new SegmentPoint(point, this, \"_point\");\n new SegmentPoint(handleIn, this, \"_handleIn\");\n new SegmentPoint(handleOut, this, \"_handleOut\");\n if (selection) this.setSelection(selection);\n },\n _serialize: function(options, dictionary) {\n var point = this._point, selection = this._selection, obj = selection || this.hasHandles() ? [\n point,\n this._handleIn,\n this._handleOut\n ] : point;\n if (selection) obj.push(selection);\n return Base.serialize(obj, options, true, dictionary);\n },\n _changed: function(point) {\n var path = this._path;\n if (!path) return;\n var curves = path._curves, index = this._index, curve;\n if (curves) {\n if ((!point || point === this._point || point === this._handleIn) && (curve = index > 0 ? curves[index - 1] : path._closed ? curves[curves.length - 1] : null)) curve._changed();\n if ((!point || point === this._point || point === this._handleOut) && (curve = curves[index])) curve._changed();\n }\n path._changed(41);\n },\n getPoint: function() {\n return this._point;\n },\n setPoint: function() {\n this._point.set(Point.read(arguments));\n },\n getHandleIn: function() {\n return this._handleIn;\n },\n setHandleIn: function() {\n this._handleIn.set(Point.read(arguments));\n },\n getHandleOut: function() {\n return this._handleOut;\n },\n setHandleOut: function() {\n this._handleOut.set(Point.read(arguments));\n },\n hasHandles: function() {\n return !this._handleIn.isZero() || !this._handleOut.isZero();\n },\n isSmooth: function() {\n var handleIn = this._handleIn, handleOut = this._handleOut;\n return !handleIn.isZero() && !handleOut.isZero() && handleIn.isCollinear(handleOut);\n },\n clearHandles: function() {\n this._handleIn._set(0, 0);\n this._handleOut._set(0, 0);\n },\n getSelection: function() {\n return this._selection;\n },\n setSelection: function(selection) {\n var oldSelection = this._selection, path = this._path;\n this._selection = selection = selection || 0;\n if (path && selection !== oldSelection) {\n path._updateSelection(this, oldSelection, selection);\n path._changed(257);\n }\n },\n _changeSelection: function(flag, selected) {\n var selection = this._selection;\n this.setSelection(selected ? selection | flag : selection & ~flag);\n },\n isSelected: function() {\n return !!(this._selection & 7);\n },\n setSelected: function(selected) {\n this._changeSelection(7, selected);\n },\n getIndex: function() {\n return this._index !== undefined ? this._index : null;\n },\n getPath: function() {\n return this._path || null;\n },\n getCurve: function() {\n var path = this._path, index = this._index;\n if (path) {\n if (index > 0 && !path._closed && index === path._segments.length - 1) index--;\n return path.getCurves()[index] || null;\n }\n return null;\n },\n getLocation: function() {\n var curve = this.getCurve();\n return curve ? new CurveLocation(curve, this === curve._segment1 ? 0 : 1) : null;\n },\n getNext: function() {\n var segments = this._path && this._path._segments;\n return segments && (segments[this._index + 1] || this._path._closed && segments[0]) || null;\n },\n smooth: function(options, _first, _last) {\n var opts = options || {}, type = opts.type, factor = opts.factor, prev = this.getPrevious(), next = this.getNext(), p0 = (prev || this)._point, p1 = this._point, p2 = (next || this)._point, d1 = p0.getDistance(p1), d2 = p1.getDistance(p2);\n if (!type || type === \"catmull-rom\") {\n var a = factor === undefined ? 0.5 : factor, d1_a = Math.pow(d1, a), d1_2a = d1_a * d1_a, d2_a = Math.pow(d2, a), d2_2a = d2_a * d2_a;\n if (!_first && prev) {\n var A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a, N = 3 * d2_a * (d2_a + d1_a);\n this.setHandleIn(N !== 0 ? new Point((d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x, (d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y) : new Point());\n }\n if (!_last && next) {\n var A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a, N = 3 * d1_a * (d1_a + d2_a);\n this.setHandleOut(N !== 0 ? new Point((d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x, (d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y) : new Point());\n }\n } else if (type === \"geometric\") {\n if (prev && next) {\n var vector = p0.subtract(p2), t = factor === undefined ? 0.4 : factor, k = t * d1 / (d1 + d2);\n if (!_first) this.setHandleIn(vector.multiply(k));\n if (!_last) this.setHandleOut(vector.multiply(k - t));\n }\n } else throw new Error(\"Smoothing method '\" + type + \"' not supported.\");\n },\n getPrevious: function() {\n var segments = this._path && this._path._segments;\n return segments && (segments[this._index - 1] || this._path._closed && segments[segments.length - 1]) || null;\n },\n isFirst: function() {\n return !this._index;\n },\n isLast: function() {\n var path = this._path;\n return path && this._index === path._segments.length - 1 || false;\n },\n reverse: function() {\n var handleIn = this._handleIn, handleOut = this._handleOut, tmp = handleIn.clone();\n handleIn.set(handleOut);\n handleOut.set(tmp);\n },\n reversed: function() {\n return new Segment(this._point, this._handleOut, this._handleIn);\n },\n remove: function() {\n return this._path ? !!this._path.removeSegment(this._index) : false;\n },\n clone: function() {\n return new Segment(this._point, this._handleIn, this._handleOut);\n },\n equals: function(segment) {\n return segment === this || segment && this._class === segment._class && this._point.equals(segment._point) && this._handleIn.equals(segment._handleIn) && this._handleOut.equals(segment._handleOut) || false;\n },\n toString: function() {\n var parts = [\n \"point: \" + this._point\n ];\n if (!this._handleIn.isZero()) parts.push(\"handleIn: \" + this._handleIn);\n if (!this._handleOut.isZero()) parts.push(\"handleOut: \" + this._handleOut);\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n transform: function(matrix) {\n this._transformCoordinates(matrix, new Array(6), true);\n this._changed();\n },\n interpolate: function(from, to, factor) {\n var u = 1 - factor, v = factor, point1 = from._point, point2 = to._point, handleIn1 = from._handleIn, handleIn2 = to._handleIn, handleOut2 = to._handleOut, handleOut1 = from._handleOut;\n this._point._set(u * point1._x + v * point2._x, u * point1._y + v * point2._y, true);\n this._handleIn._set(u * handleIn1._x + v * handleIn2._x, u * handleIn1._y + v * handleIn2._y, true);\n this._handleOut._set(u * handleOut1._x + v * handleOut2._x, u * handleOut1._y + v * handleOut2._y, true);\n this._changed();\n },\n _transformCoordinates: function(matrix, coords, change) {\n var point = this._point, handleIn = !change || !this._handleIn.isZero() ? this._handleIn : null, handleOut = !change || !this._handleOut.isZero() ? this._handleOut : null, x = point._x, y = point._y, i = 2;\n coords[0] = x;\n coords[1] = y;\n if (handleIn) {\n coords[i++] = handleIn._x + x;\n coords[i++] = handleIn._y + y;\n }\n if (handleOut) {\n coords[i++] = handleOut._x + x;\n coords[i++] = handleOut._y + y;\n }\n if (matrix) {\n matrix._transformCoordinates(coords, coords, i / 2);\n x = coords[0];\n y = coords[1];\n if (change) {\n point._x = x;\n point._y = y;\n i = 2;\n if (handleIn) {\n handleIn._x = coords[i++] - x;\n handleIn._y = coords[i++] - y;\n }\n if (handleOut) {\n handleOut._x = coords[i++] - x;\n handleOut._y = coords[i++] - y;\n }\n } else {\n if (!handleIn) {\n coords[i++] = x;\n coords[i++] = y;\n }\n if (!handleOut) {\n coords[i++] = x;\n coords[i++] = y;\n }\n }\n }\n return coords;\n }\n });\n var SegmentPoint = Point.extend({\n initialize: function SegmentPoint(point, owner, key) {\n var x, y, selected;\n if (!point) x = y = 0;\n else if ((x = point[0]) !== undefined) y = point[1];\n else {\n var pt = point;\n if ((x = pt.x) === undefined) {\n pt = Point.read(arguments);\n x = pt.x;\n }\n y = pt.y;\n selected = pt.selected;\n }\n this._x = x;\n this._y = y;\n this._owner = owner;\n owner[key] = this;\n if (selected) this.setSelected(true);\n },\n _set: function(x, y) {\n this._x = x;\n this._y = y;\n this._owner._changed(this);\n return this;\n },\n getX: function() {\n return this._x;\n },\n setX: function(x) {\n this._x = x;\n this._owner._changed(this);\n },\n getY: function() {\n return this._y;\n },\n setY: function(y) {\n this._y = y;\n this._owner._changed(this);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this._x) && isZero(this._y);\n },\n isSelected: function() {\n return !!(this._owner._selection & this._getSelection());\n },\n setSelected: function(selected) {\n this._owner._changeSelection(this._getSelection(), selected);\n },\n _getSelection: function() {\n var owner = this._owner;\n return this === owner._point ? 1 : this === owner._handleIn ? 2 : this === owner._handleOut ? 4 : 0;\n }\n });\n var Curve = Base.extend({\n _class: \"Curve\",\n beans: true,\n initialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n var count = arguments.length, seg1, seg2, point1, point2, handle1, handle2;\n if (count === 3) {\n this._path = arg0;\n seg1 = arg1;\n seg2 = arg2;\n } else if (!count) {\n seg1 = new Segment();\n seg2 = new Segment();\n } else if (count === 1) {\n if (\"segment1\" in arg0) {\n seg1 = new Segment(arg0.segment1);\n seg2 = new Segment(arg0.segment2);\n } else if (\"point1\" in arg0) {\n point1 = arg0.point1;\n handle1 = arg0.handle1;\n handle2 = arg0.handle2;\n point2 = arg0.point2;\n } else if (Array.isArray(arg0)) {\n point1 = [\n arg0[0],\n arg0[1]\n ];\n point2 = [\n arg0[6],\n arg0[7]\n ];\n handle1 = [\n arg0[2] - arg0[0],\n arg0[3] - arg0[1]\n ];\n handle2 = [\n arg0[4] - arg0[6],\n arg0[5] - arg0[7]\n ];\n }\n } else if (count === 2) {\n seg1 = new Segment(arg0);\n seg2 = new Segment(arg1);\n } else if (count === 4) {\n point1 = arg0;\n handle1 = arg1;\n handle2 = arg2;\n point2 = arg3;\n } else if (count === 8) {\n point1 = [\n arg0,\n arg1\n ];\n point2 = [\n arg6,\n arg7\n ];\n handle1 = [\n arg2 - arg0,\n arg3 - arg1\n ];\n handle2 = [\n arg4 - arg6,\n arg5 - arg7\n ];\n }\n this._segment1 = seg1 || new Segment(point1, null, handle1);\n this._segment2 = seg2 || new Segment(point2, handle2, null);\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this.hasHandles() ? [\n this.getPoint1(),\n this.getHandle1(),\n this.getHandle2(),\n this.getPoint2()\n ] : [\n this.getPoint1(),\n this.getPoint2()\n ], options, true, dictionary);\n },\n _changed: function() {\n this._length = this._bounds = undefined;\n },\n clone: function() {\n return new Curve(this._segment1, this._segment2);\n },\n toString: function() {\n var parts = [\n \"point1: \" + this._segment1._point\n ];\n if (!this._segment1._handleOut.isZero()) parts.push(\"handle1: \" + this._segment1._handleOut);\n if (!this._segment2._handleIn.isZero()) parts.push(\"handle2: \" + this._segment2._handleIn);\n parts.push(\"point2: \" + this._segment2._point);\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n classify: function() {\n return Curve.classify(this.getValues());\n },\n remove: function() {\n var removed = false;\n if (this._path) {\n var segment2 = this._segment2, handleOut = segment2._handleOut;\n removed = segment2.remove();\n if (removed) this._segment1._handleOut.set(handleOut);\n }\n return removed;\n },\n getPoint1: function() {\n return this._segment1._point;\n },\n setPoint1: function() {\n this._segment1._point.set(Point.read(arguments));\n },\n getPoint2: function() {\n return this._segment2._point;\n },\n setPoint2: function() {\n this._segment2._point.set(Point.read(arguments));\n },\n getHandle1: function() {\n return this._segment1._handleOut;\n },\n setHandle1: function() {\n this._segment1._handleOut.set(Point.read(arguments));\n },\n getHandle2: function() {\n return this._segment2._handleIn;\n },\n setHandle2: function() {\n this._segment2._handleIn.set(Point.read(arguments));\n },\n getSegment1: function() {\n return this._segment1;\n },\n getSegment2: function() {\n return this._segment2;\n },\n getPath: function() {\n return this._path;\n },\n getIndex: function() {\n return this._segment1._index;\n },\n getNext: function() {\n var curves = this._path && this._path._curves;\n return curves && (curves[this._segment1._index + 1] || this._path._closed && curves[0]) || null;\n },\n getPrevious: function() {\n var curves = this._path && this._path._curves;\n return curves && (curves[this._segment1._index - 1] || this._path._closed && curves[curves.length - 1]) || null;\n },\n isFirst: function() {\n return !this._segment1._index;\n },\n isLast: function() {\n var path = this._path;\n return path && this._segment1._index === path._curves.length - 1 || false;\n },\n isSelected: function() {\n return this.getPoint1().isSelected() && this.getHandle1().isSelected() && this.getHandle2().isSelected() && this.getPoint2().isSelected();\n },\n setSelected: function(selected) {\n this.getPoint1().setSelected(selected);\n this.getHandle1().setSelected(selected);\n this.getHandle2().setSelected(selected);\n this.getPoint2().setSelected(selected);\n },\n getValues: function(matrix) {\n return Curve.getValues(this._segment1, this._segment2, matrix);\n },\n getPoints: function() {\n var coords = this.getValues(), points = [];\n for(var i = 0; i < 8; i += 2)points.push(new Point(coords[i], coords[i + 1]));\n return points;\n }\n }, {\n getLength: function() {\n if (this._length == null) this._length = Curve.getLength(this.getValues(), 0, 1);\n return this._length;\n },\n getArea: function() {\n return Curve.getArea(this.getValues());\n },\n getLine: function() {\n return new Line(this._segment1._point, this._segment2._point);\n },\n getPart: function(from, to) {\n return new Curve(Curve.getPart(this.getValues(), from, to));\n },\n getPartLength: function(from, to) {\n return Curve.getLength(this.getValues(), from, to);\n },\n divideAt: function(location) {\n return this.divideAtTime(location && location.curve === this ? location.time : this.getTimeAt(location));\n },\n divideAtTime: function(time, _setHandles) {\n var tMin = 1e-8, tMax = 1 - tMin, res = null;\n if (time >= tMin && time <= tMax) {\n var parts = Curve.subdivide(this.getValues(), time), left = parts[0], right = parts[1], setHandles = _setHandles || this.hasHandles(), seg1 = this._segment1, seg2 = this._segment2, path = this._path;\n if (setHandles) {\n seg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n seg2._handleIn._set(right[4] - right[6], right[5] - right[7]);\n }\n var x = left[6], y = left[7], segment = new Segment(new Point(x, y), setHandles && new Point(left[4] - x, left[5] - y), setHandles && new Point(right[2] - x, right[3] - y));\n if (path) {\n path.insert(seg1._index + 1, segment);\n res = this.getNext();\n } else {\n this._segment2 = segment;\n this._changed();\n res = new Curve(segment, seg2);\n }\n }\n return res;\n },\n splitAt: function(location) {\n var path = this._path;\n return path ? path.splitAt(location) : null;\n },\n splitAtTime: function(time) {\n return this.splitAt(this.getLocationAtTime(time));\n },\n divide: function(offset, isTime) {\n return this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset : this.getTimeAt(offset));\n },\n split: function(offset, isTime) {\n return this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset : this.getTimeAt(offset));\n },\n reversed: function() {\n return new Curve(this._segment2.reversed(), this._segment1.reversed());\n },\n clearHandles: function() {\n this._segment1._handleOut._set(0, 0);\n this._segment2._handleIn._set(0, 0);\n },\n statics: {\n getValues: function(segment1, segment2, matrix, straight) {\n var p1 = segment1._point, h1 = segment1._handleOut, h2 = segment2._handleIn, p2 = segment2._point, x1 = p1.x, y1 = p1.y, x2 = p2.x, y2 = p2.y, values = straight ? [\n x1,\n y1,\n x1,\n y1,\n x2,\n y2,\n x2,\n y2\n ] : [\n x1,\n y1,\n x1 + h1._x,\n y1 + h1._y,\n x2 + h2._x,\n y2 + h2._y,\n x2,\n y2\n ];\n if (matrix) matrix._transformCoordinates(values, values, 4);\n return values;\n },\n subdivide: function(v, t) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7];\n if (t === undefined) t = 0.5;\n var u = 1 - t, x4 = u * x0 + t * x1, y4 = u * y0 + t * y1, x5 = u * x1 + t * x2, y5 = u * y1 + t * y2, x6 = u * x2 + t * x3, y6 = u * y2 + t * y3, x7 = u * x4 + t * x5, y7 = u * y4 + t * y5, x8 = u * x5 + t * x6, y8 = u * y5 + t * y6, x9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n return [\n [\n x0,\n y0,\n x4,\n y4,\n x7,\n y7,\n x9,\n y9\n ],\n [\n x9,\n y9,\n x8,\n y8,\n x6,\n y6,\n x3,\n y3\n ]\n ];\n },\n getMonoCurves: function(v, dir) {\n var curves = [], io = dir ? 0 : 1, o0 = v[io + 0], o1 = v[io + 2], o2 = v[io + 4], o3 = v[io + 6];\n if (o0 >= o1 === o1 >= o2 && o1 >= o2 === o2 >= o3 || Curve.isStraight(v)) curves.push(v);\n else {\n var a = 3 * (o1 - o2) - o0 + o3, b = 2 * (o0 + o2) - 4 * o1, c = o1 - o0, tMin = 1e-8, tMax = 1 - tMin, roots = [], n = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n if (!n) curves.push(v);\n else {\n roots.sort();\n var t = roots[0], parts = Curve.subdivide(v, t);\n curves.push(parts[0]);\n if (n > 1) {\n t = (roots[1] - t) / (1 - t);\n parts = Curve.subdivide(parts[1], t);\n curves.push(parts[0]);\n }\n curves.push(parts[1]);\n }\n }\n return curves;\n },\n solveCubic: function(v, coord, val, roots, min, max) {\n var v0 = v[coord], v1 = v[coord + 2], v2 = v[coord + 4], v3 = v[coord + 6], res = 0;\n if (!(v0 < val && v3 < val && v1 < val && v2 < val || v0 > val && v3 > val && v1 > val && v2 > val)) {\n var c = 3 * (v1 - v0), b = 3 * (v2 - v1) - c, a = v3 - v0 - c - b;\n res = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n }\n return res;\n },\n getTimeOf: function(v, point) {\n var p0 = new Point(v[0], v[1]), p3 = new Point(v[6], v[7]), epsilon = 1e-12, geomEpsilon = 1e-7, t = point.isClose(p0, epsilon) ? 0 : point.isClose(p3, epsilon) ? 1 : null;\n if (t === null) {\n var coords = [\n point.x,\n point.y\n ], roots = [];\n for(var c = 0; c < 2; c++){\n var count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n for(var i = 0; i < count; i++){\n var u = roots[i];\n if (point.isClose(Curve.getPoint(v, u), geomEpsilon)) return u;\n }\n }\n }\n return point.isClose(p0, geomEpsilon) ? 0 : point.isClose(p3, geomEpsilon) ? 1 : null;\n },\n getNearestTime: function(v, point) {\n if (Curve.isStraight(v)) {\n var x0 = v[0], y0 = v[1], x3 = v[6], y3 = v[7], vx = x3 - x0, vy = y3 - y0, det = vx * vx + vy * vy;\n if (det === 0) return 0;\n var u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n return u < 1e-12 ? 0 : u > 0.999999999999 ? 1 : Curve.getTimeOf(v, new Point(x0 + u * vx, y0 + u * vy));\n }\n var count = 100, minDist = Infinity, minT = 0;\n function refine(t) {\n if (t >= 0 && t <= 1) {\n var dist = point.getDistance(Curve.getPoint(v, t), true);\n if (dist < minDist) {\n minDist = dist;\n minT = t;\n return true;\n }\n }\n }\n for(var i = 0; i <= count; i++)refine(i / count);\n var step = 1 / (count * 2);\n while(step > 1e-8)if (!refine(minT - step) && !refine(minT + step)) step /= 2;\n return minT;\n },\n getPart: function(v, from, to) {\n var flip = from > to;\n if (flip) {\n var tmp = from;\n from = to;\n to = tmp;\n }\n if (from > 0) v = Curve.subdivide(v, from)[1];\n if (to < 1) v = Curve.subdivide(v, (to - from) / (1 - from))[0];\n return flip ? [\n v[6],\n v[7],\n v[4],\n v[5],\n v[2],\n v[3],\n v[0],\n v[1]\n ] : v;\n },\n isFlatEnough: function(v, flatness) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ux = 3 * x1 - 2 * x0 - x3, uy = 3 * y1 - 2 * y0 - y3, vx = 3 * x2 - 2 * x3 - x0, vy = 3 * y2 - 2 * y3 - y0;\n return Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy) <= 16 * flatness * flatness;\n },\n getArea: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7];\n return 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2) + y1 * (x0 - x2) - x1 * (y0 - y2) + y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n },\n getBounds: function(v) {\n var min = v.slice(0, 2), max = min.slice(), roots = [\n 0,\n 0\n ];\n for(var i = 0; i < 2; i++)Curve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6], i, 0, min, max, roots);\n return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n _addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n function add(value, padding) {\n var left = value - padding, right = value + padding;\n if (left < min[coord]) min[coord] = left;\n if (right > max[coord]) max[coord] = right;\n }\n padding /= 2;\n var minPad = min[coord] + padding, maxPad = max[coord] - padding;\n if (v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad || v0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n if (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n add(v0, 0);\n add(v3, 0);\n } else {\n var a = 3 * (v1 - v2) - v0 + v3, b = 2 * (v0 + v2) - 4 * v1, c = v1 - v0, count = Numerical.solveQuadratic(a, b, c, roots), tMin = 1e-8, tMax = 1 - tMin;\n add(v3, 0);\n for(var i = 0; i < count; i++){\n var t = roots[i], u = 1 - t;\n if (tMin <= t && t <= tMax) add(u * u * u * v0 + 3 * u * u * t * v1 + 3 * u * t * t * v2 + t * t * t * v3, padding);\n }\n }\n }\n }\n }\n }, Base.each([\n \"getBounds\",\n \"getStrokeBounds\",\n \"getHandleBounds\"\n ], function(name) {\n this[name] = function() {\n if (!this._bounds) this._bounds = {};\n var bounds = this._bounds[name];\n if (!bounds) bounds = this._bounds[name] = Path[name]([\n this._segment1,\n this._segment2\n ], false, this._path);\n return bounds.clone();\n };\n }, {}), Base.each({\n isStraight: function(p1, h1, h2, p2) {\n if (h1.isZero() && h2.isZero()) return true;\n else {\n var v = p2.subtract(p1);\n if (v.isZero()) return false;\n else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n var l = new Line(p1, p2), epsilon = 1e-7;\n if (l.getDistance(p1.add(h1)) < epsilon && l.getDistance(p2.add(h2)) < epsilon) {\n var div = v.dot(v), s1 = v.dot(h1) / div, s2 = v.dot(h2) / div;\n return s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n }\n }\n }\n return false;\n },\n isLinear: function(p1, h1, h2, p2) {\n var third = p2.subtract(p1).divide(3);\n return h1.equals(third) && h2.negate().equals(third);\n }\n }, function(test, name) {\n this[name] = function(epsilon) {\n var seg1 = this._segment1, seg2 = this._segment2;\n return test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point, epsilon);\n };\n this.statics[name] = function(v, epsilon) {\n var x0 = v[0], y0 = v[1], x3 = v[6], y3 = v[7];\n return test(new Point(x0, y0), new Point(v[2] - x0, v[3] - y0), new Point(v[4] - x3, v[5] - y3), new Point(x3, y3), epsilon);\n };\n }, {\n statics: {},\n hasHandles: function() {\n return !this._segment1._handleOut.isZero() || !this._segment2._handleIn.isZero();\n },\n hasLength: function(epsilon) {\n return (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles()) && this.getLength() > (epsilon || 0);\n },\n isCollinear: function(curve) {\n return curve && this.isStraight() && curve.isStraight() && this.getLine().isCollinear(curve.getLine());\n },\n isHorizontal: function() {\n return this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y) < 1e-8;\n },\n isVertical: function() {\n return this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x) < 1e-8;\n }\n }), {\n beans: false,\n getLocationAt: function(offset, _isTime) {\n return this.getLocationAtTime(_isTime ? offset : this.getTimeAt(offset));\n },\n getLocationAtTime: function(t) {\n return t != null && t >= 0 && t <= 1 ? new CurveLocation(this, t) : null;\n },\n getTimeAt: function(offset, start) {\n return Curve.getTimeAt(this.getValues(), offset, start);\n },\n getParameterAt: \"#getTimeAt\",\n getTimesWithTangent: function() {\n var tangent = Point.read(arguments);\n return tangent.isZero() ? [] : Curve.getTimesWithTangent(this.getValues(), tangent);\n },\n getOffsetAtTime: function(t) {\n return this.getPartLength(0, t);\n },\n getLocationOf: function() {\n return this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n },\n getOffsetOf: function() {\n var loc = this.getLocationOf.apply(this, arguments);\n return loc ? loc.getOffset() : null;\n },\n getTimeOf: function() {\n return Curve.getTimeOf(this.getValues(), Point.read(arguments));\n },\n getParameterOf: \"#getTimeOf\",\n getNearestLocation: function() {\n var point = Point.read(arguments), values = this.getValues(), t = Curve.getNearestTime(values, point), pt = Curve.getPoint(values, t);\n return new CurveLocation(this, t, pt, null, point.getDistance(pt));\n },\n getNearestPoint: function() {\n var loc = this.getNearestLocation.apply(this, arguments);\n return loc ? loc.getPoint() : loc;\n }\n }, new function() {\n var methods = [\n \"getPoint\",\n \"getTangent\",\n \"getNormal\",\n \"getWeightedTangent\",\n \"getWeightedNormal\",\n \"getCurvature\"\n ];\n return Base.each(methods, function(name) {\n this[name + \"At\"] = function(location, _isTime) {\n var values = this.getValues();\n return Curve[name](values, _isTime ? location : Curve.getTimeAt(values, location));\n };\n this[name + \"AtTime\"] = function(time) {\n return Curve[name](this.getValues(), time);\n };\n }, {\n statics: {\n _evaluateMethods: methods\n }\n });\n }, new function() {\n function getLengthIntegrand(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ax = 9 * (x1 - x2) + 3 * (x3 - x0), bx = 6 * (x0 + x2) - 12 * x1, cx = 3 * (x1 - x0), ay = 9 * (y1 - y2) + 3 * (y3 - y0), by = 6 * (y0 + y2) - 12 * y1, cy = 3 * (y1 - y0);\n return function(t) {\n var dx = (ax * t + bx) * t + cx, dy = (ay * t + by) * t + cy;\n return Math.sqrt(dx * dx + dy * dy);\n };\n }\n function getIterations(a, b) {\n return Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n }\n function evaluate(v, t, type, normalized) {\n if (t == null || t < 0 || t > 1) return null;\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], isZero = Numerical.isZero;\n if (isZero(x1 - x0) && isZero(y1 - y0)) {\n x1 = x0;\n y1 = y0;\n }\n if (isZero(x2 - x3) && isZero(y2 - y3)) {\n x2 = x3;\n y2 = y3;\n }\n var cx = 3 * (x1 - x0), bx = 3 * (x2 - x1) - cx, ax = x3 - x0 - cx - bx, cy = 3 * (y1 - y0), by = 3 * (y2 - y1) - cy, ay = y3 - y0 - cy - by, x, y;\n if (type === 0) {\n x = t === 0 ? x0 : t === 1 ? x3 : ((ax * t + bx) * t + cx) * t + x0;\n y = t === 0 ? y0 : t === 1 ? y3 : ((ay * t + by) * t + cy) * t + y0;\n } else {\n var tMin = 1e-8, tMax = 1 - tMin;\n if (t < tMin) {\n x = cx;\n y = cy;\n } else if (t > tMax) {\n x = 3 * (x3 - x2);\n y = 3 * (y3 - y2);\n } else {\n x = (3 * ax * t + 2 * bx) * t + cx;\n y = (3 * ay * t + 2 * by) * t + cy;\n }\n if (normalized) {\n if (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n x = x2 - x1;\n y = y2 - y1;\n }\n var len = Math.sqrt(x * x + y * y);\n if (len) {\n x /= len;\n y /= len;\n }\n }\n if (type === 3) {\n var x2 = 6 * ax * t + 2 * bx, y2 = 6 * ay * t + 2 * by, d = Math.pow(x * x + y * y, 1.5);\n x = d !== 0 ? (x * y2 - y * x2) / d : 0;\n y = 0;\n }\n }\n return type === 2 ? new Point(y, -x) : new Point(x, y);\n }\n return {\n statics: {\n classify: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], a1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2, a2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3, a3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0, d3 = 3 * a3, d2 = d3 - a2, d1 = d2 - a2 + a1, l = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3), s = l !== 0 ? 1 / l : 0, isZero = Numerical.isZero, serpentine = \"serpentine\";\n d1 *= s;\n d2 *= s;\n d3 *= s;\n function type(type, t1, t2) {\n var hasRoots = t1 !== undefined, t1Ok = hasRoots && t1 > 0 && t1 < 1, t2Ok = hasRoots && t2 > 0 && t2 < 1;\n if (hasRoots && (!(t1Ok || t2Ok) || type === \"loop\" && !(t1Ok && t2Ok))) {\n type = \"arch\";\n t1Ok = t2Ok = false;\n }\n return {\n type: type,\n roots: t1Ok || t2Ok ? t1Ok && t2Ok ? t1 < t2 ? [\n t1,\n t2\n ] : [\n t2,\n t1\n ] : [\n t1Ok ? t1 : t2\n ] : null\n };\n }\n if (isZero(d1)) return isZero(d2) ? type(isZero(d3) ? \"line\" : \"quadratic\") : type(serpentine, d3 / (3 * d2));\n var d = 3 * d2 * d2 - 4 * d1 * d3;\n if (isZero(d)) return type(\"cusp\", d2 / (2 * d1));\n var f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d), f2 = 2 * d1;\n return type(d > 0 ? serpentine : \"loop\", (d2 + f1) / f2, (d2 - f1) / f2);\n },\n getLength: function(v, a, b, ds) {\n if (a === undefined) a = 0;\n if (b === undefined) b = 1;\n if (Curve.isStraight(v)) {\n var c = v;\n if (b < 1) {\n c = Curve.subdivide(c, b)[0];\n a /= b;\n }\n if (a > 0) c = Curve.subdivide(c, a)[1];\n var dx = c[6] - c[0], dy = c[7] - c[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n return Numerical.integrate(ds || getLengthIntegrand(v), a, b, getIterations(a, b));\n },\n getTimeAt: function(v, offset, start) {\n if (start === undefined) start = offset < 0 ? 1 : 0;\n if (offset === 0) return start;\n var abs = Math.abs, epsilon = 1e-12, forward = offset > 0, a = forward ? start : 0, b = forward ? 1 : start, ds = getLengthIntegrand(v), rangeLength = Curve.getLength(v, a, b, ds), diff = abs(offset) - rangeLength;\n if (abs(diff) < epsilon) return forward ? b : a;\n else if (diff > epsilon) return null;\n var guess = offset / rangeLength, length = 0;\n function f(t) {\n length += Numerical.integrate(ds, start, t, getIterations(start, t));\n start = t;\n return length - offset;\n }\n return Numerical.findRoot(f, ds, start + guess, a, b, 32, 1e-12);\n },\n getPoint: function(v, t) {\n return evaluate(v, t, 0, false);\n },\n getTangent: function(v, t) {\n return evaluate(v, t, 1, true);\n },\n getWeightedTangent: function(v, t) {\n return evaluate(v, t, 1, false);\n },\n getNormal: function(v, t) {\n return evaluate(v, t, 2, true);\n },\n getWeightedNormal: function(v, t) {\n return evaluate(v, t, 2, false);\n },\n getCurvature: function(v, t) {\n return evaluate(v, t, 3, false).x;\n },\n getPeaks: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ax = -x0 + 3 * x1 - 3 * x2 + x3, bx = 3 * x0 - 6 * x1 + 3 * x2, cx = -3 * x0 + 3 * x1, ay = -y0 + 3 * y1 - 3 * y2 + y3, by = 3 * y0 - 6 * y1 + 3 * y2, cy = -3 * y0 + 3 * y1, tMin = 1e-8, tMax = 1 - tMin, roots = [];\n Numerical.solveCubic(9 * (ax * ax + ay * ay), 9 * (ax * bx + by * ay), 2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay), cx * bx + by * cy, roots, tMin, tMax);\n return roots.sort();\n }\n }\n };\n }, new function() {\n function addLocation(locations, include, c1, t1, c2, t2, overlap) {\n var excludeStart = !overlap && c1.getPrevious() === c2, excludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2, tMin = 1e-8, tMax = 1 - tMin;\n if (t1 !== null && t1 >= (excludeStart ? tMin : 0) && t1 <= (excludeEnd ? tMax : 1)) {\n if (t2 !== null && t2 >= (excludeEnd ? tMin : 0) && t2 <= (excludeStart ? tMax : 1)) {\n var loc1 = new CurveLocation(c1, t1, null, overlap), loc2 = new CurveLocation(c2, t2, null, overlap);\n loc1._intersection = loc2;\n loc2._intersection = loc1;\n if (!include || include(loc1)) CurveLocation.insert(locations, loc1, true);\n }\n }\n }\n function addCurveIntersections(v1, v2, c1, c2, locations, include, flip, recursion, calls, tMin, tMax, uMin, uMax) {\n if (++calls >= 4096 || ++recursion >= 40) return calls;\n var fatLineEpsilon = 1e-9, q0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7], getSignedDistance = Line.getSignedDistance, d1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]), d2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]), factor = d1 * d2 > 0 ? 3 / 4 : 4 / 9, dMin = factor * Math.min(0, d1, d2), dMax = factor * Math.max(0, d1, d2), dp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]), dp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]), dp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]), dp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]), hull = getConvexHull(dp0, dp1, dp2, dp3), top = hull[0], bottom = hull[1], tMinClip, tMaxClip;\n if (d1 === 0 && d2 === 0 && dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0 || (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null || (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(), dMin, dMax)) == null) return calls;\n var tMinNew = tMin + (tMax - tMin) * tMinClip, tMaxNew = tMin + (tMax - tMin) * tMaxClip;\n if (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n var t = (tMinNew + tMaxNew) / 2, u = (uMin + uMax) / 2;\n addLocation(locations, include, flip ? c2 : c1, flip ? u : t, flip ? c1 : c2, flip ? t : u);\n } else {\n v1 = Curve.getPart(v1, tMinClip, tMaxClip);\n var uDiff = uMax - uMin;\n if (tMaxClip - tMinClip > 0.8) {\n if (tMaxNew - tMinNew > uDiff) {\n var parts = Curve.subdivide(v1, 0.5), t = (tMinNew + tMaxNew) / 2;\n calls = addCurveIntersections(v2, parts[0], c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, tMinNew, t);\n calls = addCurveIntersections(v2, parts[1], c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, t, tMaxNew);\n } else {\n var parts = Curve.subdivide(v2, 0.5), u = (uMin + uMax) / 2;\n calls = addCurveIntersections(parts[0], v1, c2, c1, locations, include, !flip, recursion, calls, uMin, u, tMinNew, tMaxNew);\n calls = addCurveIntersections(parts[1], v1, c2, c1, locations, include, !flip, recursion, calls, u, uMax, tMinNew, tMaxNew);\n }\n } else if (uDiff === 0 || uDiff >= fatLineEpsilon) calls = addCurveIntersections(v2, v1, c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, tMinNew, tMaxNew);\n else calls = addCurveIntersections(v1, v2, c1, c2, locations, include, flip, recursion, calls, tMinNew, tMaxNew, uMin, uMax);\n }\n return calls;\n }\n function getConvexHull(dq0, dq1, dq2, dq3) {\n var p0 = [\n 0,\n dq0\n ], p1 = [\n 1 / 3,\n dq1\n ], p2 = [\n 2 / 3,\n dq2\n ], p3 = [\n 1,\n dq3\n ], dist1 = dq1 - (2 * dq0 + dq3) / 3, dist2 = dq2 - (dq0 + 2 * dq3) / 3, hull;\n if (dist1 * dist2 < 0) hull = [\n [\n p0,\n p1,\n p3\n ],\n [\n p0,\n p2,\n p3\n ]\n ];\n else {\n var distRatio = dist1 / dist2;\n hull = [\n distRatio >= 2 ? [\n p0,\n p1,\n p3\n ] : distRatio <= 0.5 ? [\n p0,\n p2,\n p3\n ] : [\n p0,\n p1,\n p2,\n p3\n ],\n [\n p0,\n p3\n ]\n ];\n }\n return (dist1 || dist2) < 0 ? hull.reverse() : hull;\n }\n function clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n if (hullTop[0][1] < dMin) return clipConvexHullPart(hullTop, true, dMin);\n else if (hullBottom[0][1] > dMax) return clipConvexHullPart(hullBottom, false, dMax);\n else return hullTop[0][0];\n }\n function clipConvexHullPart(part, top, threshold) {\n var px = part[0][0], py = part[0][1];\n for(var i = 1, l = part.length; i < l; i++){\n var qx = part[i][0], qy = part[i][1];\n if (top ? qy >= threshold : qy <= threshold) return qy === threshold ? qx : px + (threshold - py) * (qx - px) / (qy - py);\n px = qx;\n py = qy;\n }\n return null;\n }\n function getCurveLineIntersections(v, px, py, vx, vy) {\n var isZero = Numerical.isZero;\n if (isZero(vx) && isZero(vy)) {\n var t = Curve.getTimeOf(v, new Point(px, py));\n return t === null ? [] : [\n t\n ];\n }\n var angle = Math.atan2(-vy, vx), sin = Math.sin(angle), cos = Math.cos(angle), rv = [], roots = [];\n for(var i = 0; i < 8; i += 2){\n var x = v[i] - px, y = v[i + 1] - py;\n rv.push(x * cos - y * sin, x * sin + y * cos);\n }\n Curve.solveCubic(rv, 1, 0, roots, 0, 1);\n return roots;\n }\n function addCurveLineIntersections(v1, v2, c1, c2, locations, include, flip) {\n var x1 = v2[0], y1 = v2[1], x2 = v2[6], y2 = v2[7], roots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n for(var i = 0, l = roots.length; i < l; i++){\n var t1 = roots[i], p1 = Curve.getPoint(v1, t1), t2 = Curve.getTimeOf(v2, p1);\n if (t2 !== null) addLocation(locations, include, flip ? c2 : c1, flip ? t2 : t1, flip ? c1 : c2, flip ? t1 : t2);\n }\n }\n function addLineIntersection(v1, v2, c1, c2, locations, include) {\n var pt = Line.intersect(v1[0], v1[1], v1[6], v1[7], v2[0], v2[1], v2[6], v2[7]);\n if (pt) addLocation(locations, include, c1, Curve.getTimeOf(v1, pt), c2, Curve.getTimeOf(v2, pt));\n }\n function getCurveIntersections(v1, v2, c1, c2, locations, include) {\n var epsilon = 1e-12, min = Math.min, max = Math.max;\n if (max(v1[0], v1[2], v1[4], v1[6]) + epsilon > min(v2[0], v2[2], v2[4], v2[6]) && min(v1[0], v1[2], v1[4], v1[6]) - epsilon < max(v2[0], v2[2], v2[4], v2[6]) && max(v1[1], v1[3], v1[5], v1[7]) + epsilon > min(v2[1], v2[3], v2[5], v2[7]) && min(v1[1], v1[3], v1[5], v1[7]) - epsilon < max(v2[1], v2[3], v2[5], v2[7])) {\n var overlaps = getOverlaps(v1, v2);\n if (overlaps) for(var i = 0; i < 2; i++){\n var overlap = overlaps[i];\n addLocation(locations, include, c1, overlap[0], c2, overlap[1], true);\n }\n else {\n var straight1 = Curve.isStraight(v1), straight2 = Curve.isStraight(v2), straight = straight1 && straight2, flip = straight1 && !straight2, before = locations.length;\n (straight ? addLineIntersection : straight1 || straight2 ? addCurveLineIntersections : addCurveIntersections)(flip ? v2 : v1, flip ? v1 : v2, flip ? c2 : c1, flip ? c1 : c2, locations, include, flip, 0, 0, 0, 1, 0, 1);\n if (!straight || locations.length === before) for(var i = 0; i < 4; i++){\n var t1 = i >> 1, t2 = i & 1, i1 = t1 * 6, i2 = t2 * 6, p1 = new Point(v1[i1], v1[i1 + 1]), p2 = new Point(v2[i2], v2[i2 + 1]);\n if (p1.isClose(p2, epsilon)) addLocation(locations, include, c1, t1, c2, t2);\n }\n }\n }\n return locations;\n }\n function getSelfIntersection(v1, c1, locations, include) {\n var info = Curve.classify(v1);\n if (info.type === \"loop\") {\n var roots = info.roots;\n addLocation(locations, include, c1, roots[0], c1, roots[1]);\n }\n return locations;\n }\n function getIntersections(curves1, curves2, include, matrix1, matrix2, _returnFirst) {\n var epsilon = 1e-7, self1 = !curves2;\n if (self1) curves2 = curves1;\n var length1 = curves1.length, length2 = curves2.length, values1 = new Array(length1), values2 = self1 ? values1 : new Array(length2), locations = [];\n for(var i = 0; i < length1; i++)values1[i] = curves1[i].getValues(matrix1);\n if (!self1) for(var i = 0; i < length2; i++)values2[i] = curves2[i].getValues(matrix2);\n var boundsCollisions = CollisionDetection.findCurveBoundsCollisions(values1, values2, epsilon);\n for(var index1 = 0; index1 < length1; index1++){\n var curve1 = curves1[index1], v1 = values1[index1];\n if (self1) getSelfIntersection(v1, curve1, locations, include);\n var collisions1 = boundsCollisions[index1];\n if (collisions1) for(var j = 0; j < collisions1.length; j++){\n if (_returnFirst && locations.length) return locations;\n var index2 = collisions1[j];\n if (!self1 || index2 > index1) {\n var curve2 = curves2[index2], v2 = values2[index2];\n getCurveIntersections(v1, v2, curve1, curve2, locations, include);\n }\n }\n }\n return locations;\n }\n function getOverlaps(v1, v2) {\n function getSquaredLineLength(v) {\n var x = v[6] - v[0], y = v[7] - v[1];\n return x * x + y * y;\n }\n var abs = Math.abs, getDistance = Line.getDistance, timeEpsilon = 1e-8, geomEpsilon = 1e-7, straight1 = Curve.isStraight(v1), straight2 = Curve.isStraight(v2), straightBoth = straight1 && straight2, flip = getSquaredLineLength(v1) < getSquaredLineLength(v2), l1 = flip ? v2 : v1, l2 = flip ? v1 : v2, px = l1[0], py = l1[1], vx = l1[6] - px, vy = l1[7] - py;\n if (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n if (!straightBoth && getDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon && getDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) straight1 = straight2 = straightBoth = true;\n } else if (straightBoth) return null;\n if (straight1 ^ straight2) return null;\n var v = [\n v1,\n v2\n ], pairs = [];\n for(var i = 0; i < 4 && pairs.length < 2; i++){\n var i1 = i & 1, i2 = i1 ^ 1, t1 = i >> 1, t2 = Curve.getTimeOf(v[i1], new Point(v[i2][t1 ? 6 : 0], v[i2][t1 ? 7 : 1]));\n if (t2 != null) {\n var pair = i1 ? [\n t1,\n t2\n ] : [\n t2,\n t1\n ];\n if (!pairs.length || abs(pair[0] - pairs[0][0]) > timeEpsilon && abs(pair[1] - pairs[0][1]) > timeEpsilon) pairs.push(pair);\n }\n if (i > 2 && !pairs.length) break;\n }\n if (pairs.length !== 2) pairs = null;\n else if (!straightBoth) {\n var o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]), o2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n if (abs(o2[2] - o1[2]) > geomEpsilon || abs(o2[3] - o1[3]) > geomEpsilon || abs(o2[4] - o1[4]) > geomEpsilon || abs(o2[5] - o1[5]) > geomEpsilon) pairs = null;\n }\n return pairs;\n }\n function getTimesWithTangent(v, tangent) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], normalized = tangent.normalize(), tx = normalized.x, ty = normalized.y, ax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0, ay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0, bx = 6 * x2 - 12 * x1 + 6 * x0, by = 6 * y2 - 12 * y1 + 6 * y0, cx = 3 * x1 - 3 * x0, cy = 3 * y1 - 3 * y0, den = 2 * ax * ty - 2 * ay * tx, times = [];\n if (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n var num = ax * cy - ay * cx, den = ax * by - ay * bx;\n if (den != 0) {\n var t = -num / den;\n if (t >= 0 && t <= 1) times.push(t);\n }\n } else {\n var delta = (bx * bx - 4 * ax * cx) * ty * ty + (-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty + (by * by - 4 * ay * cy) * tx * tx, k = bx * ty - by * tx;\n if (delta >= 0 && den != 0) {\n var d = Math.sqrt(delta), t0 = -(k + d) / den, t1 = (-k + d) / den;\n if (t0 >= 0 && t0 <= 1) times.push(t0);\n if (t1 >= 0 && t1 <= 1) times.push(t1);\n }\n }\n return times;\n }\n return {\n getIntersections: function(curve) {\n var v1 = this.getValues(), v2 = curve && curve !== this && curve.getValues();\n return v2 ? getCurveIntersections(v1, v2, this, curve, []) : getSelfIntersection(v1, this, []);\n },\n statics: {\n getOverlaps: getOverlaps,\n getIntersections: getIntersections,\n getCurveLineIntersections: getCurveLineIntersections,\n getTimesWithTangent: getTimesWithTangent\n }\n };\n });\n var CurveLocation = Base.extend({\n _class: \"CurveLocation\",\n initialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n if (time >= 0.99999999) {\n var next = curve.getNext();\n if (next) {\n time = 0;\n curve = next;\n }\n }\n this._setCurve(curve);\n this._time = time;\n this._point = point || curve.getPointAtTime(time);\n this._overlap = _overlap;\n this._distance = _distance;\n this._intersection = this._next = this._previous = null;\n },\n _setPath: function(path) {\n this._path = path;\n this._version = path ? path._version : 0;\n },\n _setCurve: function(curve) {\n this._setPath(curve._path);\n this._curve = curve;\n this._segment = null;\n this._segment1 = curve._segment1;\n this._segment2 = curve._segment2;\n },\n _setSegment: function(segment) {\n var curve = segment.getCurve();\n if (curve) this._setCurve(curve);\n else {\n this._setPath(segment._path);\n this._segment1 = segment;\n this._segment2 = null;\n }\n this._segment = segment;\n this._time = segment === this._segment1 ? 0 : 1;\n this._point = segment._point.clone();\n },\n getSegment: function() {\n var segment = this._segment;\n if (!segment) {\n var curve = this.getCurve(), time = this.getTime();\n if (time === 0) segment = curve._segment1;\n else if (time === 1) segment = curve._segment2;\n else if (time != null) segment = curve.getPartLength(0, time) < curve.getPartLength(time, 1) ? curve._segment1 : curve._segment2;\n this._segment = segment;\n }\n return segment;\n },\n getCurve: function() {\n var path = this._path, that = this;\n if (path && path._version !== this._version) this._time = this._offset = this._curveOffset = this._curve = null;\n function trySegment(segment) {\n var curve = segment && segment.getCurve();\n if (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n that._setCurve(curve);\n return curve;\n }\n }\n return this._curve || trySegment(this._segment) || trySegment(this._segment1) || trySegment(this._segment2.getPrevious());\n },\n getPath: function() {\n var curve = this.getCurve();\n return curve && curve._path;\n },\n getIndex: function() {\n var curve = this.getCurve();\n return curve && curve.getIndex();\n },\n getTime: function() {\n var curve = this.getCurve(), time = this._time;\n return curve && time == null ? this._time = curve.getTimeOf(this._point) : time;\n },\n getParameter: \"#getTime\",\n getPoint: function() {\n return this._point;\n },\n getOffset: function() {\n var offset = this._offset;\n if (offset == null) {\n offset = 0;\n var path = this.getPath(), index = this.getIndex();\n if (path && index != null) {\n var curves = path.getCurves();\n for(var i = 0; i < index; i++)offset += curves[i].getLength();\n }\n this._offset = offset += this.getCurveOffset();\n }\n return offset;\n },\n getCurveOffset: function() {\n var offset = this._curveOffset;\n if (offset == null) {\n var curve = this.getCurve(), time = this.getTime();\n this._curveOffset = offset = time != null && curve && curve.getPartLength(0, time);\n }\n return offset;\n },\n getIntersection: function() {\n return this._intersection;\n },\n getDistance: function() {\n return this._distance;\n },\n divide: function() {\n var curve = this.getCurve(), res = curve && curve.divideAtTime(this.getTime());\n if (res) this._setSegment(res._segment1);\n return res;\n },\n split: function() {\n var curve = this.getCurve(), path = curve._path, res = curve && curve.splitAtTime(this.getTime());\n if (res) this._setSegment(path.getLastSegment());\n return res;\n },\n equals: function(loc, _ignoreOther) {\n var res = this === loc;\n if (!res && loc instanceof CurveLocation) {\n var c1 = this.getCurve(), c2 = loc.getCurve(), p1 = c1._path, p2 = c2._path;\n if (p1 === p2) {\n var abs = Math.abs, epsilon = 1e-7, diff = abs(this.getOffset() - loc.getOffset()), i1 = !_ignoreOther && this._intersection, i2 = !_ignoreOther && loc._intersection;\n res = (diff < epsilon || p1 && abs(p1.getLength() - diff) < epsilon) && (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n }\n }\n return res;\n },\n toString: function() {\n var parts = [], point = this.getPoint(), f = Formatter.instance;\n if (point) parts.push(\"point: \" + point);\n var index = this.getIndex();\n if (index != null) parts.push(\"index: \" + index);\n var time = this.getTime();\n if (time != null) parts.push(\"time: \" + f.number(time));\n if (this._distance != null) parts.push(\"distance: \" + f.number(this._distance));\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n isTouching: function() {\n var inter = this._intersection;\n if (inter && this.getTangent().isCollinear(inter.getTangent())) {\n var curve1 = this.getCurve(), curve2 = inter.getCurve();\n return !(curve1.isStraight() && curve2.isStraight() && curve1.getLine().intersect(curve2.getLine()));\n }\n return false;\n },\n isCrossing: function() {\n var inter = this._intersection;\n if (!inter) return false;\n var t1 = this.getTime(), t2 = inter.getTime(), tMin = 1e-8, tMax = 1 - tMin, t1Inside = t1 >= tMin && t1 <= tMax, t2Inside = t2 >= tMin && t2 <= tMax;\n if (t1Inside && t2Inside) return !this.isTouching();\n var c2 = this.getCurve(), c1 = c2 && t1 < tMin ? c2.getPrevious() : c2, c4 = inter.getCurve(), c3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n if (t1 > tMax) c2 = c2.getNext();\n if (t2 > tMax) c4 = c4.getNext();\n if (!c1 || !c2 || !c3 || !c4) return false;\n var offsets = [];\n function addOffsets(curve, end) {\n var v = curve.getValues(), roots = Curve.classify(v).roots || Curve.getPeaks(v), count = roots.length, offset = Curve.getLength(v, end && count ? roots[count - 1] : 0, !end && count ? roots[0] : 1);\n offsets.push(count ? offset : offset / 32);\n }\n function isInRange(angle, min, max) {\n return min < max ? angle > min && angle < max : angle > min || angle < max;\n }\n if (!t1Inside) {\n addOffsets(c1, true);\n addOffsets(c2, false);\n }\n if (!t2Inside) {\n addOffsets(c3, true);\n addOffsets(c4, false);\n }\n var pt = this.getPoint(), offset = Math.min.apply(Math, offsets), v2 = t1Inside ? c2.getTangentAtTime(t1) : c2.getPointAt(offset).subtract(pt), v1 = t1Inside ? v2.negate() : c1.getPointAt(-offset).subtract(pt), v4 = t2Inside ? c4.getTangentAtTime(t2) : c4.getPointAt(offset).subtract(pt), v3 = t2Inside ? v4.negate() : c3.getPointAt(-offset).subtract(pt), a1 = v1.getAngle(), a2 = v2.getAngle(), a3 = v3.getAngle(), a4 = v4.getAngle();\n return !!(t1Inside ? isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4) && isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3) : isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2) && isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1));\n },\n hasOverlap: function() {\n return !!this._overlap;\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n var get = name + \"At\";\n this[name] = function() {\n var curve = this.getCurve(), time = this.getTime();\n return time != null && curve && curve[get](time, true);\n };\n }, {\n preserve: true\n }), new function() {\n function insert(locations, loc, merge) {\n var length = locations.length, l = 0, r = length - 1;\n function search(index, dir) {\n for(var i = index + dir; i >= -1 && i <= length; i += dir){\n var loc2 = locations[(i % length + length) % length];\n if (!loc.getPoint().isClose(loc2.getPoint(), 1e-7)) break;\n if (loc.equals(loc2)) return loc2;\n }\n return null;\n }\n while(l <= r){\n var m = l + r >>> 1, loc2 = locations[m], found;\n if (merge && (found = loc.equals(loc2) ? loc2 : search(m, -1) || search(m, 1))) {\n if (loc._overlap) found._overlap = found._intersection._overlap = true;\n return found;\n }\n var path1 = loc.getPath(), path2 = loc2.getPath(), diff = path1 !== path2 ? path1._id - path2._id : loc.getIndex() + loc.getTime() - (loc2.getIndex() + loc2.getTime());\n if (diff < 0) r = m - 1;\n else l = m + 1;\n }\n locations.splice(l, 0, loc);\n return loc;\n }\n return {\n statics: {\n insert: insert,\n expand: function(locations) {\n var expanded = locations.slice();\n for(var i = locations.length - 1; i >= 0; i--)insert(expanded, locations[i]._intersection, false);\n return expanded;\n }\n }\n };\n });\n var PathItem = Item.extend({\n _class: \"PathItem\",\n _selectBounds: false,\n _canScaleStroke: true,\n beans: true,\n initialize: function PathItem() {},\n statics: {\n create: function(arg) {\n var data, segments, compound;\n if (Base.isPlainObject(arg)) {\n segments = arg.segments;\n data = arg.pathData;\n } else if (Array.isArray(arg)) segments = arg;\n else if (typeof arg === \"string\") data = arg;\n if (segments) {\n var first = segments[0];\n compound = first && Array.isArray(first[0]);\n } else if (data) compound = (data.match(/m/gi) || []).length > 1 || /z\\s*\\S+/i.test(data);\n var ctor = compound ? CompoundPath : Path;\n return new ctor(arg);\n }\n },\n _asPathItem: function() {\n return this;\n },\n isClockwise: function() {\n return this.getArea() >= 0;\n },\n setClockwise: function(clockwise) {\n if (this.isClockwise() != (clockwise = !!clockwise)) this.reverse();\n },\n setPathData: function(data) {\n var parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig), coords, relative = false, previous, control, current = new Point(), start = new Point();\n function getCoord(index, coord) {\n var val = +coords[index];\n if (relative) val += current[coord];\n return val;\n }\n function getPoint(index) {\n return new Point(getCoord(index, \"x\"), getCoord(index + 1, \"y\"));\n }\n this.clear();\n for(var i = 0, l = parts && parts.length; i < l; i++){\n var part = parts[i], command = part[0], lower = command.toLowerCase();\n coords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n var length = coords && coords.length;\n relative = command === lower;\n if (previous === \"z\" && !/[mz]/.test(lower)) this.moveTo(current);\n switch(lower){\n case \"m\":\n case \"l\":\n var move = lower === \"m\";\n for(var j = 0; j < length; j += 2){\n this[move ? \"moveTo\" : \"lineTo\"](current = getPoint(j));\n if (move) {\n start = current;\n move = false;\n }\n }\n control = current;\n break;\n case \"h\":\n case \"v\":\n var coord = lower === \"h\" ? \"x\" : \"y\";\n current = current.clone();\n for(var j = 0; j < length; j++){\n current[coord] = getCoord(j, coord);\n this.lineTo(current);\n }\n control = current;\n break;\n case \"c\":\n for(var j = 0; j < length; j += 6)this.cubicCurveTo(getPoint(j), control = getPoint(j + 2), current = getPoint(j + 4));\n break;\n case \"s\":\n for(var j = 0; j < length; j += 4){\n this.cubicCurveTo(/[cs]/.test(previous) ? current.multiply(2).subtract(control) : current, control = getPoint(j), current = getPoint(j + 2));\n previous = lower;\n }\n break;\n case \"q\":\n for(var j = 0; j < length; j += 4)this.quadraticCurveTo(control = getPoint(j), current = getPoint(j + 2));\n break;\n case \"t\":\n for(var j = 0; j < length; j += 2){\n this.quadraticCurveTo(control = /[qt]/.test(previous) ? current.multiply(2).subtract(control) : current, current = getPoint(j));\n previous = lower;\n }\n break;\n case \"a\":\n for(var j = 0; j < length; j += 7)this.arcTo(current = getPoint(j + 5), new Size(+coords[j], +coords[j + 1]), +coords[j + 2], +coords[j + 4], +coords[j + 3]);\n break;\n case \"z\":\n this.closePath(1e-12);\n current = start;\n break;\n }\n previous = lower;\n }\n },\n _canComposite: function() {\n return !(this.hasFill() && this.hasStroke());\n },\n _contains: function(point) {\n var winding = point.isInside(this.getBounds({\n internal: true,\n handle: true\n })) ? this._getWinding(point) : {};\n return winding.onPath || !!(this.getFillRule() === \"evenodd\" ? winding.windingL & 1 || winding.windingR & 1 : winding.winding);\n },\n getIntersections: function(path, include, _matrix, _returnFirst) {\n var self1 = this === path || !path, matrix1 = this._matrix._orNullIfIdentity(), matrix2 = self1 ? matrix1 : (_matrix || path._matrix)._orNullIfIdentity();\n return self1 || this.getBounds(matrix1).intersects(path.getBounds(matrix2), 1e-12) ? Curve.getIntersections(this.getCurves(), !self1 && path.getCurves(), include, matrix1, matrix2, _returnFirst) : [];\n },\n getCrossings: function(path) {\n return this.getIntersections(path, function(inter) {\n return inter.isCrossing();\n });\n },\n getNearestLocation: function() {\n var point = Point.read(arguments), curves = this.getCurves(), minDist = Infinity, minLoc = null;\n for(var i = 0, l = curves.length; i < l; i++){\n var loc = curves[i].getNearestLocation(point);\n if (loc._distance < minDist) {\n minDist = loc._distance;\n minLoc = loc;\n }\n }\n return minLoc;\n },\n getNearestPoint: function() {\n var loc = this.getNearestLocation.apply(this, arguments);\n return loc ? loc.getPoint() : loc;\n },\n interpolate: function(from, to, factor) {\n var isPath = !this._children, name = isPath ? \"_segments\" : \"_children\", itemsFrom = from[name], itemsTo = to[name], items = this[name];\n if (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) throw new Error(\"Invalid operands in interpolate() call: \" + from + \", \" + to);\n var current = items.length, length = itemsTo.length;\n if (current < length) {\n var ctor = isPath ? Segment : Path;\n for(var i = current; i < length; i++)this.add(new ctor());\n } else if (current > length) this[isPath ? \"removeSegments\" : \"removeChildren\"](length, current);\n for(var i = 0; i < length; i++)items[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n if (isPath) {\n this.setClosed(from._closed);\n this._changed(9);\n }\n },\n compare: function(path) {\n var ok = false;\n if (path) {\n var paths1 = this._children || [\n this\n ], paths2 = path._children ? path._children.slice() : [\n path\n ], length1 = paths1.length, length2 = paths2.length, matched = [], count = 0;\n ok = true;\n var boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n for(var i1 = length1 - 1; i1 >= 0 && ok; i1--){\n var path1 = paths1[i1];\n ok = false;\n var pathBoundsOverlaps = boundsOverlaps[i1];\n if (pathBoundsOverlaps) {\n for(var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--)if (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n if (!matched[pathBoundsOverlaps[i2]]) {\n matched[pathBoundsOverlaps[i2]] = true;\n count++;\n }\n ok = true;\n }\n }\n }\n ok = ok && count === length2;\n }\n return ok;\n }\n });\n var Path = PathItem.extend({\n _class: \"Path\",\n _serializeFields: {\n segments: [],\n closed: false\n },\n initialize: function Path(arg) {\n this._closed = false;\n this._segments = [];\n this._version = 0;\n var args = arguments, segments = Array.isArray(arg) ? typeof arg[0] === \"object\" ? arg : args : arg && arg.size === undefined && (arg.x !== undefined || arg.point !== undefined) ? args : null;\n if (segments && segments.length > 0) this.setSegments(segments);\n else {\n this._curves = undefined;\n this._segmentSelection = 0;\n if (!segments && typeof arg === \"string\") {\n this.setPathData(arg);\n arg = null;\n }\n }\n this._initialize(!segments && arg);\n },\n _equals: function(item) {\n return this._closed === item._closed && Base.equals(this._segments, item._segments);\n },\n copyContent: function(source) {\n this.setSegments(source._segments);\n this._closed = source._closed;\n },\n _changed: function _changed(flags) {\n _changed.base.call(this, flags);\n if (flags & 8) {\n this._length = this._area = undefined;\n if (flags & 32) this._version++;\n else if (this._curves) for(var i = 0, l = this._curves.length; i < l; i++)this._curves[i]._changed();\n } else if (flags & 64) this._bounds = undefined;\n },\n getStyle: function() {\n var parent = this._parent;\n return (parent instanceof CompoundPath ? parent : this)._style;\n },\n getSegments: function() {\n return this._segments;\n },\n setSegments: function(segments) {\n var fullySelected = this.isFullySelected(), length = segments && segments.length;\n this._segments.length = 0;\n this._segmentSelection = 0;\n this._curves = undefined;\n if (length) {\n var last = segments[length - 1];\n if (typeof last === \"boolean\") {\n this.setClosed(last);\n length--;\n }\n this._add(Segment.readList(segments, 0, {}, length));\n }\n if (fullySelected) this.setFullySelected(true);\n },\n getFirstSegment: function() {\n return this._segments[0];\n },\n getLastSegment: function() {\n return this._segments[this._segments.length - 1];\n },\n getCurves: function() {\n var curves = this._curves, segments = this._segments;\n if (!curves) {\n var length = this._countCurves();\n curves = this._curves = new Array(length);\n for(var i = 0; i < length; i++)curves[i] = new Curve(this, segments[i], segments[i + 1] || segments[0]);\n }\n return curves;\n },\n getFirstCurve: function() {\n return this.getCurves()[0];\n },\n getLastCurve: function() {\n var curves = this.getCurves();\n return curves[curves.length - 1];\n },\n isClosed: function() {\n return this._closed;\n },\n setClosed: function(closed) {\n if (this._closed != (closed = !!closed)) {\n this._closed = closed;\n if (this._curves) {\n var length = this._curves.length = this._countCurves();\n if (closed) this._curves[length - 1] = new Curve(this, this._segments[length - 1], this._segments[0]);\n }\n this._changed(41);\n }\n }\n }, {\n beans: true,\n getPathData: function(_matrix, _precision) {\n var segments = this._segments, length = segments.length, f = new Formatter(_precision), coords = new Array(6), first = true, curX, curY, prevX, prevY, inX, inY, outX, outY, parts = [];\n function addSegment(segment, skipLine) {\n segment._transformCoordinates(_matrix, coords);\n curX = coords[0];\n curY = coords[1];\n if (first) {\n parts.push(\"M\" + f.pair(curX, curY));\n first = false;\n } else {\n inX = coords[2];\n inY = coords[3];\n if (inX === curX && inY === curY && outX === prevX && outY === prevY) {\n if (!skipLine) {\n var dx = curX - prevX, dy = curY - prevY;\n parts.push(dx === 0 ? \"v\" + f.number(dy) : dy === 0 ? \"h\" + f.number(dx) : \"l\" + f.pair(dx, dy));\n }\n } else parts.push(\"c\" + f.pair(outX - prevX, outY - prevY) + \" \" + f.pair(inX - prevX, inY - prevY) + \" \" + f.pair(curX - prevX, curY - prevY));\n }\n prevX = curX;\n prevY = curY;\n outX = coords[4];\n outY = coords[5];\n }\n if (!length) return \"\";\n for(var i = 0; i < length; i++)addSegment(segments[i]);\n if (this._closed && length > 0) {\n addSegment(segments[0], true);\n parts.push(\"z\");\n }\n return parts.join(\"\");\n },\n isEmpty: function() {\n return !this._segments.length;\n },\n _transformContent: function(matrix) {\n var segments = this._segments, coords = new Array(6);\n for(var i = 0, l = segments.length; i < l; i++)segments[i]._transformCoordinates(matrix, coords, true);\n return true;\n },\n _add: function(segs, index) {\n var segments = this._segments, curves = this._curves, amount = segs.length, append = index == null, index = append ? segments.length : index;\n for(var i = 0; i < amount; i++){\n var segment = segs[i];\n if (segment._path) segment = segs[i] = segment.clone();\n segment._path = this;\n segment._index = index + i;\n if (segment._selection) this._updateSelection(segment, 0, segment._selection);\n }\n if (append) Base.push(segments, segs);\n else {\n segments.splice.apply(segments, [\n index,\n 0\n ].concat(segs));\n for(var i = index + amount, l = segments.length; i < l; i++)segments[i]._index = i;\n }\n if (curves) {\n var total = this._countCurves(), start = index > 0 && index + amount - 1 === total ? index - 1 : index, insert = start, end = Math.min(start + amount, total);\n if (segs._curves) {\n curves.splice.apply(curves, [\n start,\n 0\n ].concat(segs._curves));\n insert += segs._curves.length;\n }\n for(var i = insert; i < end; i++)curves.splice(i, 0, new Curve(this, null, null));\n this._adjustCurves(start, end);\n }\n this._changed(41);\n return segs;\n },\n _adjustCurves: function(start, end) {\n var segments = this._segments, curves = this._curves, curve;\n for(var i = start; i < end; i++){\n curve = curves[i];\n curve._path = this;\n curve._segment1 = segments[i];\n curve._segment2 = segments[i + 1] || segments[0];\n curve._changed();\n }\n if (curve = curves[this._closed && !start ? segments.length - 1 : start - 1]) {\n curve._segment2 = segments[start] || segments[0];\n curve._changed();\n }\n if (curve = curves[end]) {\n curve._segment1 = segments[end];\n curve._changed();\n }\n },\n _countCurves: function() {\n var length = this._segments.length;\n return !this._closed && length > 0 ? length - 1 : length;\n },\n add: function(segment1) {\n var args = arguments;\n return args.length > 1 && typeof segment1 !== \"number\" ? this._add(Segment.readList(args)) : this._add([\n Segment.read(args)\n ])[0];\n },\n insert: function(index, segment1) {\n var args = arguments;\n return args.length > 2 && typeof segment1 !== \"number\" ? this._add(Segment.readList(args, 1), index) : this._add([\n Segment.read(args, 1)\n ], index)[0];\n },\n addSegment: function() {\n return this._add([\n Segment.read(arguments)\n ])[0];\n },\n insertSegment: function(index) {\n return this._add([\n Segment.read(arguments, 1)\n ], index)[0];\n },\n addSegments: function(segments) {\n return this._add(Segment.readList(segments));\n },\n insertSegments: function(index, segments) {\n return this._add(Segment.readList(segments), index);\n },\n removeSegment: function(index) {\n return this.removeSegments(index, index + 1)[0] || null;\n },\n removeSegments: function(start, end, _includeCurves) {\n start = start || 0;\n end = Base.pick(end, this._segments.length);\n var segments = this._segments, curves = this._curves, count = segments.length, removed = segments.splice(start, end - start), amount = removed.length;\n if (!amount) return removed;\n for(var i = 0; i < amount; i++){\n var segment = removed[i];\n if (segment._selection) this._updateSelection(segment, segment._selection, 0);\n segment._index = segment._path = null;\n }\n for(var i = start, l = segments.length; i < l; i++)segments[i]._index = i;\n if (curves) {\n var index = start > 0 && end === count + (this._closed ? 1 : 0) ? start - 1 : start, curves = curves.splice(index, amount);\n for(var i = curves.length - 1; i >= 0; i--)curves[i]._path = null;\n if (_includeCurves) removed._curves = curves.slice(1);\n this._adjustCurves(index, index);\n }\n this._changed(41);\n return removed;\n },\n clear: \"#removeSegments\",\n hasHandles: function() {\n var segments = this._segments;\n for(var i = 0, l = segments.length; i < l; i++){\n if (segments[i].hasHandles()) return true;\n }\n return false;\n },\n clearHandles: function() {\n var segments = this._segments;\n for(var i = 0, l = segments.length; i < l; i++)segments[i].clearHandles();\n },\n getLength: function() {\n if (this._length == null) {\n var curves = this.getCurves(), length = 0;\n for(var i = 0, l = curves.length; i < l; i++)length += curves[i].getLength();\n this._length = length;\n }\n return this._length;\n },\n getArea: function() {\n var area = this._area;\n if (area == null) {\n var segments = this._segments, closed = this._closed;\n area = 0;\n for(var i = 0, l = segments.length; i < l; i++){\n var last = i + 1 === l;\n area += Curve.getArea(Curve.getValues(segments[i], segments[last ? 0 : i + 1], null, last && !closed));\n }\n this._area = area;\n }\n return area;\n },\n isFullySelected: function() {\n var length = this._segments.length;\n return this.isSelected() && length > 0 && this._segmentSelection === length * 7;\n },\n setFullySelected: function(selected) {\n if (selected) this._selectSegments(true);\n this.setSelected(selected);\n },\n setSelection: function setSelection(selection) {\n if (!(selection & 1)) this._selectSegments(false);\n setSelection.base.call(this, selection);\n },\n _selectSegments: function(selected) {\n var segments = this._segments, length = segments.length, selection = selected ? 7 : 0;\n this._segmentSelection = selection * length;\n for(var i = 0; i < length; i++)segments[i]._selection = selection;\n },\n _updateSelection: function(segment, oldSelection, newSelection) {\n segment._selection = newSelection;\n var selection = this._segmentSelection += newSelection - oldSelection;\n if (selection > 0) this.setSelected(true);\n },\n divideAt: function(location) {\n var loc = this.getLocationAt(location), curve;\n return loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset())) ? curve._segment1 : null;\n },\n splitAt: function(location) {\n var loc = this.getLocationAt(location), index = loc && loc.index, time = loc && loc.time, tMin = 1e-8, tMax = 1 - tMin;\n if (time > tMax) {\n index++;\n time = 0;\n }\n var curves = this.getCurves();\n if (index >= 0 && index < curves.length) {\n if (time >= tMin) curves[index++].divideAtTime(time);\n var segs = this.removeSegments(index, this._segments.length, true), path;\n if (this._closed) {\n this.setClosed(false);\n path = this;\n } else {\n path = new Path(Item.NO_INSERT);\n path.insertAbove(this);\n path.copyAttributes(this);\n }\n path._add(segs, 0);\n this.addSegment(segs[0]);\n return path;\n }\n return null;\n },\n split: function(index, time) {\n var curve, location = time === undefined ? index : (curve = this.getCurves()[index]) && curve.getLocationAtTime(time);\n return location != null ? this.splitAt(location) : null;\n },\n join: function(path, tolerance) {\n var epsilon = tolerance || 0;\n if (path && path !== this) {\n var segments = path._segments, last1 = this.getLastSegment(), last2 = path.getLastSegment();\n if (!last2) return this;\n if (last1 && last1._point.isClose(last2._point, epsilon)) path.reverse();\n var first2 = path.getFirstSegment();\n if (last1 && last1._point.isClose(first2._point, epsilon)) {\n last1.setHandleOut(first2._handleOut);\n this._add(segments.slice(1));\n } else {\n var first1 = this.getFirstSegment();\n if (first1 && first1._point.isClose(first2._point, epsilon)) path.reverse();\n last2 = path.getLastSegment();\n if (first1 && first1._point.isClose(last2._point, epsilon)) {\n first1.setHandleIn(last2._handleIn);\n this._add(segments.slice(0, segments.length - 1), 0);\n } else this._add(segments.slice());\n }\n if (path._closed) this._add([\n segments[0]\n ]);\n path.remove();\n }\n var first = this.getFirstSegment(), last = this.getLastSegment();\n if (first !== last && first._point.isClose(last._point, epsilon)) {\n first.setHandleIn(last._handleIn);\n last.remove();\n this.setClosed(true);\n }\n return this;\n },\n reduce: function(options) {\n var curves = this.getCurves(), simplify = options && options.simplify, tolerance = simplify ? 1e-7 : 0;\n for(var i = curves.length - 1; i >= 0; i--){\n var curve = curves[i];\n if (!curve.hasHandles() && (!curve.hasLength(tolerance) || simplify && curve.isCollinear(curve.getNext()))) curve.remove();\n }\n return this;\n },\n reverse: function() {\n this._segments.reverse();\n for(var i = 0, l = this._segments.length; i < l; i++){\n var segment = this._segments[i];\n var handleIn = segment._handleIn;\n segment._handleIn = segment._handleOut;\n segment._handleOut = handleIn;\n segment._index = i;\n }\n this._curves = null;\n this._changed(9);\n },\n flatten: function(flatness) {\n var flattener = new PathFlattener(this, flatness || 0.25, 256, true), parts = flattener.parts, length = parts.length, segments = [];\n for(var i = 0; i < length; i++)segments.push(new Segment(parts[i].curve.slice(0, 2)));\n if (!this._closed && length > 0) segments.push(new Segment(parts[length - 1].curve.slice(6)));\n this.setSegments(segments);\n },\n simplify: function(tolerance) {\n var segments = new PathFitter(this).fit(tolerance || 2.5);\n if (segments) this.setSegments(segments);\n return !!segments;\n },\n smooth: function(options) {\n var that = this, opts = options || {}, type = opts.type || \"asymmetric\", segments = this._segments, length = segments.length, closed = this._closed;\n function getIndex(value, _default) {\n var index = value && value.index;\n if (index != null) {\n var path = value.path;\n if (path && path !== that) throw new Error(value._class + \" \" + index + \" of \" + path + \" is not part of \" + that);\n if (_default && value instanceof Curve) index++;\n } else index = typeof value === \"number\" ? value : _default;\n return Math.min(index < 0 && closed ? index % length : index < 0 ? index + length : index, length - 1);\n }\n var loop = closed && opts.from === undefined && opts.to === undefined, from = getIndex(opts.from, 0), to = getIndex(opts.to, length - 1);\n if (from > to) {\n if (closed) from -= length;\n else {\n var tmp = from;\n from = to;\n to = tmp;\n }\n }\n if (/^(?:asymmetric|continuous)$/.test(type)) {\n var asymmetric = type === \"asymmetric\", min = Math.min, amount = to - from + 1, n = amount - 1, padding = loop ? min(amount, 4) : 1, paddingLeft = padding, paddingRight = padding, knots = [];\n if (!closed) {\n paddingLeft = min(1, from);\n paddingRight = min(1, length - to - 1);\n }\n n += paddingLeft + paddingRight;\n if (n <= 1) return;\n for(var i = 0, j = from - paddingLeft; i <= n; i++, j++)knots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n var x = knots[0]._x + 2 * knots[1]._x, y = knots[0]._y + 2 * knots[1]._y, f = 2, n_1 = n - 1, rx = [\n x\n ], ry = [\n y\n ], rf = [\n f\n ], px = [], py = [];\n for(var i = 1; i < n; i++){\n var internal = i < n_1, a = internal ? 1 : asymmetric ? 1 : 2, b = internal ? 4 : asymmetric ? 2 : 7, u = internal ? 4 : asymmetric ? 3 : 8, v = internal ? 2 : asymmetric ? 0 : 1, m = a / f;\n f = rf[i] = b - m;\n x = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n y = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n }\n px[n_1] = rx[n_1] / rf[n_1];\n py[n_1] = ry[n_1] / rf[n_1];\n for(var i = n - 2; i >= 0; i--){\n px[i] = (rx[i] - px[i + 1]) / rf[i];\n py[i] = (ry[i] - py[i + 1]) / rf[i];\n }\n px[n] = (3 * knots[n]._x - px[n_1]) / 2;\n py[n] = (3 * knots[n]._y - py[n_1]) / 2;\n for(var i = paddingLeft, max = n - paddingRight, j = from; i <= max; i++, j++){\n var segment = segments[j < 0 ? j + length : j], pt = segment._point, hx = px[i] - pt._x, hy = py[i] - pt._y;\n if (loop || i < max) segment.setHandleOut(hx, hy);\n if (loop || i > paddingLeft) segment.setHandleIn(-hx, -hy);\n }\n } else for(var i = from; i <= to; i++)segments[i < 0 ? i + length : i].smooth(opts, !loop && i === from, !loop && i === to);\n },\n toShape: function(insert) {\n if (!this._closed) return null;\n var segments = this._segments, type, size, radius, topCenter;\n function isCollinear(i, j) {\n var seg1 = segments[i], seg2 = seg1.getNext(), seg3 = segments[j], seg4 = seg3.getNext();\n return seg1._handleOut.isZero() && seg2._handleIn.isZero() && seg3._handleOut.isZero() && seg4._handleIn.isZero() && seg2._point.subtract(seg1._point).isCollinear(seg4._point.subtract(seg3._point));\n }\n function isOrthogonal(i) {\n var seg2 = segments[i], seg1 = seg2.getPrevious(), seg3 = seg2.getNext();\n return seg1._handleOut.isZero() && seg2._handleIn.isZero() && seg2._handleOut.isZero() && seg3._handleIn.isZero() && seg2._point.subtract(seg1._point).isOrthogonal(seg3._point.subtract(seg2._point));\n }\n function isArc(i) {\n var seg1 = segments[i], seg2 = seg1.getNext(), handle1 = seg1._handleOut, handle2 = seg2._handleIn, kappa = 0.5522847498307936;\n if (handle1.isOrthogonal(handle2)) {\n var pt1 = seg1._point, pt2 = seg2._point, corner = new Line(pt1, handle1, true).intersect(new Line(pt2, handle2, true), true);\n return corner && Numerical.isZero(handle1.getLength() / corner.subtract(pt1).getLength() - kappa) && Numerical.isZero(handle2.getLength() / corner.subtract(pt2).getLength() - kappa);\n }\n return false;\n }\n function getDistance(i, j) {\n return segments[i]._point.getDistance(segments[j]._point);\n }\n if (!this.hasHandles() && segments.length === 4 && isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n type = Shape.Rectangle;\n size = new Size(getDistance(0, 3), getDistance(0, 1));\n topCenter = segments[1]._point.add(segments[2]._point).divide(2);\n } else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4) && isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n type = Shape.Rectangle;\n size = new Size(getDistance(1, 6), getDistance(0, 3));\n radius = size.subtract(new Size(getDistance(0, 7), getDistance(1, 2))).divide(2);\n topCenter = segments[3]._point.add(segments[4]._point).divide(2);\n } else if (segments.length === 4 && isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n if (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n type = Shape.Circle;\n radius = getDistance(0, 2) / 2;\n } else {\n type = Shape.Ellipse;\n radius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n }\n topCenter = segments[1]._point;\n }\n if (type) {\n var center = this.getPosition(true), shape = new type({\n center: center,\n size: size,\n radius: radius,\n insert: false\n });\n shape.copyAttributes(this, true);\n shape._matrix.prepend(this._matrix);\n shape.rotate(topCenter.subtract(center).getAngle() + 90);\n if (insert === undefined || insert) shape.insertAbove(this);\n return shape;\n }\n return null;\n },\n toPath: \"#clone\",\n compare: function compare(path) {\n if (!path || path instanceof CompoundPath) return compare.base.call(this, path);\n var curves1 = this.getCurves(), curves2 = path.getCurves(), length1 = curves1.length, length2 = curves2.length;\n if (!length1 || !length2) return length1 == length2;\n var v1 = curves1[0].getValues(), values2 = [], pos1 = 0, pos2, end1 = 0, end2;\n for(var i = 0; i < length2; i++){\n var v2 = curves2[i].getValues();\n values2.push(v2);\n var overlaps = Curve.getOverlaps(v1, v2);\n if (overlaps) {\n pos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n end2 = overlaps[0][1];\n break;\n }\n }\n var abs = Math.abs, epsilon = 1e-8, v2 = values2[pos2], start2;\n while(v1 && v2){\n var overlaps = Curve.getOverlaps(v1, v2);\n if (overlaps) {\n var t1 = overlaps[0][0];\n if (abs(t1 - end1) < epsilon) {\n end1 = overlaps[1][0];\n if (end1 === 1) {\n v1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n end1 = 0;\n }\n var t2 = overlaps[0][1];\n if (abs(t2 - end2) < epsilon) {\n if (!start2) start2 = [\n pos2,\n t2\n ];\n end2 = overlaps[1][1];\n if (end2 === 1) {\n if (++pos2 >= length2) pos2 = 0;\n v2 = values2[pos2] || curves2[pos2].getValues();\n end2 = 0;\n }\n if (!v1) return start2[0] === pos2 && start2[1] === end2;\n continue;\n }\n }\n }\n break;\n }\n return false;\n },\n _hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n var that = this, style = this.getStyle(), segments = this._segments, numSegments = segments.length, closed = this._closed, tolerancePadding = options._tolerancePadding, strokePadding = tolerancePadding, join, cap, miterLimit, area, loc, res, hitStroke = options.stroke && style.hasStroke(), hitFill = options.fill && style.hasFill(), hitCurves = options.curves, strokeRadius = hitStroke ? style.getStrokeWidth() / 2 : hitFill && options.tolerance > 0 || hitCurves ? 0 : null;\n if (strokeRadius !== null) {\n if (strokeRadius > 0) {\n join = style.getStrokeJoin();\n cap = style.getStrokeCap();\n miterLimit = style.getMiterLimit();\n strokePadding = strokePadding.add(Path._getStrokePadding(strokeRadius, strokeMatrix));\n } else join = cap = \"round\";\n }\n function isCloseEnough(pt, padding) {\n return point.subtract(pt).divide(padding).length <= 1;\n }\n function checkSegmentPoint(seg, pt, name) {\n if (!options.selected || pt.isSelected()) {\n var anchor = seg._point;\n if (pt !== anchor) pt = pt.add(anchor);\n if (isCloseEnough(pt, strokePadding)) return new HitResult(name, that, {\n segment: seg,\n point: pt\n });\n }\n }\n function checkSegmentPoints(seg, ends) {\n return (ends || options.segments) && checkSegmentPoint(seg, seg._point, \"segment\") || !ends && options.handles && (checkSegmentPoint(seg, seg._handleIn, \"handle-in\") || checkSegmentPoint(seg, seg._handleOut, \"handle-out\"));\n }\n function addToArea(point) {\n area.add(point);\n }\n function checkSegmentStroke(segment) {\n var isJoin = closed || segment._index > 0 && segment._index < numSegments - 1;\n if ((isJoin ? join : cap) === \"round\") return isCloseEnough(segment._point, strokePadding);\n else {\n area = new Path({\n internal: true,\n closed: true\n });\n if (isJoin) {\n if (!segment.isSmooth()) Path._addBevelJoin(segment, join, strokeRadius, miterLimit, null, strokeMatrix, addToArea, true);\n } else if (cap === \"square\") Path._addSquareCap(segment, cap, strokeRadius, null, strokeMatrix, addToArea, true);\n if (!area.isEmpty()) {\n var loc;\n return area.contains(point) || (loc = area.getNearestLocation(point)) && isCloseEnough(loc.getPoint(), tolerancePadding);\n }\n }\n }\n if (options.ends && !options.segments && !closed) {\n if (res = checkSegmentPoints(segments[0], true) || checkSegmentPoints(segments[numSegments - 1], true)) return res;\n } else if (options.segments || options.handles) {\n for(var i = 0; i < numSegments; i++)if (res = checkSegmentPoints(segments[i])) return res;\n }\n if (strokeRadius !== null) {\n loc = this.getNearestLocation(point);\n if (loc) {\n var time = loc.getTime();\n if (time === 0 || time === 1 && numSegments > 1) {\n if (!checkSegmentStroke(loc.getSegment())) loc = null;\n } else if (!isCloseEnough(loc.getPoint(), strokePadding)) loc = null;\n }\n if (!loc && join === \"miter\" && numSegments > 1) for(var i = 0; i < numSegments; i++){\n var segment = segments[i];\n if (point.getDistance(segment._point) <= miterLimit * strokeRadius && checkSegmentStroke(segment)) {\n loc = segment.getLocation();\n break;\n }\n }\n }\n return !loc && hitFill && this._contains(point) || loc && !hitStroke && !hitCurves ? new HitResult(\"fill\", this) : loc ? new HitResult(hitStroke ? \"stroke\" : \"curve\", this, {\n location: loc,\n point: loc.getPoint()\n }) : null;\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n this[name + \"At\"] = function(offset) {\n var loc = this.getLocationAt(offset);\n return loc && loc[name]();\n };\n }, {\n beans: false,\n getLocationOf: function() {\n var point = Point.read(arguments), curves = this.getCurves();\n for(var i = 0, l = curves.length; i < l; i++){\n var loc = curves[i].getLocationOf(point);\n if (loc) return loc;\n }\n return null;\n },\n getOffsetOf: function() {\n var loc = this.getLocationOf.apply(this, arguments);\n return loc ? loc.getOffset() : null;\n },\n getLocationAt: function(offset) {\n if (typeof offset === \"number\") {\n var curves = this.getCurves(), length = 0;\n for(var i = 0, l = curves.length; i < l; i++){\n var start = length, curve = curves[i];\n length += curve.getLength();\n if (length > offset) return curve.getLocationAt(offset - start);\n }\n if (curves.length > 0 && offset <= this.getLength()) return new CurveLocation(curves[curves.length - 1], 1);\n } else if (offset && offset.getPath && offset.getPath() === this) return offset;\n return null;\n },\n getOffsetsWithTangent: function() {\n var tangent = Point.read(arguments);\n if (tangent.isZero()) return [];\n var offsets = [];\n var curveStart = 0;\n var curves = this.getCurves();\n for(var i = 0, l = curves.length; i < l; i++){\n var curve = curves[i];\n var curveTimes = curve.getTimesWithTangent(tangent);\n for(var j = 0, m = curveTimes.length; j < m; j++){\n var offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n if (offsets.indexOf(offset) < 0) offsets.push(offset);\n }\n curveStart += curve.length;\n }\n return offsets;\n }\n }), new function() {\n function drawHandles(ctx, segments, matrix, size) {\n if (size <= 0) return;\n var half = size / 2, miniSize = size - 2, miniHalf = half - 1, coords = new Array(6), pX, pY;\n function drawHandle(index) {\n var hX = coords[index], hY = coords[index + 1];\n if (pX != hX || pY != hY) {\n ctx.beginPath();\n ctx.moveTo(pX, pY);\n ctx.lineTo(hX, hY);\n ctx.stroke();\n ctx.beginPath();\n ctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n ctx.fill();\n }\n }\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i], selection = segment._selection;\n segment._transformCoordinates(matrix, coords);\n pX = coords[0];\n pY = coords[1];\n if (selection & 2) drawHandle(2);\n if (selection & 4) drawHandle(4);\n ctx.fillRect(pX - half, pY - half, size, size);\n if (miniSize > 0 && !(selection & 1)) {\n var fillStyle = ctx.fillStyle;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n ctx.fillStyle = fillStyle;\n }\n }\n }\n function drawSegments(ctx, path, matrix) {\n var segments = path._segments, length = segments.length, coords = new Array(6), first = true, curX, curY, prevX, prevY, inX, inY, outX, outY;\n function drawSegment(segment) {\n if (matrix) {\n segment._transformCoordinates(matrix, coords);\n curX = coords[0];\n curY = coords[1];\n } else {\n var point = segment._point;\n curX = point._x;\n curY = point._y;\n }\n if (first) {\n ctx.moveTo(curX, curY);\n first = false;\n } else {\n if (matrix) {\n inX = coords[2];\n inY = coords[3];\n } else {\n var handle = segment._handleIn;\n inX = curX + handle._x;\n inY = curY + handle._y;\n }\n if (inX === curX && inY === curY && outX === prevX && outY === prevY) ctx.lineTo(curX, curY);\n else ctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n }\n prevX = curX;\n prevY = curY;\n if (matrix) {\n outX = coords[4];\n outY = coords[5];\n } else {\n var handle = segment._handleOut;\n outX = prevX + handle._x;\n outY = prevY + handle._y;\n }\n }\n for(var i = 0; i < length; i++)drawSegment(segments[i]);\n if (path._closed && length > 0) drawSegment(segments[0]);\n }\n return {\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var dontStart = param.dontStart, dontPaint = param.dontFinish || param.clip, style = this.getStyle(), hasFill = style.hasFill(), hasStroke = style.hasStroke(), dashArray = style.getDashArray(), dashLength = !paper.support.nativeDash && hasStroke && dashArray && dashArray.length;\n if (!dontStart) ctx.beginPath();\n if (hasFill || hasStroke && !dashLength || dontPaint) {\n drawSegments(ctx, this, strokeMatrix);\n if (this._closed) ctx.closePath();\n }\n function getOffset(i) {\n return dashArray[(i % dashLength + dashLength) % dashLength];\n }\n if (!dontPaint && (hasFill || hasStroke)) {\n this._setStyles(ctx, param, viewMatrix);\n if (hasFill) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) {\n if (dashLength) {\n if (!dontStart) ctx.beginPath();\n var flattener = new PathFlattener(this, 0.25, 32, false, strokeMatrix), length = flattener.length, from = -style.getDashOffset(), to, i = 0;\n while(from > 0)from -= getOffset(i--) + getOffset(i--);\n while(from < length){\n to = from + getOffset(i++);\n if (from > 0 || to > 0) flattener.drawPart(ctx, Math.max(from, 0), Math.max(to, 0));\n from = to + getOffset(i++);\n }\n }\n ctx.stroke();\n }\n }\n },\n _drawSelected: function(ctx, matrix) {\n ctx.beginPath();\n drawSegments(ctx, this, matrix);\n ctx.stroke();\n drawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n }\n };\n }, new function() {\n function getCurrentSegment(that) {\n var segments = that._segments;\n if (!segments.length) throw new Error(\"Use a moveTo() command first\");\n return segments[segments.length - 1];\n }\n return {\n moveTo: function() {\n var segments = this._segments;\n if (segments.length === 1) this.removeSegment(0);\n if (!segments.length) this._add([\n new Segment(Point.read(arguments))\n ]);\n },\n moveBy: function() {\n throw new Error(\"moveBy() is unsupported on Path items.\");\n },\n lineTo: function() {\n this._add([\n new Segment(Point.read(arguments))\n ]);\n },\n cubicCurveTo: function() {\n var args = arguments, handle1 = Point.read(args), handle2 = Point.read(args), to = Point.read(args), current = getCurrentSegment(this);\n current.setHandleOut(handle1.subtract(current._point));\n this._add([\n new Segment(to, handle2.subtract(to))\n ]);\n },\n quadraticCurveTo: function() {\n var args = arguments, handle = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.cubicCurveTo(handle.add(current.subtract(handle).multiply(1 / 3)), handle.add(to.subtract(handle).multiply(1 / 3)), to);\n },\n curveTo: function() {\n var args = arguments, through = Point.read(args), to = Point.read(args), t = Base.pick(Base.read(args), 0.5), t1 = 1 - t, current = getCurrentSegment(this)._point, handle = through.subtract(current.multiply(t1 * t1)).subtract(to.multiply(t * t)).divide(2 * t * t1);\n if (handle.isNaN()) throw new Error(\"Cannot put a curve through points with parameter = \" + t);\n this.quadraticCurveTo(handle, to);\n },\n arcTo: function() {\n var args = arguments, abs = Math.abs, sqrt = Math.sqrt, current = getCurrentSegment(this), from = current._point, to = Point.read(args), through, peek = Base.peek(args), clockwise = Base.pick(peek, true), center, extent, vector, matrix;\n if (typeof clockwise === \"boolean\") var middle = from.add(to).divide(2), through = middle.add(middle.subtract(from).rotate(clockwise ? -90 : 90));\n else if (Base.remain(args) <= 2) {\n through = to;\n to = Point.read(args);\n } else if (!from.equals(to)) {\n var radius = Size.read(args), isZero = Numerical.isZero;\n if (isZero(radius.width) || isZero(radius.height)) return this.lineTo(to);\n var rotation = Base.read(args), clockwise = !!Base.read(args), large = !!Base.read(args), middle = from.add(to).divide(2), pt = from.subtract(middle).rotate(-rotation), x = pt.x, y = pt.y, rx = abs(radius.width), ry = abs(radius.height), rxSq = rx * rx, rySq = ry * ry, xSq = x * x, ySq = y * y;\n var factor = sqrt(xSq / rxSq + ySq / rySq);\n if (factor > 1) {\n rx *= factor;\n ry *= factor;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n factor = (rxSq * rySq - rxSq * ySq - rySq * xSq) / (rxSq * ySq + rySq * xSq);\n if (abs(factor) < 1e-12) factor = 0;\n if (factor < 0) throw new Error(\"Cannot create an arc with the given arguments\");\n center = new Point(rx * y / ry, -ry * x / rx).multiply((large === clockwise ? -1 : 1) * sqrt(factor)).rotate(rotation).add(middle);\n matrix = new Matrix().translate(center).rotate(rotation).scale(rx, ry);\n vector = matrix._inverseTransform(from);\n extent = vector.getDirectedAngle(matrix._inverseTransform(to));\n if (!clockwise && extent > 0) extent -= 360;\n else if (clockwise && extent < 0) extent += 360;\n }\n if (through) {\n var l1 = new Line(from.add(through).divide(2), through.subtract(from).rotate(90), true), l2 = new Line(through.add(to).divide(2), to.subtract(through).rotate(90), true), line = new Line(from, to), throughSide = line.getSide(through);\n center = l1.intersect(l2, true);\n if (!center) {\n if (!throughSide) return this.lineTo(to);\n throw new Error(\"Cannot create an arc with the given arguments\");\n }\n vector = from.subtract(center);\n extent = vector.getDirectedAngle(to.subtract(center));\n var centerSide = line.getSide(center, true);\n if (centerSide === 0) extent = throughSide * abs(extent);\n else if (throughSide === centerSide) extent += extent < 0 ? 360 : -360;\n }\n if (extent) {\n var epsilon = 1e-5, ext = abs(extent), count = ext >= 360 ? 4 : Math.ceil((ext - epsilon) / 90), inc = extent / count, half = inc * Math.PI / 360, z = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)), segments = [];\n for(var i = 0; i <= count; i++){\n var pt = to, out = null;\n if (i < count) {\n out = vector.rotate(90).multiply(z);\n if (matrix) {\n pt = matrix._transformPoint(vector);\n out = matrix._transformPoint(vector.add(out)).subtract(pt);\n } else pt = center.add(vector);\n }\n if (!i) current.setHandleOut(out);\n else {\n var _in = vector.rotate(-90).multiply(z);\n if (matrix) _in = matrix._transformPoint(vector.add(_in)).subtract(pt);\n segments.push(new Segment(pt, _in, out));\n }\n vector = vector.rotate(inc);\n }\n this._add(segments);\n }\n },\n lineBy: function() {\n var to = Point.read(arguments), current = getCurrentSegment(this)._point;\n this.lineTo(current.add(to));\n },\n curveBy: function() {\n var args = arguments, through = Point.read(args), to = Point.read(args), parameter = Base.read(args), current = getCurrentSegment(this)._point;\n this.curveTo(current.add(through), current.add(to), parameter);\n },\n cubicCurveBy: function() {\n var args = arguments, handle1 = Point.read(args), handle2 = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.cubicCurveTo(current.add(handle1), current.add(handle2), current.add(to));\n },\n quadraticCurveBy: function() {\n var args = arguments, handle = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.quadraticCurveTo(current.add(handle), current.add(to));\n },\n arcBy: function() {\n var args = arguments, current = getCurrentSegment(this)._point, point = current.add(Point.read(args)), clockwise = Base.pick(Base.peek(args), true);\n if (typeof clockwise === \"boolean\") this.arcTo(point, clockwise);\n else this.arcTo(point, current.add(Point.read(args)));\n },\n closePath: function(tolerance) {\n this.setClosed(true);\n this.join(this, tolerance);\n }\n };\n }, {\n _getBounds: function(matrix, options) {\n var method = options.handle ? \"getHandleBounds\" : options.stroke ? \"getStrokeBounds\" : \"getBounds\";\n return Path[method](this._segments, this._closed, this, matrix, options);\n },\n statics: {\n getBounds: function(segments, closed, path, matrix, options, strokePadding) {\n var first = segments[0];\n if (!first) return new Rectangle();\n var coords = new Array(6), prevCoords = first._transformCoordinates(matrix, new Array(6)), min = prevCoords.slice(0, 2), max = min.slice(), roots = new Array(2);\n function processSegment(segment) {\n segment._transformCoordinates(matrix, coords);\n for(var i = 0; i < 2; i++)Curve._addBounds(prevCoords[i], prevCoords[i + 4], coords[i + 2], coords[i], i, strokePadding ? strokePadding[i] : 0, min, max, roots);\n var tmp = prevCoords;\n prevCoords = coords;\n coords = tmp;\n }\n for(var i = 1, l = segments.length; i < l; i++)processSegment(segments[i]);\n if (closed) processSegment(first);\n return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n getStrokeBounds: function(segments, closed, path, matrix, options) {\n var style = path.getStyle(), stroke = style.hasStroke(), strokeWidth = style.getStrokeWidth(), strokeMatrix = stroke && path._getStrokeMatrix(matrix, options), strokePadding = stroke && Path._getStrokePadding(strokeWidth, strokeMatrix), bounds = Path.getBounds(segments, closed, path, matrix, options, strokePadding);\n if (!stroke) return bounds;\n var strokeRadius = strokeWidth / 2, join = style.getStrokeJoin(), cap = style.getStrokeCap(), miterLimit = style.getMiterLimit(), joinBounds = new Rectangle(new Size(strokePadding));\n function addPoint(point) {\n bounds = bounds.include(point);\n }\n function addRound(segment) {\n bounds = bounds.unite(joinBounds.setCenter(segment._point.transform(matrix)));\n }\n function addJoin(segment, join) {\n if (join === \"round\" || segment.isSmooth()) addRound(segment);\n else Path._addBevelJoin(segment, join, strokeRadius, miterLimit, matrix, strokeMatrix, addPoint);\n }\n function addCap(segment, cap) {\n if (cap === \"round\") addRound(segment);\n else Path._addSquareCap(segment, cap, strokeRadius, matrix, strokeMatrix, addPoint);\n }\n var length = segments.length - (closed ? 0 : 1);\n if (length > 0) {\n for(var i = 1; i < length; i++)addJoin(segments[i], join);\n if (closed) addJoin(segments[0], join);\n else {\n addCap(segments[0], cap);\n addCap(segments[segments.length - 1], cap);\n }\n }\n return bounds;\n },\n _getStrokePadding: function(radius, matrix) {\n if (!matrix) return [\n radius,\n radius\n ];\n var hor = new Point(radius, 0).transform(matrix), ver = new Point(0, radius).transform(matrix), phi = hor.getAngleInRadians(), a = hor.getLength(), b = ver.getLength();\n var sin = Math.sin(phi), cos = Math.cos(phi), tan = Math.tan(phi), tx = Math.atan2(b * tan, a), ty = Math.atan2(b, tan * a);\n return [\n Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n Math.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)\n ];\n },\n _addBevelJoin: function(segment, join, radius, miterLimit, matrix, strokeMatrix, addPoint, isArea) {\n var curve2 = segment.getCurve(), curve1 = curve2.getPrevious(), point = curve2.getPoint1().transform(matrix), normal1 = curve1.getNormalAtTime(1).multiply(radius).transform(strokeMatrix), normal2 = curve2.getNormalAtTime(0).multiply(radius).transform(strokeMatrix), angle = normal1.getDirectedAngle(normal2);\n if (angle < 0 || angle >= 180) {\n normal1 = normal1.negate();\n normal2 = normal2.negate();\n }\n if (isArea) addPoint(point);\n addPoint(point.add(normal1));\n if (join === \"miter\") {\n var corner = new Line(point.add(normal1), new Point(-normal1.y, normal1.x), true).intersect(new Line(point.add(normal2), new Point(-normal2.y, normal2.x), true), true);\n if (corner && point.getDistance(corner) <= miterLimit * radius) addPoint(corner);\n }\n addPoint(point.add(normal2));\n },\n _addSquareCap: function(segment, cap, radius, matrix, strokeMatrix, addPoint, isArea) {\n var point = segment._point.transform(matrix), loc = segment.getLocation(), normal = loc.getNormal().multiply(loc.getTime() === 0 ? radius : -radius).transform(strokeMatrix);\n if (cap === \"square\") {\n if (isArea) {\n addPoint(point.subtract(normal));\n addPoint(point.add(normal));\n }\n point = point.add(normal.rotate(-90));\n }\n addPoint(point.add(normal));\n addPoint(point.subtract(normal));\n },\n getHandleBounds: function(segments, closed, path, matrix, options) {\n var style = path.getStyle(), stroke = options.stroke && style.hasStroke(), strokePadding, joinPadding;\n if (stroke) {\n var strokeMatrix = path._getStrokeMatrix(matrix, options), strokeRadius = style.getStrokeWidth() / 2, joinRadius = strokeRadius;\n if (style.getStrokeJoin() === \"miter\") joinRadius = strokeRadius * style.getMiterLimit();\n if (style.getStrokeCap() === \"square\") joinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n strokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n joinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n }\n var coords = new Array(6), x1 = Infinity, x2 = -x1, y1 = x1, y2 = x2;\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i];\n segment._transformCoordinates(matrix, coords);\n for(var j = 0; j < 6; j += 2){\n var padding = !j ? joinPadding : strokePadding, paddingX = padding ? padding[0] : 0, paddingY = padding ? padding[1] : 0, x = coords[j], y = coords[j + 1], xn = x - paddingX, xx = x + paddingX, yn = y - paddingY, yx = y + paddingY;\n if (xn < x1) x1 = xn;\n if (xx > x2) x2 = xx;\n if (yn < y1) y1 = yn;\n if (yx > y2) y2 = yx;\n }\n }\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n }\n }\n });\n Path.inject({\n statics: new function() {\n var kappa = 0.5522847498307936, ellipseSegments = [\n new Segment([\n -1,\n 0\n ], [\n 0,\n kappa\n ], [\n 0,\n -kappa\n ]),\n new Segment([\n 0,\n -1\n ], [\n -kappa,\n 0\n ], [\n kappa,\n 0\n ]),\n new Segment([\n 1,\n 0\n ], [\n 0,\n -kappa\n ], [\n 0,\n kappa\n ]),\n new Segment([\n 0,\n 1\n ], [\n kappa,\n 0\n ], [\n -kappa,\n 0\n ])\n ];\n function createPath(segments, closed, args) {\n var props = Base.getNamed(args), path = new Path(props && (props.insert == true ? Item.INSERT : props.insert == false ? Item.NO_INSERT : null));\n path._add(segments);\n path._closed = closed;\n return path.set(props, Item.INSERT);\n }\n function createEllipse(center, radius, args) {\n var segments = new Array(4);\n for(var i = 0; i < 4; i++){\n var segment = ellipseSegments[i];\n segments[i] = new Segment(segment._point.multiply(radius).add(center), segment._handleIn.multiply(radius), segment._handleOut.multiply(radius));\n }\n return createPath(segments, true, args);\n }\n return {\n Line: function() {\n var args = arguments;\n return createPath([\n new Segment(Point.readNamed(args, \"from\")),\n new Segment(Point.readNamed(args, \"to\"))\n ], false, args);\n },\n Circle: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), radius = Base.readNamed(args, \"radius\");\n return createEllipse(center, new Size(radius), args);\n },\n Rectangle: function() {\n var args = arguments, rect = Rectangle.readNamed(args, \"rectangle\"), radius = Size.readNamed(args, \"radius\", 0, {\n readNull: true\n }), bl = rect.getBottomLeft(true), tl = rect.getTopLeft(true), tr = rect.getTopRight(true), br = rect.getBottomRight(true), segments;\n if (!radius || radius.isZero()) segments = [\n new Segment(bl),\n new Segment(tl),\n new Segment(tr),\n new Segment(br)\n ];\n else {\n radius = Size.min(radius, rect.getSize(true).divide(2));\n var rx = radius.width, ry = radius.height, hx = rx * kappa, hy = ry * kappa;\n segments = [\n new Segment(bl.add(rx, 0), null, [\n -hx,\n 0\n ]),\n new Segment(bl.subtract(0, ry), [\n 0,\n hy\n ]),\n new Segment(tl.add(0, ry), null, [\n 0,\n -hy\n ]),\n new Segment(tl.add(rx, 0), [\n -hx,\n 0\n ], null),\n new Segment(tr.subtract(rx, 0), null, [\n hx,\n 0\n ]),\n new Segment(tr.add(0, ry), [\n 0,\n -hy\n ], null),\n new Segment(br.subtract(0, ry), null, [\n 0,\n hy\n ]),\n new Segment(br.subtract(rx, 0), [\n hx,\n 0\n ])\n ];\n }\n return createPath(segments, true, args);\n },\n RoundRectangle: \"#Rectangle\",\n Ellipse: function() {\n var args = arguments, ellipse = Shape._readEllipse(args);\n return createEllipse(ellipse.center, ellipse.radius, args);\n },\n Oval: \"#Ellipse\",\n Arc: function() {\n var args = arguments, from = Point.readNamed(args, \"from\"), through = Point.readNamed(args, \"through\"), to = Point.readNamed(args, \"to\"), props = Base.getNamed(args), path = new Path(props && props.insert == false && Item.NO_INSERT);\n path.moveTo(from);\n path.arcTo(through, to);\n return path.set(props);\n },\n RegularPolygon: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), sides = Base.readNamed(args, \"sides\"), radius = Base.readNamed(args, \"radius\"), step = 360 / sides, three = sides % 3 === 0, vector = new Point(0, three ? -radius : radius), offset = three ? -1 : 0.5, segments = new Array(sides);\n for(var i = 0; i < sides; i++)segments[i] = new Segment(center.add(vector.rotate((i + offset) * step)));\n return createPath(segments, true, args);\n },\n Star: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), points = Base.readNamed(args, \"points\") * 2, radius1 = Base.readNamed(args, \"radius1\"), radius2 = Base.readNamed(args, \"radius2\"), step = 360 / points, vector = new Point(0, -1), segments = new Array(points);\n for(var i = 0; i < points; i++)segments[i] = new Segment(center.add(vector.rotate(step * i).multiply(i % 2 ? radius2 : radius1)));\n return createPath(segments, true, args);\n }\n };\n }\n });\n var CompoundPath = PathItem.extend({\n _class: \"CompoundPath\",\n _serializeFields: {\n children: []\n },\n beans: true,\n initialize: function CompoundPath(arg) {\n this._children = [];\n this._namedChildren = {};\n if (!this._initialize(arg)) {\n if (typeof arg === \"string\") this.setPathData(arg);\n else this.addChildren(Array.isArray(arg) ? arg : arguments);\n }\n },\n insertChildren: function insertChildren(index, items) {\n var list = items, first = list[0];\n if (first && typeof first[0] === \"number\") list = [\n list\n ];\n for(var i = items.length - 1; i >= 0; i--){\n var item = list[i];\n if (list === items && !(item instanceof Path)) list = Base.slice(list);\n if (Array.isArray(item)) list[i] = new Path({\n segments: item,\n insert: false\n });\n else if (item instanceof CompoundPath) {\n list.splice.apply(list, [\n i,\n 1\n ].concat(item.removeChildren()));\n item.remove();\n }\n }\n return insertChildren.base.call(this, index, list);\n },\n reduce: function reduce(options) {\n var children = this._children;\n for(var i = children.length - 1; i >= 0; i--){\n var path = children[i].reduce(options);\n if (path.isEmpty()) path.remove();\n }\n if (!children.length) {\n var path = new Path(Item.NO_INSERT);\n path.copyAttributes(this);\n path.insertAbove(this);\n this.remove();\n return path;\n }\n return reduce.base.call(this);\n },\n isClosed: function() {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n if (!children[i]._closed) return false;\n }\n return true;\n },\n setClosed: function(closed) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setClosed(closed);\n },\n getFirstSegment: function() {\n var first = this.getFirstChild();\n return first && first.getFirstSegment();\n },\n getLastSegment: function() {\n var last = this.getLastChild();\n return last && last.getLastSegment();\n },\n getCurves: function() {\n var children = this._children, curves = [];\n for(var i = 0, l = children.length; i < l; i++)Base.push(curves, children[i].getCurves());\n return curves;\n },\n getFirstCurve: function() {\n var first = this.getFirstChild();\n return first && first.getFirstCurve();\n },\n getLastCurve: function() {\n var last = this.getLastChild();\n return last && last.getLastCurve();\n },\n getArea: function() {\n var children = this._children, area = 0;\n for(var i = 0, l = children.length; i < l; i++)area += children[i].getArea();\n return area;\n },\n getLength: function() {\n var children = this._children, length = 0;\n for(var i = 0, l = children.length; i < l; i++)length += children[i].getLength();\n return length;\n },\n getPathData: function(_matrix, _precision) {\n var children = this._children, paths = [];\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i], mx = child._matrix;\n paths.push(child.getPathData(_matrix && !mx.isIdentity() ? _matrix.appended(mx) : _matrix, _precision));\n }\n return paths.join(\"\");\n },\n _hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n return _hitTestChildren.base.call(this, point, options.class === Path || options.type === \"path\" ? options : Base.set({}, options, {\n fill: false\n }), viewMatrix);\n },\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var children = this._children;\n if (!children.length) return;\n param = param.extend({\n dontStart: true,\n dontFinish: true\n });\n ctx.beginPath();\n for(var i = 0, l = children.length; i < l; i++)children[i].draw(ctx, param, strokeMatrix);\n if (!param.clip) {\n this._setStyles(ctx, param, viewMatrix);\n var style = this._style;\n if (style.hasFill()) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (style.hasStroke()) ctx.stroke();\n }\n },\n _drawSelected: function(ctx, matrix, selectionItems) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i], mx = child._matrix;\n if (!selectionItems[child._id]) child._drawSelected(ctx, mx.isIdentity() ? matrix : matrix.appended(mx));\n }\n }\n }, new function() {\n function getCurrentPath(that, check) {\n var children = that._children;\n if (check && !children.length) throw new Error(\"Use a moveTo() command first\");\n return children[children.length - 1];\n }\n return Base.each([\n \"lineTo\",\n \"cubicCurveTo\",\n \"quadraticCurveTo\",\n \"curveTo\",\n \"arcTo\",\n \"lineBy\",\n \"cubicCurveBy\",\n \"quadraticCurveBy\",\n \"curveBy\",\n \"arcBy\"\n ], function(key) {\n this[key] = function() {\n var path = getCurrentPath(this, true);\n path[key].apply(path, arguments);\n };\n }, {\n moveTo: function() {\n var current = getCurrentPath(this), path = current && current.isEmpty() ? current : new Path(Item.NO_INSERT);\n if (path !== current) this.addChild(path);\n path.moveTo.apply(path, arguments);\n },\n moveBy: function() {\n var current = getCurrentPath(this, true), last = current && current.getLastSegment(), point = Point.read(arguments);\n this.moveTo(last ? point.add(last._point) : point);\n },\n closePath: function(tolerance) {\n getCurrentPath(this, true).closePath(tolerance);\n }\n });\n }, Base.each([\n \"reverse\",\n \"flatten\",\n \"simplify\",\n \"smooth\"\n ], function(key) {\n this[key] = function(param) {\n var children = this._children, res;\n for(var i = 0, l = children.length; i < l; i++)res = children[i][key](param) || res;\n return res;\n };\n }, {}));\n PathItem.inject(new function() {\n var min = Math.min, max = Math.max, abs = Math.abs, operators = {\n unite: {\n \"1\": true,\n \"2\": true\n },\n intersect: {\n \"2\": true\n },\n subtract: {\n \"1\": true\n },\n exclude: {\n \"1\": true,\n \"-1\": true\n }\n };\n function getPaths(path) {\n return path._children || [\n path\n ];\n }\n function preparePath(path, resolve) {\n var res = path.clone(false).reduce({\n simplify: true\n }).transform(null, true, true);\n if (resolve) {\n var paths = getPaths(res);\n for(var i = 0, l = paths.length; i < l; i++){\n var path = paths[i];\n if (!path._closed && !path.isEmpty()) {\n path.closePath(1e-12);\n path.getFirstSegment().setHandleIn(0, 0);\n path.getLastSegment().setHandleOut(0, 0);\n }\n }\n res = res.resolveCrossings().reorient(res.getFillRule() === \"nonzero\", true);\n }\n return res;\n }\n function createResult(paths, simplify, path1, path2, options) {\n var result = new CompoundPath(Item.NO_INSERT);\n result.addChildren(paths, true);\n result = result.reduce({\n simplify: simplify\n });\n if (!(options && options.insert == false)) result.insertAbove(path2 && path1.isSibling(path2) && path1.getIndex() < path2.getIndex() ? path2 : path1);\n result.copyAttributes(path1, true);\n return result;\n }\n function filterIntersection(inter) {\n return inter.hasOverlap() || inter.isCrossing();\n }\n function traceBoolean(path1, path2, operation, options) {\n if (options && (options.trace == false || options.stroke) && /^(subtract|intersect)$/.test(operation)) return splitBoolean(path1, path2, operation);\n var _path1 = preparePath(path1, true), _path2 = path2 && path1 !== path2 && preparePath(path2, true), operator = operators[operation];\n operator[operation] = true;\n if (_path2 && (operator.subtract || operator.exclude) ^ (_path2.isClockwise() ^ _path1.isClockwise())) _path2.reverse();\n var crossings = divideLocations(CurveLocation.expand(_path1.getIntersections(_path2, filterIntersection))), paths1 = getPaths(_path1), paths2 = _path2 && getPaths(_path2), segments = [], curves = [], paths;\n function collectPaths(paths) {\n for(var i = 0, l = paths.length; i < l; i++){\n var path = paths[i];\n Base.push(segments, path._segments);\n Base.push(curves, path.getCurves());\n path._overlapsOnly = true;\n }\n }\n function getCurves(indices) {\n var list = [];\n for(var i = 0, l = indices && indices.length; i < l; i++)list.push(curves[indices[i]]);\n return list;\n }\n if (crossings.length) {\n collectPaths(paths1);\n if (paths2) collectPaths(paths2);\n var curvesValues = new Array(curves.length);\n for(var i = 0, l = curves.length; i < l; i++)curvesValues[i] = curves[i].getValues();\n var curveCollisions = CollisionDetection.findCurveBoundsCollisions(curvesValues, curvesValues, 0, true);\n var curveCollisionsMap = {};\n for(var i = 0; i < curves.length; i++){\n var curve = curves[i], id = curve._path._id, map = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n map[curve.getIndex()] = {\n hor: getCurves(curveCollisions[i].hor),\n ver: getCurves(curveCollisions[i].ver)\n };\n }\n for(var i = 0, l = crossings.length; i < l; i++)propagateWinding(crossings[i]._segment, _path1, _path2, curveCollisionsMap, operator);\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i], inter = segment._intersection;\n if (!segment._winding) propagateWinding(segment, _path1, _path2, curveCollisionsMap, operator);\n if (!(inter && inter._overlap)) segment._path._overlapsOnly = false;\n }\n paths = tracePaths(segments, operator);\n } else paths = reorientPaths(paths2 ? paths1.concat(paths2) : paths1.slice(), function(w) {\n return !!operator[w];\n });\n return createResult(paths, true, path1, path2, options);\n }\n function splitBoolean(path1, path2, operation) {\n var _path1 = preparePath(path1), _path2 = preparePath(path2), crossings = _path1.getIntersections(_path2, filterIntersection), subtract = operation === \"subtract\", divide = operation === \"divide\", added = {}, paths = [];\n function addPath(path) {\n if (!added[path._id] && (divide || _path2.contains(path.getPointAt(path.getLength() / 2)) ^ subtract)) {\n paths.unshift(path);\n return added[path._id] = true;\n }\n }\n for(var i = crossings.length - 1; i >= 0; i--){\n var path = crossings[i].split();\n if (path) {\n if (addPath(path)) path.getFirstSegment().setHandleIn(0, 0);\n _path1.getLastSegment().setHandleOut(0, 0);\n }\n }\n addPath(_path1);\n return createResult(paths, false, path1, path2);\n }\n function linkIntersections(from, to) {\n var prev = from;\n while(prev){\n if (prev === to) return;\n prev = prev._previous;\n }\n while(from._next && from._next !== to)from = from._next;\n if (!from._next) {\n while(to._previous)to = to._previous;\n from._next = to;\n to._previous = from;\n }\n }\n function clearCurveHandles(curves) {\n for(var i = curves.length - 1; i >= 0; i--)curves[i].clearHandles();\n }\n function reorientPaths(paths, isInside, clockwise) {\n var length = paths && paths.length;\n if (length) {\n var lookup = Base.each(paths, function(path, i) {\n this[path._id] = {\n container: null,\n winding: path.isClockwise() ? 1 : -1,\n index: i\n };\n }, {}), sorted = paths.slice().sort(function(a, b) {\n return abs(b.getArea()) - abs(a.getArea());\n }), first = sorted[0];\n var collisions = CollisionDetection.findItemBoundsCollisions(sorted, null, Numerical.GEOMETRIC_EPSILON);\n if (clockwise == null) clockwise = first.isClockwise();\n for(var i = 0; i < length; i++){\n var path1 = sorted[i], entry1 = lookup[path1._id], containerWinding = 0, indices = collisions[i];\n if (indices) {\n var point = null;\n for(var j = indices.length - 1; j >= 0; j--)if (indices[j] < i) {\n point = point || path1.getInteriorPoint();\n var path2 = sorted[indices[j]];\n if (path2.contains(point)) {\n var entry2 = lookup[path2._id];\n containerWinding = entry2.winding;\n entry1.winding += containerWinding;\n entry1.container = entry2.exclude ? entry2.container : path2;\n break;\n }\n }\n }\n if (isInside(entry1.winding) === isInside(containerWinding)) {\n entry1.exclude = true;\n paths[entry1.index] = null;\n } else {\n var container = entry1.container;\n path1.setClockwise(container ? !container.isClockwise() : clockwise);\n }\n }\n }\n return paths;\n }\n function divideLocations(locations, include, clearLater) {\n var results = include && [], tMin = 1e-8, tMax = 1 - tMin, clearHandles = false, clearCurves = clearLater || [], clearLookup = clearLater && {}, renormalizeLocs, prevCurve, prevTime;\n function getId(curve) {\n return curve._path._id + \".\" + curve._segment1._index;\n }\n for(var i = (clearLater && clearLater.length) - 1; i >= 0; i--){\n var curve = clearLater[i];\n if (curve._path) clearLookup[getId(curve)] = true;\n }\n for(var i = locations.length - 1; i >= 0; i--){\n var loc = locations[i], time = loc._time, origTime = time, exclude = include && !include(loc), curve = loc._curve, segment;\n if (curve) {\n if (curve !== prevCurve) {\n clearHandles = !curve.hasHandles() || clearLookup && clearLookup[getId(curve)];\n renormalizeLocs = [];\n prevTime = null;\n prevCurve = curve;\n } else if (prevTime >= tMin) time /= prevTime;\n }\n if (exclude) {\n if (renormalizeLocs) renormalizeLocs.push(loc);\n continue;\n } else if (include) results.unshift(loc);\n prevTime = origTime;\n if (time < tMin) segment = curve._segment1;\n else if (time > tMax) segment = curve._segment2;\n else {\n var newCurve = curve.divideAtTime(time, true);\n if (clearHandles) clearCurves.push(curve, newCurve);\n segment = newCurve._segment1;\n for(var j = renormalizeLocs.length - 1; j >= 0; j--){\n var l = renormalizeLocs[j];\n l._time = (l._time - time) / (1 - time);\n }\n }\n loc._setSegment(segment);\n var inter = segment._intersection, dest = loc._intersection;\n if (inter) {\n linkIntersections(inter, dest);\n var other = inter;\n while(other){\n linkIntersections(other._intersection, inter);\n other = other._next;\n }\n } else segment._intersection = dest;\n }\n if (!clearLater) clearCurveHandles(clearCurves);\n return results || locations;\n }\n function getWinding(point, curves, dir, closed, dontFlip) {\n var curvesList = Array.isArray(curves) ? curves : curves[dir ? \"hor\" : \"ver\"];\n var ia = dir ? 1 : 0, io = ia ^ 1, pv = [\n point.x,\n point.y\n ], pa = pv[ia], po = pv[io], windingEpsilon = 1e-9, qualityEpsilon = 1e-6, paL = pa - windingEpsilon, paR = pa + windingEpsilon, windingL = 0, windingR = 0, pathWindingL = 0, pathWindingR = 0, onPath = false, onAnyPath = false, quality = 1, roots = [], vPrev, vClose;\n function addWinding(v) {\n var o0 = v[io + 0], o3 = v[io + 6];\n if (po < min(o0, o3) || po > max(o0, o3)) return;\n var a0 = v[ia + 0], a1 = v[ia + 2], a2 = v[ia + 4], a3 = v[ia + 6];\n if (o0 === o3) {\n if (a0 < paR && a3 > paL || a3 < paR && a0 > paL) onPath = true;\n return;\n }\n var t = po === o0 ? 0 : po === o3 ? 1 : paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) ? 1 : Curve.solveCubic(v, io, po, roots, 0, 1) > 0 ? roots[0] : 1, a = t === 0 ? a0 : t === 1 ? a3 : Curve.getPoint(v, t)[dir ? \"y\" : \"x\"], winding = o0 > o3 ? 1 : -1, windingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1, a3Prev = vPrev[ia + 6];\n if (po !== o0) {\n if (a < paL) pathWindingL += winding;\n else if (a > paR) pathWindingR += winding;\n else onPath = true;\n if (a > pa - qualityEpsilon && a < pa + qualityEpsilon) quality /= 2;\n } else {\n if (winding !== windingPrev) {\n if (a0 < paL) pathWindingL += winding;\n else if (a0 > paR) pathWindingR += winding;\n } else if (a0 != a3Prev) {\n if (a3Prev < paR && a > paR) {\n pathWindingR += winding;\n onPath = true;\n } else if (a3Prev > paL && a < paL) {\n pathWindingL += winding;\n onPath = true;\n }\n }\n quality /= 4;\n }\n vPrev = v;\n return !dontFlip && a > paL && a < paR && Curve.getTangent(v, t)[dir ? \"x\" : \"y\"] === 0 && getWinding(point, curves, !dir, closed, true);\n }\n function handleCurve(v) {\n var o0 = v[io + 0], o1 = v[io + 2], o2 = v[io + 4], o3 = v[io + 6];\n if (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n var a0 = v[ia + 0], a1 = v[ia + 2], a2 = v[ia + 4], a3 = v[ia + 6], monoCurves = paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) ? [\n v\n ] : Curve.getMonoCurves(v, dir), res;\n for(var i = 0, l = monoCurves.length; i < l; i++){\n if (res = addWinding(monoCurves[i])) return res;\n }\n }\n }\n for(var i = 0, l = curvesList.length; i < l; i++){\n var curve = curvesList[i], path = curve._path, v = curve.getValues(), res;\n if (!i || curvesList[i - 1]._path !== path) {\n vPrev = null;\n if (!path._closed) {\n vClose = Curve.getValues(path.getLastCurve().getSegment2(), curve.getSegment1(), null, !closed);\n if (vClose[io] !== vClose[io + 6]) vPrev = vClose;\n }\n if (!vPrev) {\n vPrev = v;\n var prev = path.getLastCurve();\n while(prev && prev !== curve){\n var v2 = prev.getValues();\n if (v2[io] !== v2[io + 6]) {\n vPrev = v2;\n break;\n }\n prev = prev.getPrevious();\n }\n }\n }\n if (res = handleCurve(v)) return res;\n if (i + 1 === l || curvesList[i + 1]._path !== path) {\n if (vClose && (res = handleCurve(vClose))) return res;\n if (onPath && !pathWindingL && !pathWindingR) pathWindingL = pathWindingR = path.isClockwise(closed) ^ dir ? 1 : -1;\n windingL += pathWindingL;\n windingR += pathWindingR;\n pathWindingL = pathWindingR = 0;\n if (onPath) {\n onAnyPath = true;\n onPath = false;\n }\n vClose = null;\n }\n }\n windingL = abs(windingL);\n windingR = abs(windingR);\n return {\n winding: max(windingL, windingR),\n windingL: windingL,\n windingR: windingR,\n quality: quality,\n onPath: onAnyPath\n };\n }\n function propagateWinding(segment, path1, path2, curveCollisionsMap, operator) {\n var chain = [], start = segment, totalLength = 0, winding;\n do {\n var curve = segment.getCurve();\n if (curve) {\n var length = curve.getLength();\n chain.push({\n segment: segment,\n curve: curve,\n length: length\n });\n totalLength += length;\n }\n segment = segment.getNext();\n }while (segment && !segment._intersection && segment !== start);\n var offsets = [\n 0.5,\n 0.25,\n 0.75\n ], winding = {\n winding: 0,\n quality: -1\n }, tMin = 1e-3, tMax = 1 - tMin;\n for(var i = 0; i < offsets.length && winding.quality < 0.5; i++){\n var length = totalLength * offsets[i];\n for(var j = 0, l = chain.length; j < l; j++){\n var entry = chain[j], curveLength = entry.length;\n if (length <= curveLength) {\n var curve = entry.curve, path = curve._path, parent = path._parent, operand = parent instanceof CompoundPath ? parent : path, t = Numerical.clamp(curve.getTimeAt(length), tMin, tMax), pt = curve.getPointAtTime(t), dir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n var wind = null;\n if (operator.subtract && path2) {\n var otherPath = operand === path1 ? path2 : path1, pathWinding = otherPath._getWinding(pt, dir, true);\n if (operand === path1 && pathWinding.winding || operand === path2 && !pathWinding.winding) {\n if (pathWinding.quality < 1) continue;\n else wind = {\n winding: 0,\n quality: 1\n };\n }\n }\n wind = wind || getWinding(pt, curveCollisionsMap[path._id][curve.getIndex()], dir, true);\n if (wind.quality > winding.quality) winding = wind;\n break;\n }\n length -= curveLength;\n }\n }\n for(var j = chain.length - 1; j >= 0; j--)chain[j].segment._winding = winding;\n }\n function tracePaths(segments, operator) {\n var paths = [], starts;\n function isValid(seg) {\n var winding;\n return !!(seg && !seg._visited && (!operator || operator[(winding = seg._winding || {}).winding] && !(operator.unite && winding.winding === 2 && winding.windingL && winding.windingR)));\n }\n function isStart(seg) {\n if (seg) for(var i = 0, l = starts.length; i < l; i++){\n if (seg === starts[i]) return true;\n }\n return false;\n }\n function visitPath(path) {\n var segments = path._segments;\n for(var i = 0, l = segments.length; i < l; i++)segments[i]._visited = true;\n }\n function getCrossingSegments(segment, collectStarts) {\n var inter = segment._intersection, start = inter, crossings = [];\n if (collectStarts) starts = [\n segment\n ];\n function collect(inter, end) {\n while(inter && inter !== end){\n var other = inter._segment, path = other && other._path;\n if (path) {\n var next = other.getNext() || path.getFirstSegment(), nextInter = next._intersection;\n if (other !== segment && (isStart(other) || isStart(next) || next && isValid(other) && (isValid(next) || nextInter && isValid(nextInter._segment)))) crossings.push(other);\n if (collectStarts) starts.push(other);\n }\n inter = inter._next;\n }\n }\n if (inter) {\n collect(inter);\n while(inter && inter._previous)inter = inter._previous;\n collect(inter, start);\n }\n return crossings;\n }\n segments.sort(function(seg1, seg2) {\n var inter1 = seg1._intersection, inter2 = seg2._intersection, over1 = !!(inter1 && inter1._overlap), over2 = !!(inter2 && inter2._overlap), path1 = seg1._path, path2 = seg2._path;\n return over1 ^ over2 ? over1 ? 1 : -1 : !inter1 ^ !inter2 ? inter1 ? 1 : -1 : path1 !== path2 ? path1._id - path2._id : seg1._index - seg2._index;\n });\n for(var i = 0, l = segments.length; i < l; i++){\n var seg = segments[i], valid = isValid(seg), path = null, finished = false, closed = true, branches = [], branch, visited, handleIn;\n if (valid && seg._path._overlapsOnly) {\n var path1 = seg._path, path2 = seg._intersection._segment._path;\n if (path1.compare(path2)) {\n if (path1.getArea()) paths.push(path1.clone(false));\n visitPath(path1);\n visitPath(path2);\n valid = false;\n }\n }\n while(valid){\n var first = !path, crossings = getCrossingSegments(seg, first), other = crossings.shift(), finished = !first && (isStart(seg) || isStart(other)), cross = !finished && other;\n if (first) {\n path = new Path(Item.NO_INSERT);\n branch = null;\n }\n if (finished) {\n if (seg.isFirst() || seg.isLast()) closed = seg._path._closed;\n seg._visited = true;\n break;\n }\n if (cross && branch) {\n branches.push(branch);\n branch = null;\n }\n if (!branch) {\n if (cross) crossings.push(seg);\n branch = {\n start: path._segments.length,\n crossings: crossings,\n visited: visited = [],\n handleIn: handleIn\n };\n }\n if (cross) seg = other;\n if (!isValid(seg)) {\n path.removeSegments(branch.start);\n for(var j = 0, k = visited.length; j < k; j++)visited[j]._visited = false;\n visited.length = 0;\n do {\n seg = branch && branch.crossings.shift();\n if (!seg || !seg._path) {\n seg = null;\n branch = branches.pop();\n if (branch) {\n visited = branch.visited;\n handleIn = branch.handleIn;\n }\n }\n }while (branch && !isValid(seg));\n if (!seg) break;\n }\n var next = seg.getNext();\n path.add(new Segment(seg._point, handleIn, next && seg._handleOut));\n seg._visited = true;\n visited.push(seg);\n seg = next || seg._path.getFirstSegment();\n handleIn = next && next._handleIn;\n }\n if (finished) {\n if (closed) {\n path.getFirstSegment().setHandleIn(handleIn);\n path.setClosed(closed);\n }\n if (path.getArea() !== 0) paths.push(path);\n }\n }\n return paths;\n }\n return {\n _getWinding: function(point, dir, closed) {\n return getWinding(point, this.getCurves(), dir, closed);\n },\n unite: function(path, options) {\n return traceBoolean(this, path, \"unite\", options);\n },\n intersect: function(path, options) {\n return traceBoolean(this, path, \"intersect\", options);\n },\n subtract: function(path, options) {\n return traceBoolean(this, path, \"subtract\", options);\n },\n exclude: function(path, options) {\n return traceBoolean(this, path, \"exclude\", options);\n },\n divide: function(path, options) {\n return options && (options.trace == false || options.stroke) ? splitBoolean(this, path, \"divide\") : createResult([\n this.subtract(path, options),\n this.intersect(path, options)\n ], true, this, path, options);\n },\n resolveCrossings: function() {\n var children = this._children, paths = children || [\n this\n ];\n function hasOverlap(seg, path) {\n var inter = seg && seg._intersection;\n return inter && inter._overlap && inter._path === path;\n }\n var hasOverlaps = false, hasCrossings = false, intersections = this.getIntersections(null, function(inter) {\n return inter.hasOverlap() && (hasOverlaps = true) || inter.isCrossing() && (hasCrossings = true);\n }), clearCurves = hasOverlaps && hasCrossings && [];\n intersections = CurveLocation.expand(intersections);\n if (hasOverlaps) {\n var overlaps = divideLocations(intersections, function(inter) {\n return inter.hasOverlap();\n }, clearCurves);\n for(var i = overlaps.length - 1; i >= 0; i--){\n var overlap = overlaps[i], path = overlap._path, seg = overlap._segment, prev = seg.getPrevious(), next = seg.getNext();\n if (hasOverlap(prev, path) && hasOverlap(next, path)) {\n seg.remove();\n prev._handleOut._set(0, 0);\n next._handleIn._set(0, 0);\n if (prev !== seg && !prev.getCurve().hasLength()) {\n next._handleIn.set(prev._handleIn);\n prev.remove();\n }\n }\n }\n }\n if (hasCrossings) {\n divideLocations(intersections, hasOverlaps && function(inter) {\n var curve1 = inter.getCurve(), seg1 = inter.getSegment(), other = inter._intersection, curve2 = other._curve, seg2 = other._segment;\n if (curve1 && curve2 && curve1._path && curve2._path) return true;\n if (seg1) seg1._intersection = null;\n if (seg2) seg2._intersection = null;\n }, clearCurves);\n if (clearCurves) clearCurveHandles(clearCurves);\n paths = tracePaths(Base.each(paths, function(path) {\n Base.push(this, path._segments);\n }, []));\n }\n var length = paths.length, item;\n if (length > 1 && children) {\n if (paths !== children) this.setChildren(paths);\n item = this;\n } else if (length === 1 && !children) {\n if (paths[0] !== this) this.setSegments(paths[0].removeSegments());\n item = this;\n }\n if (!item) {\n item = new CompoundPath(Item.NO_INSERT);\n item.addChildren(paths);\n item = item.reduce();\n item.copyAttributes(this);\n this.replaceWith(item);\n }\n return item;\n },\n reorient: function(nonZero, clockwise) {\n var children = this._children;\n if (children && children.length) this.setChildren(reorientPaths(this.removeChildren(), function(w) {\n return !!(nonZero ? w : w & 1);\n }, clockwise));\n else if (clockwise !== undefined) this.setClockwise(clockwise);\n return this;\n },\n getInteriorPoint: function() {\n var bounds = this.getBounds(), point = bounds.getCenter(true);\n if (!this.contains(point)) {\n var curves = this.getCurves(), y = point.y, intercepts = [], roots = [];\n for(var i = 0, l = curves.length; i < l; i++){\n var v = curves[i].getValues(), o0 = v[1], o1 = v[3], o2 = v[5], o3 = v[7];\n if (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n var monoCurves = Curve.getMonoCurves(v);\n for(var j = 0, m = monoCurves.length; j < m; j++){\n var mv = monoCurves[j], mo0 = mv[1], mo3 = mv[7];\n if (mo0 !== mo3 && (y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)) {\n var x = y === mo0 ? mv[0] : y === mo3 ? mv[6] : Curve.solveCubic(mv, 1, y, roots, 0, 1) === 1 ? Curve.getPoint(mv, roots[0]).x : (mv[0] + mv[6]) / 2;\n intercepts.push(x);\n }\n }\n }\n }\n if (intercepts.length > 1) {\n intercepts.sort(function(a, b) {\n return a - b;\n });\n point.x = (intercepts[0] + intercepts[1]) / 2;\n }\n }\n return point;\n }\n };\n });\n var PathFlattener = Base.extend({\n _class: \"PathFlattener\",\n initialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n var curves = [], parts = [], length = 0, minSpan = 1 / (maxRecursion || 32), segments = path._segments, segment1 = segments[0], segment2;\n function addCurve(segment1, segment2) {\n var curve = Curve.getValues(segment1, segment2, matrix);\n curves.push(curve);\n computeParts(curve, segment1._index, 0, 1);\n }\n function computeParts(curve, index, t1, t2) {\n if (t2 - t1 > minSpan && !(ignoreStraight && Curve.isStraight(curve)) && !Curve.isFlatEnough(curve, flatness || 0.25)) {\n var halves = Curve.subdivide(curve, 0.5), tMid = (t1 + t2) / 2;\n computeParts(halves[0], index, t1, tMid);\n computeParts(halves[1], index, tMid, t2);\n } else {\n var dx = curve[6] - curve[0], dy = curve[7] - curve[1], dist = Math.sqrt(dx * dx + dy * dy);\n if (dist > 0) {\n length += dist;\n parts.push({\n offset: length,\n curve: curve,\n index: index,\n time: t2\n });\n }\n }\n }\n for(var i = 1, l = segments.length; i < l; i++){\n segment2 = segments[i];\n addCurve(segment1, segment2);\n segment1 = segment2;\n }\n if (path._closed) addCurve(segment2 || segment1, segments[0]);\n this.curves = curves;\n this.parts = parts;\n this.length = length;\n this.index = 0;\n },\n _get: function(offset) {\n var parts = this.parts, length = parts.length, start, i, j = this.index;\n for(;;){\n i = j;\n if (!j || parts[--j].offset < offset) break;\n }\n for(; i < length; i++){\n var part = parts[i];\n if (part.offset >= offset) {\n this.index = i;\n var prev = parts[i - 1], prevTime = prev && prev.index === part.index ? prev.time : 0, prevOffset = prev ? prev.offset : 0;\n return {\n index: part.index,\n time: prevTime + (part.time - prevTime) * (offset - prevOffset) / (part.offset - prevOffset)\n };\n }\n }\n return {\n index: parts[length - 1].index,\n time: 1\n };\n },\n drawPart: function(ctx, from, to) {\n var start = this._get(from), end = this._get(to);\n for(var i = start.index, l = end.index; i <= l; i++){\n var curve = Curve.getPart(this.curves[i], i === start.index ? start.time : 0, i === end.index ? end.time : 1);\n if (i === start.index) ctx.moveTo(curve[0], curve[1]);\n ctx.bezierCurveTo.apply(ctx, curve.slice(2));\n }\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n this[name + \"At\"] = function(offset) {\n var param = this._get(offset);\n return Curve[name](this.curves[param.index], param.time);\n };\n }, {}));\n var PathFitter = Base.extend({\n initialize: function(path) {\n var points = this.points = [], segments = path._segments, closed = path._closed;\n for(var i = 0, prev, l = segments.length; i < l; i++){\n var point = segments[i].point;\n if (!prev || !prev.equals(point)) points.push(prev = point.clone());\n }\n if (closed) {\n points.unshift(points[points.length - 1]);\n points.push(points[1]);\n }\n this.closed = closed;\n },\n fit: function(error) {\n var points = this.points, length = points.length, segments = null;\n if (length > 0) {\n segments = [\n new Segment(points[0])\n ];\n if (length > 1) {\n this.fitCubic(segments, error, 0, length - 1, points[1].subtract(points[0]), points[length - 2].subtract(points[length - 1]));\n if (this.closed) {\n segments.shift();\n segments.pop();\n }\n }\n }\n return segments;\n },\n fitCubic: function(segments, error, first, last, tan1, tan2) {\n var points = this.points;\n if (last - first === 1) {\n var pt1 = points[first], pt2 = points[last], dist = pt1.getDistance(pt2) / 3;\n this.addCurve(segments, [\n pt1,\n pt1.add(tan1.normalize(dist)),\n pt2.add(tan2.normalize(dist)),\n pt2\n ]);\n return;\n }\n var uPrime = this.chordLengthParameterize(first, last), maxError = Math.max(error, error * error), split, parametersInOrder = true;\n for(var i = 0; i <= 4; i++){\n var curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n var max = this.findMaxError(first, last, curve, uPrime);\n if (max.error < error && parametersInOrder) {\n this.addCurve(segments, curve);\n return;\n }\n split = max.index;\n if (max.error >= maxError) break;\n parametersInOrder = this.reparameterize(first, last, uPrime, curve);\n maxError = max.error;\n }\n var tanCenter = points[split - 1].subtract(points[split + 1]);\n this.fitCubic(segments, error, first, split, tan1, tanCenter);\n this.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n },\n addCurve: function(segments, curve) {\n var prev = segments[segments.length - 1];\n prev.setHandleOut(curve[1].subtract(curve[0]));\n segments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n },\n generateBezier: function(first, last, uPrime, tan1, tan2) {\n var epsilon = 1e-12, abs = Math.abs, points = this.points, pt1 = points[first], pt2 = points[last], C = [\n [\n 0,\n 0\n ],\n [\n 0,\n 0\n ]\n ], X = [\n 0,\n 0\n ];\n for(var i = 0, l = last - first + 1; i < l; i++){\n var u = uPrime[i], t = 1 - u, b = 3 * u * t, b0 = t * t * t, b1 = b * t, b2 = b * u, b3 = u * u * u, a1 = tan1.normalize(b1), a2 = tan2.normalize(b2), tmp = points[first + i].subtract(pt1.multiply(b0 + b1)).subtract(pt2.multiply(b2 + b3));\n C[0][0] += a1.dot(a1);\n C[0][1] += a1.dot(a2);\n C[1][0] = C[0][1];\n C[1][1] += a2.dot(a2);\n X[0] += a1.dot(tmp);\n X[1] += a2.dot(tmp);\n }\n var detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1], alpha1, alpha2;\n if (abs(detC0C1) > epsilon) {\n var detC0X = C[0][0] * X[1] - C[1][0] * X[0], detXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n alpha1 = detXC1 / detC0C1;\n alpha2 = detC0X / detC0C1;\n } else {\n var c0 = C[0][0] + C[0][1], c1 = C[1][0] + C[1][1];\n alpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0 : abs(c1) > epsilon ? X[1] / c1 : 0;\n }\n var segLength = pt2.getDistance(pt1), eps = epsilon * segLength, handle1, handle2;\n if (alpha1 < eps || alpha2 < eps) alpha1 = alpha2 = segLength / 3;\n else {\n var line = pt2.subtract(pt1);\n handle1 = tan1.normalize(alpha1);\n handle2 = tan2.normalize(alpha2);\n if (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n alpha1 = alpha2 = segLength / 3;\n handle1 = handle2 = null;\n }\n }\n return [\n pt1,\n pt1.add(handle1 || tan1.normalize(alpha1)),\n pt2.add(handle2 || tan2.normalize(alpha2)),\n pt2\n ];\n },\n reparameterize: function(first, last, u, curve) {\n for(var i = first; i <= last; i++)u[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n for(var i = 1, l = u.length; i < l; i++){\n if (u[i] <= u[i - 1]) return false;\n }\n return true;\n },\n findRoot: function(curve, point, u) {\n var curve1 = [], curve2 = [];\n for(var i = 0; i <= 2; i++)curve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n for(var i = 0; i <= 1; i++)curve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n var pt = this.evaluate(3, curve, u), pt1 = this.evaluate(2, curve1, u), pt2 = this.evaluate(1, curve2, u), diff = pt.subtract(point), df = pt1.dot(pt1) + diff.dot(pt2);\n return Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n },\n evaluate: function(degree, curve, t) {\n var tmp = curve.slice();\n for(var i = 1; i <= degree; i++)for(var j = 0; j <= degree - i; j++)tmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n return tmp[0];\n },\n chordLengthParameterize: function(first, last) {\n var u = [\n 0\n ];\n for(var i = first + 1; i <= last; i++)u[i - first] = u[i - first - 1] + this.points[i].getDistance(this.points[i - 1]);\n for(var i = 1, m = last - first; i <= m; i++)u[i] /= u[m];\n return u;\n },\n findMaxError: function(first, last, curve, u) {\n var index = Math.floor((last - first + 1) / 2), maxDist = 0;\n for(var i = first + 1; i < last; i++){\n var P = this.evaluate(3, curve, u[i - first]);\n var v = P.subtract(this.points[i]);\n var dist = v.x * v.x + v.y * v.y;\n if (dist >= maxDist) {\n maxDist = dist;\n index = i;\n }\n }\n return {\n error: maxDist,\n index: index\n };\n }\n });\n var TextItem = Item.extend({\n _class: \"TextItem\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _serializeFields: {\n content: null\n },\n _boundsOptions: {\n stroke: false,\n handle: false\n },\n initialize: function TextItem(arg) {\n this._content = \"\";\n this._lines = [];\n var hasProps = arg && Base.isPlainObject(arg) && arg.x === undefined && arg.y === undefined;\n this._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n },\n _equals: function(item) {\n return this._content === item._content;\n },\n copyContent: function(source) {\n this.setContent(source._content);\n },\n getContent: function() {\n return this._content;\n },\n setContent: function(content) {\n this._content = \"\" + content;\n this._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n this._changed(521);\n },\n isEmpty: function() {\n return !this._content;\n },\n getCharacterStyle: \"#getStyle\",\n setCharacterStyle: \"#setStyle\",\n getParagraphStyle: \"#getStyle\",\n setParagraphStyle: \"#setStyle\"\n });\n var PointText = TextItem.extend({\n _class: \"PointText\",\n initialize: function PointText() {\n TextItem.apply(this, arguments);\n },\n getPoint: function() {\n var point = this._matrix.getTranslation();\n return new LinkedPoint(point.x, point.y, this, \"setPoint\");\n },\n setPoint: function() {\n var point = Point.read(arguments);\n this.translate(point.subtract(this._matrix.getTranslation()));\n },\n _draw: function(ctx, param, viewMatrix) {\n if (!this._content) return;\n this._setStyles(ctx, param, viewMatrix);\n var lines = this._lines, style = this._style, hasFill = style.hasFill(), hasStroke = style.hasStroke(), leading = style.getLeading(), shadowColor = ctx.shadowColor;\n ctx.font = style.getFontStyle();\n ctx.textAlign = style.getJustification();\n for(var i = 0, l = lines.length; i < l; i++){\n ctx.shadowColor = shadowColor;\n var line = lines[i];\n if (hasFill) {\n ctx.fillText(line, 0, 0);\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) ctx.strokeText(line, 0, 0);\n ctx.translate(0, leading);\n }\n },\n _getBounds: function(matrix, options) {\n var style = this._style, lines = this._lines, numLines = lines.length, justification = style.getJustification(), leading = style.getLeading(), width = this.getView().getTextWidth(style.getFontStyle(), lines), x = 0;\n if (justification !== \"left\") x -= width / (justification === \"center\" ? 2 : 1);\n var rect = new Rectangle(x, numLines ? -0.75 * leading : 0, width, numLines * leading);\n return matrix ? matrix._transformBounds(rect, rect) : rect;\n }\n });\n var Color = Base.extend(new function() {\n var types = {\n gray: [\n \"gray\"\n ],\n rgb: [\n \"red\",\n \"green\",\n \"blue\"\n ],\n hsb: [\n \"hue\",\n \"saturation\",\n \"brightness\"\n ],\n hsl: [\n \"hue\",\n \"saturation\",\n \"lightness\"\n ],\n gradient: [\n \"gradient\",\n \"origin\",\n \"destination\",\n \"highlight\"\n ]\n };\n var componentParsers = {}, namedColors = {\n transparent: [\n 0,\n 0,\n 0,\n 0\n ]\n }, colorCtx;\n function fromCSS(string) {\n var match = string.match(/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i) || string.match(/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i), type = \"rgb\", components;\n if (match) {\n var amount = match[4] ? 4 : 3;\n components = new Array(amount);\n for(var i = 0; i < amount; i++){\n var value = match[i + 1];\n components[i] = parseInt(value.length == 1 ? value + value : value, 16) / 255;\n }\n } else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n type = match[1];\n components = match[2].trim().split(/[,\\s]+/g);\n var isHSL = type === \"hsl\";\n for(var i = 0, l = Math.min(components.length, 4); i < l; i++){\n var component = components[i];\n var value = parseFloat(component);\n if (isHSL) {\n if (i === 0) {\n var unit = component.match(/([a-z]*)$/)[1];\n value *= ({\n turn: 360,\n rad: 180 / Math.PI,\n grad: 0.9\n })[unit] || 1;\n } else if (i < 3) value /= 100;\n } else if (i < 3) value /= /%$/.test(component) ? 100 : 255;\n components[i] = value;\n }\n } else {\n var color = namedColors[string];\n if (!color) {\n if (window) {\n if (!colorCtx) {\n colorCtx = CanvasProvider.getContext(1, 1, {\n willReadFrequently: true\n });\n colorCtx.globalCompositeOperation = \"copy\";\n }\n colorCtx.fillStyle = \"rgba(0,0,0,0)\";\n colorCtx.fillStyle = string;\n colorCtx.fillRect(0, 0, 1, 1);\n var data = colorCtx.getImageData(0, 0, 1, 1).data;\n color = namedColors[string] = [\n data[0] / 255,\n data[1] / 255,\n data[2] / 255\n ];\n } else color = [\n 0,\n 0,\n 0\n ];\n }\n components = color.slice();\n }\n return [\n type,\n components\n ];\n }\n var hsbIndices = [\n [\n 0,\n 3,\n 1\n ],\n [\n 2,\n 0,\n 1\n ],\n [\n 1,\n 0,\n 3\n ],\n [\n 1,\n 2,\n 0\n ],\n [\n 3,\n 1,\n 0\n ],\n [\n 0,\n 1,\n 2\n ]\n ];\n var converters = {\n \"rgb-hsb\": function(r, g, b) {\n var max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min, h = delta === 0 ? 0 : (max == r ? (g - b) / delta + (g < b ? 6 : 0) : max == g ? (b - r) / delta + 2 : (r - g) / delta + 4) * 60;\n return [\n h,\n max === 0 ? 0 : delta / max,\n max\n ];\n },\n \"hsb-rgb\": function(h, s, b) {\n h = (h / 60 % 6 + 6) % 6;\n var i = Math.floor(h), f = h - i, i = hsbIndices[i], v = [\n b,\n b * (1 - s),\n b * (1 - s * f),\n b * (1 - s * (1 - f))\n ];\n return [\n v[i[0]],\n v[i[1]],\n v[i[2]]\n ];\n },\n \"rgb-hsl\": function(r, g, b) {\n var max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min, achromatic = delta === 0, h = achromatic ? 0 : (max == r ? (g - b) / delta + (g < b ? 6 : 0) : max == g ? (b - r) / delta + 2 : (r - g) / delta + 4) * 60, l = (max + min) / 2, s = achromatic ? 0 : l < 0.5 ? delta / (max + min) : delta / (2 - max - min);\n return [\n h,\n s,\n l\n ];\n },\n \"hsl-rgb\": function(h, s, l) {\n h = (h / 360 % 1 + 1) % 1;\n if (s === 0) return [\n l,\n l,\n l\n ];\n var t3s = [\n h + 1 / 3,\n h,\n h - 1 / 3\n ], t2 = l < 0.5 ? l * (1 + s) : l + s - l * s, t1 = 2 * l - t2, c = [];\n for(var i = 0; i < 3; i++){\n var t3 = t3s[i];\n if (t3 < 0) t3 += 1;\n if (t3 > 1) t3 -= 1;\n c[i] = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 : 2 * t3 < 1 ? t2 : 3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 : t1;\n }\n return c;\n },\n \"rgb-gray\": function(r, g, b) {\n return [\n r * 0.2989 + g * 0.587 + b * 0.114\n ];\n },\n \"gray-rgb\": function(g) {\n return [\n g,\n g,\n g\n ];\n },\n \"gray-hsb\": function(g) {\n return [\n 0,\n 0,\n g\n ];\n },\n \"gray-hsl\": function(g) {\n return [\n 0,\n 0,\n g\n ];\n },\n \"gradient-rgb\": function() {\n return [];\n },\n \"rgb-gradient\": function() {\n return [];\n }\n };\n return Base.each(types, function(properties, type) {\n componentParsers[type] = [];\n Base.each(properties, function(name, index) {\n var part = Base.capitalize(name), hasOverlap = /^(hue|saturation)$/.test(name), parser = componentParsers[type][index] = type === \"gradient\" ? name === \"gradient\" ? function(value) {\n var current = this._components[0];\n value = Gradient.read(Array.isArray(value) ? value : arguments, 0, {\n readNull: true\n });\n if (current !== value) {\n if (current) current._removeOwner(this);\n if (value) value._addOwner(this);\n }\n return value;\n } : function() {\n return Point.read(arguments, 0, {\n readNull: name === \"highlight\",\n clone: true\n });\n } : function(value) {\n return value == null || isNaN(value) ? 0 : +value;\n };\n this[\"get\" + part] = function() {\n return this._type === type || hasOverlap && /^hs[bl]$/.test(this._type) ? this._components[index] : this._convert(type)[index];\n };\n this[\"set\" + part] = function(value) {\n if (this._type !== type && !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n this._components = this._convert(type);\n this._properties = types[type];\n this._type = type;\n }\n this._components[index] = parser.call(this, value);\n this._changed();\n };\n }, this);\n }, {\n _class: \"Color\",\n _readIndex: true,\n initialize: function Color(arg) {\n var args = arguments, reading = this.__read, read = 0, type, components, alpha, values;\n if (Array.isArray(arg)) {\n args = arg;\n arg = args[0];\n }\n var argType = arg != null && typeof arg;\n if (argType === \"string\" && arg in types) {\n type = arg;\n arg = args[1];\n if (Array.isArray(arg)) {\n components = arg;\n alpha = args[2];\n } else {\n if (reading) read = 1;\n args = Base.slice(args, 1);\n argType = typeof arg;\n }\n }\n if (!components) {\n values = argType === \"number\" ? args : argType === \"object\" && arg.length != null ? arg : null;\n if (values) {\n if (!type) type = values.length >= 3 ? \"rgb\" : \"gray\";\n var length = types[type].length;\n alpha = values[length];\n if (reading) read += values === arguments ? length + (alpha != null ? 1 : 0) : 1;\n if (values.length > length) values = Base.slice(values, 0, length);\n } else if (argType === \"string\") {\n var converted = fromCSS(arg);\n type = converted[0];\n components = converted[1];\n if (components.length === 4) {\n alpha = components[3];\n components.length--;\n }\n } else if (argType === \"object\") {\n if (arg.constructor === Color) {\n type = arg._type;\n components = arg._components.slice();\n alpha = arg._alpha;\n if (type === \"gradient\") for(var i = 1, l = components.length; i < l; i++){\n var point = components[i];\n if (point) components[i] = point.clone();\n }\n } else if (arg.constructor === Gradient) {\n type = \"gradient\";\n values = args;\n } else {\n type = \"hue\" in arg ? \"lightness\" in arg ? \"hsl\" : \"hsb\" : \"gradient\" in arg || \"stops\" in arg || \"radial\" in arg ? \"gradient\" : \"gray\" in arg ? \"gray\" : \"rgb\";\n var properties = types[type], parsers = componentParsers[type];\n this._components = components = [];\n for(var i = 0, l = properties.length; i < l; i++){\n var value = arg[properties[i]];\n if (value == null && !i && type === \"gradient\" && \"stops\" in arg) value = {\n stops: arg.stops,\n radial: arg.radial\n };\n value = parsers[i].call(this, value);\n if (value != null) components[i] = value;\n }\n alpha = arg.alpha;\n }\n }\n if (reading && type) read = 1;\n }\n this._type = type || \"rgb\";\n if (!components) {\n this._components = components = [];\n var parsers = componentParsers[this._type];\n for(var i = 0, l = parsers.length; i < l; i++){\n var value = parsers[i].call(this, values && values[i]);\n if (value != null) components[i] = value;\n }\n }\n this._components = components;\n this._properties = types[this._type];\n this._alpha = alpha;\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _serialize: function(options, dictionary) {\n var components = this.getComponents();\n return Base.serialize(/^(gray|rgb)$/.test(this._type) ? components : [\n this._type\n ].concat(components), options, true, dictionary);\n },\n _changed: function() {\n this._canvasStyle = null;\n if (this._owner) {\n if (this._setter) this._owner[this._setter](this);\n else this._owner._changed(129);\n }\n },\n _convert: function(type) {\n var converter;\n return this._type === type ? this._components.slice() : (converter = converters[this._type + \"-\" + type]) ? converter.apply(this, this._components) : converters[\"rgb-\" + type].apply(this, converters[this._type + \"-rgb\"].apply(this, this._components));\n },\n convert: function(type) {\n return new Color(type, this._convert(type), this._alpha);\n },\n getType: function() {\n return this._type;\n },\n setType: function(type) {\n this._components = this._convert(type);\n this._properties = types[type];\n this._type = type;\n },\n getComponents: function() {\n var components = this._components.slice();\n if (this._alpha != null) components.push(this._alpha);\n return components;\n },\n getAlpha: function() {\n return this._alpha != null ? this._alpha : 1;\n },\n setAlpha: function(alpha) {\n this._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n this._changed();\n },\n hasAlpha: function() {\n return this._alpha != null;\n },\n equals: function(color) {\n var col = Base.isPlainValue(color, true) ? Color.read(arguments) : color;\n return col === this || col && this._class === col._class && this._type === col._type && this.getAlpha() === col.getAlpha() && Base.equals(this._components, col._components) || false;\n },\n toString: function() {\n var properties = this._properties, parts = [], isGradient = this._type === \"gradient\", f = Formatter.instance;\n for(var i = 0, l = properties.length; i < l; i++){\n var value = this._components[i];\n if (value != null) parts.push(properties[i] + \": \" + (isGradient ? value : f.number(value)));\n }\n if (this._alpha != null) parts.push(\"alpha: \" + f.number(this._alpha));\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n toCSS: function(hex) {\n var components = this._convert(\"rgb\"), alpha = hex || this._alpha == null ? 1 : this._alpha;\n function convert(val) {\n return Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n }\n components = [\n convert(components[0]),\n convert(components[1]),\n convert(components[2])\n ];\n if (alpha < 1) components.push(alpha < 0 ? 0 : alpha);\n return hex ? \"#\" + (16777216 + (components[0] << 16) + (components[1] << 8) + components[2]).toString(16).slice(1) : (components.length == 4 ? \"rgba(\" : \"rgb(\") + components.join(\",\") + \")\";\n },\n toCanvasStyle: function(ctx, matrix) {\n if (this._canvasStyle) return this._canvasStyle;\n if (this._type !== \"gradient\") return this._canvasStyle = this.toCSS();\n var components = this._components, gradient = components[0], stops = gradient._stops, origin = components[1], destination = components[2], highlight = components[3], inverse = matrix && matrix.inverted(), canvasGradient;\n if (inverse) {\n origin = inverse._transformPoint(origin);\n destination = inverse._transformPoint(destination);\n if (highlight) highlight = inverse._transformPoint(highlight);\n }\n if (gradient._radial) {\n var radius = destination.getDistance(origin);\n if (highlight) {\n var vector = highlight.subtract(origin);\n if (vector.getLength() > radius) highlight = origin.add(vector.normalize(radius - 0.1));\n }\n var start = highlight || origin;\n canvasGradient = ctx.createRadialGradient(start.x, start.y, 0, origin.x, origin.y, radius);\n } else canvasGradient = ctx.createLinearGradient(origin.x, origin.y, destination.x, destination.y);\n for(var i = 0, l = stops.length; i < l; i++){\n var stop = stops[i], offset = stop._offset;\n canvasGradient.addColorStop(offset == null ? i / (l - 1) : offset, stop._color.toCanvasStyle());\n }\n return this._canvasStyle = canvasGradient;\n },\n transform: function(matrix) {\n if (this._type === \"gradient\") {\n var components = this._components;\n for(var i = 1, l = components.length; i < l; i++){\n var point = components[i];\n matrix._transformPoint(point, point, true);\n }\n this._changed();\n }\n },\n statics: {\n _types: types,\n random: function() {\n var random = Math.random;\n return new Color(random(), random(), random());\n },\n _setOwner: function(color, owner, setter) {\n if (color) {\n if (color._owner && owner && color._owner !== owner) color = color.clone();\n if (!color._owner ^ !owner) {\n color._owner = owner || null;\n color._setter = setter || null;\n }\n }\n return color;\n }\n }\n });\n }, new function() {\n var operators = {\n add: function(a, b) {\n return a + b;\n },\n subtract: function(a, b) {\n return a - b;\n },\n multiply: function(a, b) {\n return a * b;\n },\n divide: function(a, b) {\n return a / b;\n }\n };\n return Base.each(operators, function(operator, name) {\n this[name] = function(color) {\n color = Color.read(arguments);\n var type = this._type, components1 = this._components, components2 = color._convert(type);\n for(var i = 0, l = components1.length; i < l; i++)components2[i] = operator(components1[i], components2[i]);\n return new Color(type, components2, this._alpha != null ? operator(this._alpha, color.getAlpha()) : null);\n };\n }, {});\n });\n var Gradient = Base.extend({\n _class: \"Gradient\",\n initialize: function Gradient(stops, radial) {\n this._id = UID.get();\n if (stops && Base.isPlainObject(stops)) {\n this.set(stops);\n stops = radial = null;\n }\n if (this._stops == null) this.setStops(stops || [\n \"white\",\n \"black\"\n ]);\n if (this._radial == null) this.setRadial(typeof radial === \"string\" && radial === \"radial\" || radial || false);\n },\n _serialize: function(options, dictionary) {\n return dictionary.add(this, function() {\n return Base.serialize([\n this._stops,\n this._radial\n ], options, true, dictionary);\n });\n },\n _changed: function() {\n for(var i = 0, l = this._owners && this._owners.length; i < l; i++)this._owners[i]._changed();\n },\n _addOwner: function(color) {\n if (!this._owners) this._owners = [];\n this._owners.push(color);\n },\n _removeOwner: function(color) {\n var index = this._owners ? this._owners.indexOf(color) : -1;\n if (index != -1) {\n this._owners.splice(index, 1);\n if (!this._owners.length) this._owners = undefined;\n }\n },\n clone: function() {\n var stops = [];\n for(var i = 0, l = this._stops.length; i < l; i++)stops[i] = this._stops[i].clone();\n return new Gradient(stops, this._radial);\n },\n getStops: function() {\n return this._stops;\n },\n setStops: function(stops) {\n if (stops.length < 2) throw new Error(\"Gradient stop list needs to contain at least two stops.\");\n var _stops = this._stops;\n if (_stops) for(var i = 0, l = _stops.length; i < l; i++)_stops[i]._owner = undefined;\n _stops = this._stops = GradientStop.readList(stops, 0, {\n clone: true\n });\n for(var i = 0, l = _stops.length; i < l; i++)_stops[i]._owner = this;\n this._changed();\n },\n getRadial: function() {\n return this._radial;\n },\n setRadial: function(radial) {\n this._radial = radial;\n this._changed();\n },\n equals: function(gradient) {\n if (gradient === this) return true;\n if (gradient && this._class === gradient._class) {\n var stops1 = this._stops, stops2 = gradient._stops, length = stops1.length;\n if (length === stops2.length) {\n for(var i = 0; i < length; i++){\n if (!stops1[i].equals(stops2[i])) return false;\n }\n return true;\n }\n }\n return false;\n }\n });\n var GradientStop = Base.extend({\n _class: \"GradientStop\",\n initialize: function GradientStop(arg0, arg1) {\n var color = arg0, offset = arg1;\n if (typeof arg0 === \"object\" && arg1 === undefined) {\n if (Array.isArray(arg0) && typeof arg0[0] !== \"number\") {\n color = arg0[0];\n offset = arg0[1];\n } else if (\"color\" in arg0 || \"offset\" in arg0 || \"rampPoint\" in arg0) {\n color = arg0.color;\n offset = arg0.offset || arg0.rampPoint || 0;\n }\n }\n this.setColor(color);\n this.setOffset(offset);\n },\n clone: function() {\n return new GradientStop(this._color.clone(), this._offset);\n },\n _serialize: function(options, dictionary) {\n var color = this._color, offset = this._offset;\n return Base.serialize(offset == null ? [\n color\n ] : [\n color,\n offset\n ], options, true, dictionary);\n },\n _changed: function() {\n if (this._owner) this._owner._changed(129);\n },\n getOffset: function() {\n return this._offset;\n },\n setOffset: function(offset) {\n this._offset = offset;\n this._changed();\n },\n getRampPoint: \"#getOffset\",\n setRampPoint: \"#setOffset\",\n getColor: function() {\n return this._color;\n },\n setColor: function() {\n Color._setOwner(this._color, null);\n this._color = Color._setOwner(Color.read(arguments, 0), this, \"setColor\");\n this._changed();\n },\n equals: function(stop) {\n return stop === this || stop && this._class === stop._class && this._color.equals(stop._color) && this._offset == stop._offset || false;\n }\n });\n var Style = Base.extend(new function() {\n var itemDefaults = {\n fillColor: null,\n fillRule: \"nonzero\",\n strokeColor: null,\n strokeWidth: 1,\n strokeCap: \"butt\",\n strokeJoin: \"miter\",\n strokeScaling: true,\n miterLimit: 10,\n dashOffset: 0,\n dashArray: [],\n shadowColor: null,\n shadowBlur: 0,\n shadowOffset: new Point(),\n selectedColor: null\n }, groupDefaults = Base.set({}, itemDefaults, {\n fontFamily: \"sans-serif\",\n fontWeight: \"normal\",\n fontSize: 12,\n leading: null,\n justification: \"left\"\n }), textDefaults = Base.set({}, groupDefaults, {\n fillColor: new Color()\n }), flags = {\n strokeWidth: 193,\n strokeCap: 193,\n strokeJoin: 193,\n strokeScaling: 201,\n miterLimit: 193,\n fontFamily: 9,\n fontWeight: 9,\n fontSize: 9,\n font: 9,\n leading: 9,\n justification: 9\n }, item = {\n beans: true\n }, fields = {\n _class: \"Style\",\n beans: true,\n initialize: function Style(style, _owner, _project) {\n this._values = {};\n this._owner = _owner;\n this._project = _owner && _owner._project || _project || paper.project;\n this._defaults = !_owner || _owner instanceof Group ? groupDefaults : _owner instanceof TextItem ? textDefaults : itemDefaults;\n if (style) this.set(style);\n }\n };\n Base.each(groupDefaults, function(value, key) {\n var isColor = /Color$/.test(key), isPoint = key === \"shadowOffset\", part = Base.capitalize(key), flag = flags[key], set = \"set\" + part, get = \"get\" + part;\n fields[set] = function(value) {\n var owner = this._owner, children = owner && owner._children, applyToChildren = children && children.length > 0 && !(owner instanceof CompoundPath);\n if (applyToChildren) for(var i = 0, l = children.length; i < l; i++)children[i]._style[set](value);\n if ((key === \"selectedColor\" || !applyToChildren) && key in this._defaults) {\n var old = this._values[key];\n if (old !== value) {\n if (isColor) {\n if (old) {\n Color._setOwner(old, null);\n old._canvasStyle = null;\n }\n if (value && value.constructor === Color) value = Color._setOwner(value, owner, applyToChildren && set);\n }\n this._values[key] = value;\n if (owner) owner._changed(flag || 129);\n }\n }\n };\n fields[get] = function(_dontMerge) {\n var owner = this._owner, children = owner && owner._children, applyToChildren = children && children.length > 0 && !(owner instanceof CompoundPath), value;\n if (applyToChildren && !_dontMerge) for(var i = 0, l = children.length; i < l; i++){\n var childValue = children[i]._style[get]();\n if (!i) value = childValue;\n else if (!Base.equals(value, childValue)) return undefined;\n }\n else if (key in this._defaults) {\n var value = this._values[key];\n if (value === undefined) {\n value = this._defaults[key];\n if (value && value.clone) value = value.clone();\n } else {\n var ctor = isColor ? Color : isPoint ? Point : null;\n if (ctor && !(value && value.constructor === ctor)) this._values[key] = value = ctor.read([\n value\n ], 0, {\n readNull: true,\n clone: true\n });\n }\n }\n if (value && isColor) value = Color._setOwner(value, owner, applyToChildren && set);\n return value;\n };\n item[get] = function(_dontMerge) {\n return this._style[get](_dontMerge);\n };\n item[set] = function(value) {\n this._style[set](value);\n };\n });\n Base.each({\n Font: \"FontFamily\",\n WindingRule: \"FillRule\"\n }, function(value, key) {\n var get = \"get\" + key, set = \"set\" + key;\n fields[get] = item[get] = \"#get\" + value;\n fields[set] = item[set] = \"#set\" + value;\n });\n Item.inject(item);\n return fields;\n }, {\n set: function(style) {\n var isStyle = style instanceof Style, values = isStyle ? style._values : style;\n if (values) {\n for(var key in values)if (key in this._defaults) {\n var value = values[key];\n this[key] = value && isStyle && value.clone ? value.clone() : value;\n }\n }\n },\n equals: function(style) {\n function compare(style1, style2, secondary) {\n var values1 = style1._values, values2 = style2._values, defaults2 = style2._defaults;\n for(var key in values1){\n var value1 = values1[key], value2 = values2[key];\n if (!(secondary && key in values2) && !Base.equals(value1, value2 === undefined ? defaults2[key] : value2)) return false;\n }\n return true;\n }\n return style === this || style && this._class === style._class && compare(this, style) && compare(style, this, true) || false;\n },\n _dispose: function() {\n var color;\n color = this.getFillColor();\n if (color) color._canvasStyle = null;\n color = this.getStrokeColor();\n if (color) color._canvasStyle = null;\n color = this.getShadowColor();\n if (color) color._canvasStyle = null;\n },\n hasFill: function() {\n var color = this.getFillColor();\n return !!color && color.alpha > 0;\n },\n hasStroke: function() {\n var color = this.getStrokeColor();\n return !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n },\n hasShadow: function() {\n var color = this.getShadowColor();\n return !!color && color.alpha > 0 && (this.getShadowBlur() > 0 || !this.getShadowOffset().isZero());\n },\n getView: function() {\n return this._project._view;\n },\n getFontStyle: function() {\n var fontSize = this.getFontSize();\n return this.getFontWeight() + \" \" + fontSize + (/[a-z]/i.test(fontSize + \"\") ? \" \" : \"px \") + this.getFontFamily();\n },\n getFont: \"#getFontFamily\",\n setFont: \"#setFontFamily\",\n getLeading: function getLeading() {\n var leading = getLeading.base.call(this), fontSize = this.getFontSize();\n if (/pt|em|%|px/.test(fontSize)) fontSize = this.getView().getPixelSize(fontSize);\n return leading != null ? leading : fontSize * 1.2;\n }\n });\n var DomElement = new function() {\n function handlePrefix(el, name, set, value) {\n var prefixes = [\n \"\",\n \"webkit\",\n \"moz\",\n \"Moz\",\n \"ms\",\n \"o\"\n ], suffix = name[0].toUpperCase() + name.substring(1);\n for(var i = 0; i < 6; i++){\n var prefix = prefixes[i], key = prefix ? prefix + suffix : name;\n if (key in el) {\n if (set) el[key] = value;\n else return el[key];\n break;\n }\n }\n }\n return {\n getStyles: function(el) {\n var doc = el && el.nodeType !== 9 ? el.ownerDocument : el, view = doc && doc.defaultView;\n return view && view.getComputedStyle(el, \"\");\n },\n getBounds: function(el, viewport) {\n var doc = el.ownerDocument, body = doc.body, html = doc.documentElement, rect;\n try {\n rect = el.getBoundingClientRect();\n } catch (e) {\n rect = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n }\n var x = rect.left - (html.clientLeft || body.clientLeft || 0), y = rect.top - (html.clientTop || body.clientTop || 0);\n if (!viewport) {\n var view = doc.defaultView;\n x += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n y += view.pageYOffset || html.scrollTop || body.scrollTop;\n }\n return new Rectangle(x, y, rect.width, rect.height);\n },\n getViewportBounds: function(el) {\n var doc = el.ownerDocument, view = doc.defaultView, html = doc.documentElement;\n return new Rectangle(0, 0, view.innerWidth || html.clientWidth, view.innerHeight || html.clientHeight);\n },\n getOffset: function(el, viewport) {\n return DomElement.getBounds(el, viewport).getPoint();\n },\n getSize: function(el) {\n return DomElement.getBounds(el, true).getSize();\n },\n isInvisible: function(el) {\n return DomElement.getSize(el).equals(new Size(0, 0));\n },\n isInView: function(el) {\n return !DomElement.isInvisible(el) && DomElement.getViewportBounds(el).intersects(DomElement.getBounds(el, true));\n },\n isInserted: function(el) {\n return document.body.contains(el);\n },\n getPrefixed: function(el, name) {\n return el && handlePrefix(el, name);\n },\n setPrefixed: function(el, name, value) {\n if (typeof name === \"object\") for(var key in name)handlePrefix(el, key, true, name[key]);\n else handlePrefix(el, name, true, value);\n }\n };\n };\n var DomEvent = {\n add: function(el, events) {\n if (el) for(var type in events){\n var func = events[type], parts = type.split(/[\\s,]+/g);\n for(var i = 0, l = parts.length; i < l; i++){\n var name = parts[i];\n var options = el === document && (name === \"touchstart\" || name === \"touchmove\") ? {\n passive: false\n } : false;\n el.addEventListener(name, func, options);\n }\n }\n },\n remove: function(el, events) {\n if (el) for(var type in events){\n var func = events[type], parts = type.split(/[\\s,]+/g);\n for(var i = 0, l = parts.length; i < l; i++)el.removeEventListener(parts[i], func, false);\n }\n },\n getPoint: function(event) {\n var pos = event.targetTouches ? event.targetTouches.length ? event.targetTouches[0] : event.changedTouches[0] : event;\n return new Point(pos.pageX || pos.clientX + document.documentElement.scrollLeft, pos.pageY || pos.clientY + document.documentElement.scrollTop);\n },\n getTarget: function(event) {\n return event.target || event.srcElement;\n },\n getRelatedTarget: function(event) {\n return event.relatedTarget || event.toElement;\n },\n getOffset: function(event, target) {\n return DomEvent.getPoint(event).subtract(DomElement.getOffset(target || DomEvent.getTarget(event)));\n }\n };\n DomEvent.requestAnimationFrame = new function() {\n var nativeRequest = DomElement.getPrefixed(window, \"requestAnimationFrame\"), requested = false, callbacks = [], timer;\n function handleCallbacks() {\n var functions = callbacks;\n callbacks = [];\n for(var i = 0, l = functions.length; i < l; i++)functions[i]();\n requested = nativeRequest && callbacks.length;\n if (requested) nativeRequest(handleCallbacks);\n }\n return function(callback) {\n callbacks.push(callback);\n if (nativeRequest) {\n if (!requested) {\n nativeRequest(handleCallbacks);\n requested = true;\n }\n } else if (!timer) timer = setInterval(handleCallbacks, 1000 / 60);\n };\n };\n var View = Base.extend(Emitter, {\n _class: \"View\",\n initialize: function View(project, element) {\n function getSize(name) {\n return element[name] || parseInt(element.getAttribute(name), 10);\n }\n function getCanvasSize() {\n var size = DomElement.getSize(element);\n return size.isNaN() || size.isZero() ? new Size(getSize(\"width\"), getSize(\"height\")) : size;\n }\n var size;\n if (window && element) {\n this._id = element.getAttribute(\"id\");\n if (this._id == null) element.setAttribute(\"id\", this._id = \"paper-view-\" + View._id++);\n DomEvent.add(element, this._viewEvents);\n var none = \"none\";\n DomElement.setPrefixed(element.style, {\n userDrag: none,\n userSelect: none,\n touchCallout: none,\n contentZooming: none,\n tapHighlightColor: \"rgba(0,0,0,0)\"\n });\n if (PaperScope.hasAttribute(element, \"resize\")) {\n var that = this;\n DomEvent.add(window, this._windowEvents = {\n resize: function() {\n that.setViewSize(getCanvasSize());\n }\n });\n }\n size = getCanvasSize();\n if (PaperScope.hasAttribute(element, \"stats\") && typeof Stats !== \"undefined\") {\n this._stats = new Stats();\n var stats = this._stats.domElement, style = stats.style, offset = DomElement.getOffset(element);\n style.position = \"absolute\";\n style.left = offset.x + \"px\";\n style.top = offset.y + \"px\";\n document.body.appendChild(stats);\n }\n } else {\n size = new Size(element);\n element = null;\n }\n this._project = project;\n this._scope = project._scope;\n this._element = element;\n if (!this._pixelRatio) this._pixelRatio = window && window.devicePixelRatio || 1;\n this._setElementSize(size.width, size.height);\n this._viewSize = size;\n View._views.push(this);\n View._viewsById[this._id] = this;\n (this._matrix = new Matrix())._owner = this;\n if (!View._focused) View._focused = this;\n this._frameItems = {};\n this._frameItemCount = 0;\n this._itemEvents = {\n native: {},\n virtual: {}\n };\n this._autoUpdate = !paper.agent.node;\n this._needsUpdate = false;\n },\n remove: function() {\n if (!this._project) return false;\n if (View._focused === this) View._focused = null;\n View._views.splice(View._views.indexOf(this), 1);\n delete View._viewsById[this._id];\n var project = this._project;\n if (project._view === this) project._view = null;\n DomEvent.remove(this._element, this._viewEvents);\n DomEvent.remove(window, this._windowEvents);\n this._element = this._project = null;\n this.off(\"frame\");\n this._animate = false;\n this._frameItems = {};\n return true;\n },\n _events: Base.each(Item._itemHandlers.concat([\n \"onResize\",\n \"onKeyDown\",\n \"onKeyUp\"\n ]), function(name) {\n this[name] = {};\n }, {\n onFrame: {\n install: function() {\n this.play();\n },\n uninstall: function() {\n this.pause();\n }\n }\n }),\n _animate: false,\n _time: 0,\n _count: 0,\n getAutoUpdate: function() {\n return this._autoUpdate;\n },\n setAutoUpdate: function(autoUpdate) {\n this._autoUpdate = autoUpdate;\n if (autoUpdate) this.requestUpdate();\n },\n update: function() {},\n draw: function() {\n this.update();\n },\n requestUpdate: function() {\n if (!this._requested) {\n var that = this;\n DomEvent.requestAnimationFrame(function() {\n that._requested = false;\n if (that._animate) {\n that.requestUpdate();\n var element = that._element;\n if ((!DomElement.getPrefixed(document, \"hidden\") || PaperScope.getAttribute(element, \"keepalive\") === \"true\") && DomElement.isInView(element)) that._handleFrame();\n }\n if (that._autoUpdate) that.update();\n });\n this._requested = true;\n }\n },\n play: function() {\n this._animate = true;\n this.requestUpdate();\n },\n pause: function() {\n this._animate = false;\n },\n _handleFrame: function() {\n paper = this._scope;\n var now = Date.now() / 1000, delta = this._last ? now - this._last : 0;\n this._last = now;\n this.emit(\"frame\", new Base({\n delta: delta,\n time: this._time += delta,\n count: this._count++\n }));\n if (this._stats) this._stats.update();\n },\n _animateItem: function(item, animate) {\n var items = this._frameItems;\n if (animate) {\n items[item._id] = {\n item: item,\n time: 0,\n count: 0\n };\n if (++this._frameItemCount === 1) this.on(\"frame\", this._handleFrameItems);\n } else {\n delete items[item._id];\n if (--this._frameItemCount === 0) this.off(\"frame\", this._handleFrameItems);\n }\n },\n _handleFrameItems: function(event) {\n for(var i in this._frameItems){\n var entry = this._frameItems[i];\n entry.item.emit(\"frame\", new Base(event, {\n time: entry.time += event.delta,\n count: entry.count++\n }));\n }\n },\n _changed: function() {\n this._project._changed(4097);\n this._bounds = this._decomposed = undefined;\n },\n getElement: function() {\n return this._element;\n },\n getPixelRatio: function() {\n return this._pixelRatio;\n },\n getResolution: function() {\n return this._pixelRatio * 72;\n },\n getViewSize: function() {\n var size = this._viewSize;\n return new LinkedSize(size.width, size.height, this, \"setViewSize\");\n },\n setViewSize: function() {\n var size = Size.read(arguments), delta = size.subtract(this._viewSize);\n if (delta.isZero()) return;\n this._setElementSize(size.width, size.height);\n this._viewSize.set(size);\n this._changed();\n this.emit(\"resize\", {\n size: size,\n delta: delta\n });\n if (this._autoUpdate) this.update();\n },\n _setElementSize: function(width, height) {\n var element = this._element;\n if (element) {\n if (element.width !== width) element.width = width;\n if (element.height !== height) element.height = height;\n }\n },\n getBounds: function() {\n if (!this._bounds) this._bounds = this._matrix.inverted()._transformBounds(new Rectangle(new Point(), this._viewSize));\n return this._bounds;\n },\n getSize: function() {\n return this.getBounds().getSize();\n },\n isVisible: function() {\n return DomElement.isInView(this._element);\n },\n isInserted: function() {\n return DomElement.isInserted(this._element);\n },\n getPixelSize: function(size) {\n var element = this._element, pixels;\n if (element) {\n var parent = element.parentNode, temp = document.createElement(\"div\");\n temp.style.fontSize = size;\n parent.appendChild(temp);\n pixels = parseFloat(DomElement.getStyles(temp).fontSize);\n parent.removeChild(temp);\n } else pixels = parseFloat(pixels);\n return pixels;\n },\n getTextWidth: function(font, lines) {\n return 0;\n }\n }, Base.each([\n \"rotate\",\n \"scale\",\n \"shear\",\n \"skew\"\n ], function(key) {\n var rotate = key === \"rotate\";\n this[key] = function() {\n var args = arguments, value = (rotate ? Base : Point).read(args), center = Point.read(args, 0, {\n readNull: true\n });\n return this.transform(new Matrix()[key](value, center || this.getCenter(true)));\n };\n }, {\n _decompose: function() {\n return this._decomposed || (this._decomposed = this._matrix.decompose());\n },\n translate: function() {\n var mx = new Matrix();\n return this.transform(mx.translate.apply(mx, arguments));\n },\n getCenter: function() {\n return this.getBounds().getCenter();\n },\n setCenter: function() {\n var center = Point.read(arguments);\n this.translate(this.getCenter().subtract(center));\n },\n getZoom: function() {\n var scaling = this._decompose().scaling;\n return (scaling.x + scaling.y) / 2;\n },\n setZoom: function(zoom) {\n this.transform(new Matrix().scale(zoom / this.getZoom(), this.getCenter()));\n },\n getRotation: function() {\n return this._decompose().rotation;\n },\n setRotation: function(rotation) {\n var current = this.getRotation();\n if (current != null && rotation != null) this.rotate(rotation - current);\n },\n getScaling: function() {\n var scaling = this._decompose().scaling;\n return new LinkedPoint(scaling.x, scaling.y, this, \"setScaling\");\n },\n setScaling: function() {\n var current = this.getScaling(), scaling = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n if (current && scaling) this.scale(scaling.x / current.x, scaling.y / current.y);\n },\n getMatrix: function() {\n return this._matrix;\n },\n setMatrix: function() {\n var matrix = this._matrix;\n matrix.set.apply(matrix, arguments);\n },\n transform: function(matrix) {\n this._matrix.append(matrix);\n },\n scrollBy: function() {\n this.translate(Point.read(arguments).negate());\n }\n }), {\n projectToView: function() {\n return this._matrix._transformPoint(Point.read(arguments));\n },\n viewToProject: function() {\n return this._matrix._inverseTransform(Point.read(arguments));\n },\n getEventPoint: function(event) {\n return this.viewToProject(DomEvent.getOffset(event, this._element));\n }\n }, {\n statics: {\n _views: [],\n _viewsById: {},\n _id: 0,\n create: function(project, element) {\n if (document && typeof element === \"string\") element = document.getElementById(element);\n var ctor = window ? CanvasView : View;\n return new ctor(project, element);\n }\n }\n }, new function() {\n if (!window) return;\n var prevFocus, tempFocus, dragging = false, mouseDown = false;\n function getView(event) {\n var target = DomEvent.getTarget(event);\n return target.getAttribute && View._viewsById[target.getAttribute(\"id\")];\n }\n function updateFocus() {\n var view = View._focused;\n if (!view || !view.isVisible()) {\n for(var i = 0, l = View._views.length; i < l; i++)if ((view = View._views[i]).isVisible()) {\n View._focused = tempFocus = view;\n break;\n }\n }\n }\n function handleMouseMove(view, event, point) {\n view._handleMouseEvent(\"mousemove\", event, point);\n }\n var navigator = window.navigator, mousedown, mousemove, mouseup;\n if (navigator.pointerEnabled || navigator.msPointerEnabled) {\n mousedown = \"pointerdown MSPointerDown\";\n mousemove = \"pointermove MSPointerMove\";\n mouseup = \"pointerup pointercancel MSPointerUp MSPointerCancel\";\n } else {\n mousedown = \"touchstart\";\n mousemove = \"touchmove\";\n mouseup = \"touchend touchcancel\";\n if (!(\"ontouchstart\" in window && navigator.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n mousedown += \" mousedown\";\n mousemove += \" mousemove\";\n mouseup += \" mouseup\";\n }\n }\n var viewEvents = {}, docEvents = {\n mouseout: function(event) {\n var view = View._focused, target = DomEvent.getRelatedTarget(event);\n if (view && (!target || target.nodeName === \"HTML\")) {\n var offset = DomEvent.getOffset(event, view._element), x = offset.x, abs = Math.abs, ax = abs(x), max = 33554432, diff = ax - max;\n offset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n handleMouseMove(view, event, view.viewToProject(offset));\n }\n },\n scroll: updateFocus\n };\n viewEvents[mousedown] = function(event) {\n var view = View._focused = getView(event);\n if (!dragging) {\n dragging = true;\n view._handleMouseEvent(\"mousedown\", event);\n }\n };\n docEvents[mousemove] = function(event) {\n var view = View._focused;\n if (!mouseDown) {\n var target = getView(event);\n if (target) {\n if (view !== target) {\n if (view) handleMouseMove(view, event);\n if (!prevFocus) prevFocus = view;\n view = View._focused = tempFocus = target;\n }\n } else if (tempFocus && tempFocus === view) {\n if (prevFocus && !prevFocus.isInserted()) prevFocus = null;\n view = View._focused = prevFocus;\n prevFocus = null;\n updateFocus();\n }\n }\n if (view) handleMouseMove(view, event);\n };\n docEvents[mousedown] = function() {\n mouseDown = true;\n };\n docEvents[mouseup] = function(event) {\n var view = View._focused;\n if (view && dragging) view._handleMouseEvent(\"mouseup\", event);\n mouseDown = dragging = false;\n };\n DomEvent.add(document, docEvents);\n DomEvent.add(window, {\n load: updateFocus\n });\n var called = false, prevented = false, fallbacks = {\n doubleclick: \"click\",\n mousedrag: \"mousemove\"\n }, wasInView = false, overView, downPoint, lastPoint, downItem, overItem, dragItem, clickItem, clickTime, dblClick;\n function emitMouseEvent(obj, target, type, event, point, prevPoint, stopItem) {\n var stopped = false, mouseEvent;\n function emit(obj, type) {\n if (obj.responds(type)) {\n if (!mouseEvent) mouseEvent = new MouseEvent(type, event, point, target || obj, prevPoint ? point.subtract(prevPoint) : null);\n if (obj.emit(type, mouseEvent)) {\n called = true;\n if (mouseEvent.prevented) prevented = true;\n if (mouseEvent.stopped) return stopped = true;\n }\n } else {\n var fallback = fallbacks[type];\n if (fallback) return emit(obj, fallback);\n }\n }\n while(obj && obj !== stopItem){\n if (emit(obj, type)) break;\n obj = obj._parent;\n }\n return stopped;\n }\n function emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n view._project.removeOn(type);\n prevented = called = false;\n return dragItem && emitMouseEvent(dragItem, null, type, event, point, prevPoint) || hitItem && hitItem !== dragItem && !hitItem.isDescendant(dragItem) && emitMouseEvent(hitItem, null, type === \"mousedrag\" ? \"mousemove\" : type, event, point, prevPoint, dragItem) || emitMouseEvent(view, dragItem || hitItem || view, type, event, point, prevPoint);\n }\n var itemEventsMap = {\n mousedown: {\n mousedown: 1,\n mousedrag: 1,\n click: 1,\n doubleclick: 1\n },\n mouseup: {\n mouseup: 1,\n mousedrag: 1,\n click: 1,\n doubleclick: 1\n },\n mousemove: {\n mousedrag: 1,\n mousemove: 1,\n mouseenter: 1,\n mouseleave: 1\n }\n };\n return {\n _viewEvents: viewEvents,\n _handleMouseEvent: function(type, event, point) {\n var itemEvents = this._itemEvents, hitItems = itemEvents.native[type], nativeMove = type === \"mousemove\", tool = this._scope.tool, view = this;\n function responds(type) {\n return itemEvents.virtual[type] || view.responds(type) || tool && tool.responds(type);\n }\n if (nativeMove && dragging && responds(\"mousedrag\")) type = \"mousedrag\";\n if (!point) point = this.getEventPoint(event);\n var inView = this.getBounds().contains(point), hit = hitItems && inView && view._project.hitTest(point, {\n tolerance: 0,\n fill: true,\n stroke: true\n }), hitItem = hit && hit.item || null, handle = false, mouse = {};\n mouse[type.substr(5)] = true;\n if (hitItems && hitItem !== overItem) {\n if (overItem) emitMouseEvent(overItem, null, \"mouseleave\", event, point);\n if (hitItem) emitMouseEvent(hitItem, null, \"mouseenter\", event, point);\n overItem = hitItem;\n }\n if (wasInView ^ inView) {\n emitMouseEvent(this, null, inView ? \"mouseenter\" : \"mouseleave\", event, point);\n overView = inView ? this : null;\n handle = true;\n }\n if ((inView || mouse.drag) && !point.equals(lastPoint)) {\n emitMouseEvents(this, hitItem, nativeMove ? type : \"mousemove\", event, point, lastPoint);\n handle = true;\n }\n wasInView = inView;\n if (mouse.down && inView || mouse.up && downPoint) {\n emitMouseEvents(this, hitItem, type, event, point, downPoint);\n if (mouse.down) {\n dblClick = hitItem === clickItem && Date.now() - clickTime < 300;\n downItem = clickItem = hitItem;\n if (!prevented && hitItem) {\n var item = hitItem;\n while(item && !item.responds(\"mousedrag\"))item = item._parent;\n if (item) dragItem = hitItem;\n }\n downPoint = point;\n } else if (mouse.up) {\n if (!prevented && hitItem === downItem) {\n clickTime = Date.now();\n emitMouseEvents(this, hitItem, dblClick ? \"doubleclick\" : \"click\", event, point, downPoint);\n dblClick = false;\n }\n downItem = dragItem = null;\n }\n wasInView = false;\n handle = true;\n }\n lastPoint = point;\n if (handle && tool) called = tool._handleMouseEvent(type, event, point, mouse) || called;\n if (event.cancelable !== false && (called && !mouse.move || mouse.down && responds(\"mouseup\"))) event.preventDefault();\n },\n _handleKeyEvent: function(type, event, key, character) {\n var scope = this._scope, tool = scope.tool, keyEvent;\n function emit(obj) {\n if (obj.responds(type)) {\n paper = scope;\n obj.emit(type, keyEvent = keyEvent || new KeyEvent(type, event, key, character));\n }\n }\n if (this.isVisible()) {\n emit(this);\n if (tool && tool.responds(type)) emit(tool);\n }\n },\n _countItemEvent: function(type, sign) {\n var itemEvents = this._itemEvents, native = itemEvents.native, virtual = itemEvents.virtual;\n for(var key in itemEventsMap)native[key] = (native[key] || 0) + (itemEventsMap[key][type] || 0) * sign;\n virtual[type] = (virtual[type] || 0) + sign;\n },\n statics: {\n updateFocus: updateFocus,\n _resetState: function() {\n dragging = mouseDown = called = wasInView = false;\n prevFocus = tempFocus = overView = downPoint = lastPoint = downItem = overItem = dragItem = clickItem = clickTime = dblClick = null;\n }\n }\n };\n });\n var CanvasView = View.extend({\n _class: \"CanvasView\",\n initialize: function CanvasView(project, canvas) {\n if (!(canvas instanceof window.HTMLCanvasElement)) {\n var size = Size.read(arguments, 1);\n if (size.isZero()) throw new Error(\"Cannot create CanvasView with the provided argument: \" + Base.slice(arguments, 1));\n canvas = CanvasProvider.getCanvas(size);\n }\n var ctx = this._context = canvas.getContext(\"2d\");\n ctx.save();\n this._pixelRatio = 1;\n if (!/^off|false$/.test(PaperScope.getAttribute(canvas, \"hidpi\"))) {\n var deviceRatio = window.devicePixelRatio || 1, backingStoreRatio = DomElement.getPrefixed(ctx, \"backingStorePixelRatio\") || 1;\n this._pixelRatio = deviceRatio / backingStoreRatio;\n }\n View.call(this, project, canvas);\n this._needsUpdate = true;\n },\n remove: function remove() {\n this._context.restore();\n return remove.base.call(this);\n },\n _setElementSize: function _setElementSize(width, height) {\n var pixelRatio = this._pixelRatio;\n _setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n if (pixelRatio !== 1) {\n var element = this._element, ctx = this._context;\n if (!PaperScope.hasAttribute(element, \"resize\")) {\n var style = element.style;\n style.width = width + \"px\";\n style.height = height + \"px\";\n }\n ctx.restore();\n ctx.save();\n ctx.scale(pixelRatio, pixelRatio);\n }\n },\n getContext: function() {\n return this._context;\n },\n getPixelSize: function getPixelSize(size) {\n var agent = paper.agent, pixels;\n if (agent && agent.firefox) pixels = getPixelSize.base.call(this, size);\n else {\n var ctx = this._context, prevFont = ctx.font;\n ctx.font = size + \" serif\";\n pixels = parseFloat(ctx.font);\n ctx.font = prevFont;\n }\n return pixels;\n },\n getTextWidth: function(font, lines) {\n var ctx = this._context, prevFont = ctx.font, width = 0;\n ctx.font = font;\n for(var i = 0, l = lines.length; i < l; i++)width = Math.max(width, ctx.measureText(lines[i]).width);\n ctx.font = prevFont;\n return width;\n },\n update: function() {\n if (!this._needsUpdate) return false;\n var project = this._project, ctx = this._context, size = this._viewSize;\n ctx.clearRect(0, 0, size.width + 1, size.height + 1);\n if (project) project.draw(ctx, this._matrix, this._pixelRatio);\n this._needsUpdate = false;\n return true;\n }\n });\n var Event = Base.extend({\n _class: \"Event\",\n initialize: function Event(event) {\n this.event = event;\n this.type = event && event.type;\n },\n prevented: false,\n stopped: false,\n preventDefault: function() {\n this.prevented = true;\n this.event.preventDefault();\n },\n stopPropagation: function() {\n this.stopped = true;\n this.event.stopPropagation();\n },\n stop: function() {\n this.stopPropagation();\n this.preventDefault();\n },\n getTimeStamp: function() {\n return this.event.timeStamp;\n },\n getModifiers: function() {\n return Key.modifiers;\n }\n });\n var KeyEvent = Event.extend({\n _class: \"KeyEvent\",\n initialize: function KeyEvent(type, event, key, character) {\n this.type = type;\n this.event = event;\n this.key = key;\n this.character = character;\n },\n toString: function() {\n return \"{ type: '\" + this.type + \"', key: '\" + this.key + \"', character: '\" + this.character + \"', modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var Key = new function() {\n var keyLookup = {\n \"\t\": \"tab\",\n \" \": \"space\",\n \"\\b\": \"backspace\",\n \"\\x7f\": \"delete\",\n \"Spacebar\": \"space\",\n \"Del\": \"delete\",\n \"Win\": \"meta\",\n \"Esc\": \"escape\"\n }, charLookup = {\n \"tab\": \"\t\",\n \"space\": \" \",\n \"enter\": \"\\r\"\n }, keyMap = {}, charMap = {}, metaFixMap, downKey, modifiers = new Base({\n shift: false,\n control: false,\n alt: false,\n meta: false,\n capsLock: false,\n space: false\n }).inject({\n option: {\n get: function() {\n return this.alt;\n }\n },\n command: {\n get: function() {\n var agent = paper && paper.agent;\n return agent && agent.mac ? this.meta : this.control;\n }\n }\n });\n function getKey(event) {\n var key = event.key || event.keyIdentifier;\n key = /^U\\+/.test(key) ? String.fromCharCode(parseInt(key.substr(2), 16)) : /^Arrow[A-Z]/.test(key) ? key.substr(5) : key === \"Unidentified\" || key === undefined ? String.fromCharCode(event.keyCode) : key;\n return keyLookup[key] || (key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n }\n function handleKey(down, key, character, event) {\n var type = down ? \"keydown\" : \"keyup\", view = View._focused, name;\n keyMap[key] = down;\n if (down) charMap[key] = character;\n else delete charMap[key];\n if (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n modifiers[name] = down;\n var agent = paper && paper.agent;\n if (name === \"meta\" && agent && agent.mac) {\n if (down) metaFixMap = {};\n else {\n for(var k in metaFixMap)if (k in charMap) handleKey(false, k, metaFixMap[k], event);\n metaFixMap = null;\n }\n }\n } else if (down && metaFixMap) metaFixMap[key] = character;\n if (view) view._handleKeyEvent(down ? \"keydown\" : \"keyup\", event, key, character);\n }\n DomEvent.add(document, {\n keydown: function(event) {\n var key = getKey(event), agent = paper && paper.agent;\n if (key.length > 1 || agent && agent.chrome && (event.altKey || agent.mac && event.metaKey || !agent.mac && event.ctrlKey)) handleKey(true, key, charLookup[key] || (key.length > 1 ? \"\" : key), event);\n else downKey = key;\n },\n keypress: function(event) {\n if (downKey) {\n var key = getKey(event), code = event.charCode, character = code >= 32 ? String.fromCharCode(code) : key.length > 1 ? \"\" : key;\n if (key !== downKey) key = character.toLowerCase();\n handleKey(true, key, character, event);\n downKey = null;\n }\n },\n keyup: function(event) {\n var key = getKey(event);\n if (key in charMap) handleKey(false, key, charMap[key], event);\n }\n });\n DomEvent.add(window, {\n blur: function(event) {\n for(var key in charMap)handleKey(false, key, charMap[key], event);\n }\n });\n return {\n modifiers: modifiers,\n isDown: function(key) {\n return !!keyMap[key];\n }\n };\n };\n var MouseEvent = Event.extend({\n _class: \"MouseEvent\",\n initialize: function MouseEvent(type, event, point, target, delta) {\n this.type = type;\n this.event = event;\n this.point = point;\n this.target = target;\n this.delta = delta;\n },\n toString: function() {\n return \"{ type: '\" + this.type + \"', point: \" + this.point + \", target: \" + this.target + (this.delta ? \", delta: \" + this.delta : \"\") + \", modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var ToolEvent = Event.extend({\n _class: \"ToolEvent\",\n _item: null,\n initialize: function ToolEvent(tool, type, event) {\n this.tool = tool;\n this.type = type;\n this.event = event;\n },\n _choosePoint: function(point, toolPoint) {\n return point ? point : toolPoint ? toolPoint.clone() : null;\n },\n getPoint: function() {\n return this._choosePoint(this._point, this.tool._point);\n },\n setPoint: function(point) {\n this._point = point;\n },\n getLastPoint: function() {\n return this._choosePoint(this._lastPoint, this.tool._lastPoint);\n },\n setLastPoint: function(lastPoint) {\n this._lastPoint = lastPoint;\n },\n getDownPoint: function() {\n return this._choosePoint(this._downPoint, this.tool._downPoint);\n },\n setDownPoint: function(downPoint) {\n this._downPoint = downPoint;\n },\n getMiddlePoint: function() {\n if (!this._middlePoint && this.tool._lastPoint) return this.tool._point.add(this.tool._lastPoint).divide(2);\n return this._middlePoint;\n },\n setMiddlePoint: function(middlePoint) {\n this._middlePoint = middlePoint;\n },\n getDelta: function() {\n return !this._delta && this.tool._lastPoint ? this.tool._point.subtract(this.tool._lastPoint) : this._delta;\n },\n setDelta: function(delta) {\n this._delta = delta;\n },\n getCount: function() {\n return this.tool[/^mouse(down|up)$/.test(this.type) ? \"_downCount\" : \"_moveCount\"];\n },\n setCount: function(count) {\n this.tool[/^mouse(down|up)$/.test(this.type) ? \"downCount\" : \"count\"] = count;\n },\n getItem: function() {\n if (!this._item) {\n var result = this.tool._scope.project.hitTest(this.getPoint());\n if (result) {\n var item = result.item, parent = item._parent;\n while(/^(Group|CompoundPath)$/.test(parent._class)){\n item = parent;\n parent = parent._parent;\n }\n this._item = item;\n }\n }\n return this._item;\n },\n setItem: function(item) {\n this._item = item;\n },\n toString: function() {\n return \"{ type: \" + this.type + \", point: \" + this.getPoint() + \", count: \" + this.getCount() + \", modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var Tool = PaperScopeItem.extend({\n _class: \"Tool\",\n _list: \"tools\",\n _reference: \"tool\",\n _events: [\n \"onMouseDown\",\n \"onMouseUp\",\n \"onMouseDrag\",\n \"onMouseMove\",\n \"onActivate\",\n \"onDeactivate\",\n \"onEditOptions\",\n \"onKeyDown\",\n \"onKeyUp\"\n ],\n initialize: function Tool(props) {\n PaperScopeItem.call(this);\n this._moveCount = -1;\n this._downCount = -1;\n this.set(props);\n },\n getMinDistance: function() {\n return this._minDistance;\n },\n setMinDistance: function(minDistance) {\n this._minDistance = minDistance;\n if (minDistance != null && this._maxDistance != null && minDistance > this._maxDistance) this._maxDistance = minDistance;\n },\n getMaxDistance: function() {\n return this._maxDistance;\n },\n setMaxDistance: function(maxDistance) {\n this._maxDistance = maxDistance;\n if (this._minDistance != null && maxDistance != null && maxDistance < this._minDistance) this._minDistance = maxDistance;\n },\n getFixedDistance: function() {\n return this._minDistance == this._maxDistance ? this._minDistance : null;\n },\n setFixedDistance: function(distance) {\n this._minDistance = this._maxDistance = distance;\n },\n _handleMouseEvent: function(type, event, point, mouse) {\n paper = this._scope;\n if (mouse.drag && !this.responds(type)) type = \"mousemove\";\n var move = mouse.move || mouse.drag, responds = this.responds(type), minDistance = this.minDistance, maxDistance = this.maxDistance, called = false, tool = this;\n function update(minDistance, maxDistance) {\n var pt = point, toolPoint = move ? tool._point : tool._downPoint || pt;\n if (move) {\n if (tool._moveCount >= 0 && pt.equals(toolPoint)) return false;\n if (toolPoint && (minDistance != null || maxDistance != null)) {\n var vector = pt.subtract(toolPoint), distance = vector.getLength();\n if (distance < (minDistance || 0)) return false;\n if (maxDistance) pt = toolPoint.add(vector.normalize(Math.min(distance, maxDistance)));\n }\n tool._moveCount++;\n }\n tool._point = pt;\n tool._lastPoint = toolPoint || pt;\n if (mouse.down) {\n tool._moveCount = -1;\n tool._downPoint = pt;\n tool._downCount++;\n }\n return true;\n }\n function emit() {\n if (responds) called = tool.emit(type, new ToolEvent(tool, type, event)) || called;\n }\n if (mouse.down) {\n update();\n emit();\n } else if (mouse.up) {\n update(null, maxDistance);\n emit();\n } else if (responds) while(update(minDistance, maxDistance))emit();\n return called;\n }\n });\n var Tween = Base.extend(Emitter, {\n _class: \"Tween\",\n statics: {\n easings: new Base({\n linear: function(t) {\n return t;\n },\n easeInQuad: function(t) {\n return t * t;\n },\n easeOutQuad: function(t) {\n return t * (2 - t);\n },\n easeInOutQuad: function(t) {\n return t < 0.5 ? 2 * t * t : -1 + 2 * (2 - t) * t;\n },\n easeInCubic: function(t) {\n return t * t * t;\n },\n easeOutCubic: function(t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function(t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function(t) {\n return t * t * t * t;\n },\n easeOutQuart: function(t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function(t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function(t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function(t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n }\n })\n },\n initialize: function Tween(object, from, to, duration, easing, start) {\n this.object = object;\n var type = typeof easing;\n var isFunction = type === \"function\";\n this.type = isFunction ? type : type === \"string\" ? easing : \"linear\";\n this.easing = isFunction ? easing : Tween.easings[this.type];\n this.duration = duration;\n this.running = false;\n this._then = null;\n this._startTime = null;\n var state = from || to;\n this._keys = state ? Object.keys(state) : [];\n this._parsedKeys = this._parseKeys(this._keys);\n this._from = state && this._getState(from);\n this._to = state && this._getState(to);\n if (start !== false) this.start();\n },\n then: function(then) {\n this._then = then;\n return this;\n },\n start: function() {\n this._startTime = null;\n this.running = true;\n return this;\n },\n stop: function() {\n this.running = false;\n return this;\n },\n update: function(progress) {\n if (this.running) {\n if (progress >= 1) {\n progress = 1;\n this.running = false;\n }\n var factor = this.easing(progress), keys = this._keys, getValue = function(value) {\n return typeof value === \"function\" ? value(factor, progress) : value;\n };\n for(var i = 0, l = keys && keys.length; i < l; i++){\n var key = keys[i], from = getValue(this._from[key]), to = getValue(this._to[key]), value = from && to && from.__add && to.__add ? to.__subtract(from).__multiply(factor).__add(from) : (to - from) * factor + from;\n this._setProperty(this._parsedKeys[key], value);\n }\n if (this.responds(\"update\")) this.emit(\"update\", new Base({\n progress: progress,\n factor: factor\n }));\n if (!this.running && this._then) this._then(this.object);\n }\n return this;\n },\n _events: {\n onUpdate: {}\n },\n _handleFrame: function(time) {\n var startTime = this._startTime, progress = startTime ? (time - startTime) / this.duration : 0;\n if (!startTime) this._startTime = time;\n this.update(progress);\n },\n _getState: function(state) {\n var keys = this._keys, result = {};\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i], path = this._parsedKeys[key], current = this._getProperty(path), value;\n if (state) {\n var resolved = this._resolveValue(current, state[key]);\n this._setProperty(path, resolved);\n value = this._getProperty(path);\n value = value && value.clone ? value.clone() : value;\n this._setProperty(path, current);\n } else value = current && current.clone ? current.clone() : current;\n result[key] = value;\n }\n return result;\n },\n _resolveValue: function(current, value) {\n if (value) {\n if (Array.isArray(value) && value.length === 2) {\n var operator = value[0];\n return operator && operator.match && operator.match(/^[+\\-\\*\\/]=/) ? this._calculate(current, operator[0], value[1]) : value;\n } else if (typeof value === \"string\") {\n var match = value.match(/^[+\\-*/]=(.*)/);\n if (match) {\n var parsed = JSON.parse(match[1].replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g, '\"$2\": '));\n return this._calculate(current, value[0], parsed);\n }\n }\n }\n return value;\n },\n _calculate: function(left, operator, right) {\n return paper.PaperScript.calculateBinary(left, operator, right);\n },\n _parseKeys: function(keys) {\n var parsed = {};\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i], path = key.replace(/\\.([^.]*)/g, \"/$1\").replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, \"/$1\");\n parsed[key] = path.split(\"/\");\n }\n return parsed;\n },\n _getProperty: function(path, offset) {\n var obj = this.object;\n for(var i = 0, l = path.length - (offset || 0); i < l && obj; i++)obj = obj[path[i]];\n return obj;\n },\n _setProperty: function(path, value) {\n var dest = this._getProperty(path, 1);\n if (dest) dest[path[path.length - 1]] = value;\n }\n });\n var Http = {\n request: function(options) {\n var xhr = new self1.XMLHttpRequest();\n xhr.open((options.method || \"get\").toUpperCase(), options.url, Base.pick(options.async, true));\n if (options.mimeType) xhr.overrideMimeType(options.mimeType);\n xhr.onload = function() {\n var status = xhr.status;\n if (status === 0 || status === 200) {\n if (options.onLoad) options.onLoad.call(xhr, xhr.responseText);\n } else xhr.onerror();\n };\n xhr.onerror = function() {\n var status = xhr.status, message = 'Could not load \"' + options.url + '\" (Status: ' + status + \")\";\n if (options.onError) options.onError(message, status);\n else throw new Error(message);\n };\n return xhr.send(null);\n }\n };\n var CanvasProvider = Base.exports.CanvasProvider = {\n canvases: [],\n getCanvas: function(width, height, options) {\n if (!window) return null;\n var canvas, clear = true;\n if (typeof width === \"object\") {\n height = width.height;\n width = width.width;\n }\n if (this.canvases.length) canvas = this.canvases.pop();\n else {\n canvas = document.createElement(\"canvas\");\n clear = false;\n }\n var ctx = canvas.getContext(\"2d\", options || {});\n if (!ctx) throw new Error(\"Canvas \" + canvas + \" is unable to provide a 2D context.\");\n if (canvas.width === width && canvas.height === height) {\n if (clear) ctx.clearRect(0, 0, width + 1, height + 1);\n } else {\n canvas.width = width;\n canvas.height = height;\n }\n ctx.save();\n return canvas;\n },\n getContext: function(width, height, options) {\n var canvas = this.getCanvas(width, height, options);\n return canvas ? canvas.getContext(\"2d\", options || {}) : null;\n },\n release: function(obj) {\n var canvas = obj && obj.canvas ? obj.canvas : obj;\n if (canvas && canvas.getContext) {\n canvas.getContext(\"2d\").restore();\n this.canvases.push(canvas);\n }\n }\n };\n var BlendMode = new function() {\n var min = Math.min, max = Math.max, abs = Math.abs, sr, sg, sb, sa, br, bg, bb, ba, dr, dg, db;\n function getLum(r, g, b) {\n return 0.2989 * r + 0.587 * g + 0.114 * b;\n }\n function setLum(r, g, b, l) {\n var d = l - getLum(r, g, b);\n dr = r + d;\n dg = g + d;\n db = b + d;\n var l = getLum(dr, dg, db), mn = min(dr, dg, db), mx = max(dr, dg, db);\n if (mn < 0) {\n var lmn = l - mn;\n dr = l + (dr - l) * l / lmn;\n dg = l + (dg - l) * l / lmn;\n db = l + (db - l) * l / lmn;\n }\n if (mx > 255) {\n var ln = 255 - l, mxl = mx - l;\n dr = l + (dr - l) * ln / mxl;\n dg = l + (dg - l) * ln / mxl;\n db = l + (db - l) * ln / mxl;\n }\n }\n function getSat(r, g, b) {\n return max(r, g, b) - min(r, g, b);\n }\n function setSat(r, g, b, s) {\n var col = [\n r,\n g,\n b\n ], mx = max(r, g, b), mn = min(r, g, b), md;\n mn = mn === r ? 0 : mn === g ? 1 : 2;\n mx = mx === r ? 0 : mx === g ? 1 : 2;\n md = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n if (col[mx] > col[mn]) {\n col[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n col[mx] = s;\n } else col[md] = col[mx] = 0;\n col[mn] = 0;\n dr = col[0];\n dg = col[1];\n db = col[2];\n }\n var modes = {\n multiply: function() {\n dr = br * sr / 255;\n dg = bg * sg / 255;\n db = bb * sb / 255;\n },\n screen: function() {\n dr = br + sr - br * sr / 255;\n dg = bg + sg - bg * sg / 255;\n db = bb + sb - bb * sb / 255;\n },\n overlay: function() {\n dr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n dg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n db = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n },\n \"soft-light\": function() {\n var t = sr * br / 255;\n dr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n t = sg * bg / 255;\n dg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n t = sb * bb / 255;\n db = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n },\n \"hard-light\": function() {\n dr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n dg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n db = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n },\n \"color-dodge\": function() {\n dr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n dg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n db = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n },\n \"color-burn\": function() {\n dr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n dg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n db = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n },\n darken: function() {\n dr = br < sr ? br : sr;\n dg = bg < sg ? bg : sg;\n db = bb < sb ? bb : sb;\n },\n lighten: function() {\n dr = br > sr ? br : sr;\n dg = bg > sg ? bg : sg;\n db = bb > sb ? bb : sb;\n },\n difference: function() {\n dr = br - sr;\n if (dr < 0) dr = -dr;\n dg = bg - sg;\n if (dg < 0) dg = -dg;\n db = bb - sb;\n if (db < 0) db = -db;\n },\n exclusion: function() {\n dr = br + sr * (255 - br - br) / 255;\n dg = bg + sg * (255 - bg - bg) / 255;\n db = bb + sb * (255 - bb - bb) / 255;\n },\n hue: function() {\n setSat(sr, sg, sb, getSat(br, bg, bb));\n setLum(dr, dg, db, getLum(br, bg, bb));\n },\n saturation: function() {\n setSat(br, bg, bb, getSat(sr, sg, sb));\n setLum(dr, dg, db, getLum(br, bg, bb));\n },\n luminosity: function() {\n setLum(br, bg, bb, getLum(sr, sg, sb));\n },\n color: function() {\n setLum(sr, sg, sb, getLum(br, bg, bb));\n },\n add: function() {\n dr = min(br + sr, 255);\n dg = min(bg + sg, 255);\n db = min(bb + sb, 255);\n },\n subtract: function() {\n dr = max(br - sr, 0);\n dg = max(bg - sg, 0);\n db = max(bb - sb, 0);\n },\n average: function() {\n dr = (br + sr) / 2;\n dg = (bg + sg) / 2;\n db = (bb + sb) / 2;\n },\n negation: function() {\n dr = 255 - abs(255 - sr - br);\n dg = 255 - abs(255 - sg - bg);\n db = 255 - abs(255 - sb - bb);\n }\n };\n var nativeModes = this.nativeModes = Base.each([\n \"source-over\",\n \"source-in\",\n \"source-out\",\n \"source-atop\",\n \"destination-over\",\n \"destination-in\",\n \"destination-out\",\n \"destination-atop\",\n \"lighter\",\n \"darker\",\n \"copy\",\n \"xor\"\n ], function(mode) {\n this[mode] = true;\n }, {});\n var ctx = CanvasProvider.getContext(1, 1, {\n willReadFrequently: true\n });\n if (ctx) {\n Base.each(modes, function(func, mode) {\n var darken = mode === \"darken\", ok = false;\n ctx.save();\n try {\n ctx.fillStyle = darken ? \"#300\" : \"#a00\";\n ctx.fillRect(0, 0, 1, 1);\n ctx.globalCompositeOperation = mode;\n if (ctx.globalCompositeOperation === mode) {\n ctx.fillStyle = darken ? \"#a00\" : \"#300\";\n ctx.fillRect(0, 0, 1, 1);\n ok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken ? 170 : 51;\n }\n } catch (e) {}\n ctx.restore();\n nativeModes[mode] = ok;\n });\n CanvasProvider.release(ctx);\n }\n this.process = function(mode, srcContext, dstContext, alpha, offset) {\n var srcCanvas = srcContext.canvas, normal = mode === \"normal\";\n if (normal || nativeModes[mode]) {\n dstContext.save();\n dstContext.setTransform(1, 0, 0, 1, 0, 0);\n dstContext.globalAlpha = alpha;\n if (!normal) dstContext.globalCompositeOperation = mode;\n dstContext.drawImage(srcCanvas, offset.x, offset.y);\n dstContext.restore();\n } else {\n var process = modes[mode];\n if (!process) return;\n var dstData = dstContext.getImageData(offset.x, offset.y, srcCanvas.width, srcCanvas.height), dst = dstData.data, src = srcContext.getImageData(0, 0, srcCanvas.width, srcCanvas.height).data;\n for(var i = 0, l = dst.length; i < l; i += 4){\n sr = src[i];\n br = dst[i];\n sg = src[i + 1];\n bg = dst[i + 1];\n sb = src[i + 2];\n bb = dst[i + 2];\n sa = src[i + 3];\n ba = dst[i + 3];\n process();\n var a1 = sa * alpha / 255, a2 = 1 - a1;\n dst[i] = a1 * dr + a2 * br;\n dst[i + 1] = a1 * dg + a2 * bg;\n dst[i + 2] = a1 * db + a2 * bb;\n dst[i + 3] = sa * alpha + a2 * ba;\n }\n dstContext.putImageData(dstData, offset.x, offset.y);\n }\n };\n };\n var SvgElement = new function() {\n var svg = \"http://www.w3.org/2000/svg\", xmlns = \"http://www.w3.org/2000/xmlns\", xlink = \"http://www.w3.org/1999/xlink\", attributeNamespace = {\n href: xlink,\n xlink: xmlns,\n xmlns: xmlns + \"/\",\n \"xmlns:xlink\": xmlns + \"/\"\n };\n function create(tag, attributes, formatter) {\n return set(document.createElementNS(svg, tag), attributes, formatter);\n }\n function get(node, name) {\n var namespace = attributeNamespace[name], value = namespace ? node.getAttributeNS(namespace, name) : node.getAttribute(name);\n return value === \"null\" ? null : value;\n }\n function set(node, attributes, formatter) {\n for(var name in attributes){\n var value = attributes[name], namespace = attributeNamespace[name];\n if (typeof value === \"number\" && formatter) value = formatter.number(value);\n if (namespace) node.setAttributeNS(namespace, name, value);\n else node.setAttribute(name, value);\n }\n return node;\n }\n return {\n svg: svg,\n xmlns: xmlns,\n xlink: xlink,\n create: create,\n get: get,\n set: set\n };\n };\n var SvgStyles = Base.each({\n fillColor: [\n \"fill\",\n \"color\"\n ],\n fillRule: [\n \"fill-rule\",\n \"string\"\n ],\n strokeColor: [\n \"stroke\",\n \"color\"\n ],\n strokeWidth: [\n \"stroke-width\",\n \"number\"\n ],\n strokeCap: [\n \"stroke-linecap\",\n \"string\"\n ],\n strokeJoin: [\n \"stroke-linejoin\",\n \"string\"\n ],\n strokeScaling: [\n \"vector-effect\",\n \"lookup\",\n {\n true: \"none\",\n false: \"non-scaling-stroke\"\n },\n function(item, value) {\n return !value && (item instanceof PathItem || item instanceof Shape || item instanceof TextItem);\n }\n ],\n miterLimit: [\n \"stroke-miterlimit\",\n \"number\"\n ],\n dashArray: [\n \"stroke-dasharray\",\n \"array\"\n ],\n dashOffset: [\n \"stroke-dashoffset\",\n \"number\"\n ],\n fontFamily: [\n \"font-family\",\n \"string\"\n ],\n fontWeight: [\n \"font-weight\",\n \"string\"\n ],\n fontSize: [\n \"font-size\",\n \"number\"\n ],\n justification: [\n \"text-anchor\",\n \"lookup\",\n {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n }\n ],\n opacity: [\n \"opacity\",\n \"number\"\n ],\n blendMode: [\n \"mix-blend-mode\",\n \"style\"\n ]\n }, function(entry, key) {\n var part = Base.capitalize(key), lookup = entry[2];\n this[key] = {\n type: entry[1],\n property: key,\n attribute: entry[0],\n toSVG: lookup,\n fromSVG: lookup && Base.each(lookup, function(value, name) {\n this[value] = name;\n }, {}),\n exportFilter: entry[3],\n get: \"get\" + part,\n set: \"set\" + part\n };\n }, {});\n new function() {\n var formatter;\n function getTransform(matrix, coordinates, center) {\n var attrs = new Base(), trans = matrix.getTranslation();\n if (coordinates) {\n var point;\n if (matrix.isInvertible()) {\n matrix = matrix._shiftless();\n point = matrix._inverseTransform(trans);\n trans = null;\n } else point = new Point();\n attrs[center ? \"cx\" : \"x\"] = point.x;\n attrs[center ? \"cy\" : \"y\"] = point.y;\n }\n if (!matrix.isIdentity()) {\n var decomposed = matrix.decompose();\n if (decomposed) {\n var parts = [], angle = decomposed.rotation, scale = decomposed.scaling, skew = decomposed.skewing;\n if (trans && !trans.isZero()) parts.push(\"translate(\" + formatter.point(trans) + \")\");\n if (angle) parts.push(\"rotate(\" + formatter.number(angle) + \")\");\n if (!Numerical.isZero(scale.x - 1) || !Numerical.isZero(scale.y - 1)) parts.push(\"scale(\" + formatter.point(scale) + \")\");\n if (skew.x) parts.push(\"skewX(\" + formatter.number(skew.x) + \")\");\n if (skew.y) parts.push(\"skewY(\" + formatter.number(skew.y) + \")\");\n attrs.transform = parts.join(\" \");\n } else attrs.transform = \"matrix(\" + matrix.getValues().join(\",\") + \")\";\n }\n return attrs;\n }\n function exportGroup(item, options) {\n var attrs = getTransform(item._matrix), children = item._children;\n var node = SvgElement.create(\"g\", attrs, formatter);\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i];\n var childNode = exportSVG(child, options);\n if (childNode) {\n if (child.isClipMask()) {\n var clip = SvgElement.create(\"clipPath\");\n clip.appendChild(childNode);\n setDefinition(child, clip, \"clip\");\n SvgElement.set(node, {\n \"clip-path\": \"url(#\" + clip.id + \")\"\n });\n } else node.appendChild(childNode);\n }\n }\n return node;\n }\n function exportRaster(item, options) {\n var attrs = getTransform(item._matrix, true), size = item.getSize(), image = item.getImage();\n attrs.x -= size.width / 2;\n attrs.y -= size.height / 2;\n attrs.width = size.width;\n attrs.height = size.height;\n attrs.href = options.embedImages == false && image && image.src || item.toDataURL();\n return SvgElement.create(\"image\", attrs, formatter);\n }\n function exportPath(item, options) {\n var matchShapes = options.matchShapes;\n if (matchShapes) {\n var shape = item.toShape(false);\n if (shape) return exportShape(shape, options);\n }\n var segments = item._segments, length = segments.length, type, attrs = getTransform(item._matrix);\n if (matchShapes && length >= 2 && !item.hasHandles()) {\n if (length > 2) {\n type = item._closed ? \"polygon\" : \"polyline\";\n var parts = [];\n for(var i = 0; i < length; i++)parts.push(formatter.point(segments[i]._point));\n attrs.points = parts.join(\" \");\n } else {\n type = \"line\";\n var start = segments[0]._point, end = segments[1]._point;\n attrs.set({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y\n });\n }\n } else {\n type = \"path\";\n attrs.d = item.getPathData(null, options.precision);\n }\n return SvgElement.create(type, attrs, formatter);\n }\n function exportShape(item) {\n var type = item._type, radius = item._radius, attrs = getTransform(item._matrix, true, type !== \"rectangle\");\n if (type === \"rectangle\") {\n type = \"rect\";\n var size = item._size, width = size.width, height = size.height;\n attrs.x -= width / 2;\n attrs.y -= height / 2;\n attrs.width = width;\n attrs.height = height;\n if (radius.isZero()) radius = null;\n }\n if (radius) {\n if (type === \"circle\") attrs.r = radius;\n else {\n attrs.rx = radius.width;\n attrs.ry = radius.height;\n }\n }\n return SvgElement.create(type, attrs, formatter);\n }\n function exportCompoundPath(item, options) {\n var attrs = getTransform(item._matrix);\n var data = item.getPathData(null, options.precision);\n if (data) attrs.d = data;\n return SvgElement.create(\"path\", attrs, formatter);\n }\n function exportSymbolItem(item, options) {\n var attrs = getTransform(item._matrix, true), definition = item._definition, node = getDefinition(definition, \"symbol\"), definitionItem = definition._item, bounds = definitionItem.getStrokeBounds();\n if (!node) {\n node = SvgElement.create(\"symbol\", {\n viewBox: formatter.rectangle(bounds)\n });\n node.appendChild(exportSVG(definitionItem, options));\n setDefinition(definition, node, \"symbol\");\n }\n attrs.href = \"#\" + node.id;\n attrs.x += bounds.x;\n attrs.y += bounds.y;\n attrs.width = bounds.width;\n attrs.height = bounds.height;\n attrs.overflow = \"visible\";\n return SvgElement.create(\"use\", attrs, formatter);\n }\n function exportGradient(color) {\n var gradientNode = getDefinition(color, \"color\");\n if (!gradientNode) {\n var gradient = color.getGradient(), radial = gradient._radial, origin = color.getOrigin(), destination = color.getDestination(), attrs;\n if (radial) {\n attrs = {\n cx: origin.x,\n cy: origin.y,\n r: origin.getDistance(destination)\n };\n var highlight = color.getHighlight();\n if (highlight) {\n attrs.fx = highlight.x;\n attrs.fy = highlight.y;\n }\n } else attrs = {\n x1: origin.x,\n y1: origin.y,\n x2: destination.x,\n y2: destination.y\n };\n attrs.gradientUnits = \"userSpaceOnUse\";\n gradientNode = SvgElement.create((radial ? \"radial\" : \"linear\") + \"Gradient\", attrs, formatter);\n var stops = gradient._stops;\n for(var i = 0, l = stops.length; i < l; i++){\n var stop = stops[i], stopColor = stop._color, alpha = stopColor.getAlpha(), offset = stop._offset;\n attrs = {\n offset: offset == null ? i / (l - 1) : offset\n };\n if (stopColor) attrs[\"stop-color\"] = stopColor.toCSS(true);\n if (alpha < 1) attrs[\"stop-opacity\"] = alpha;\n gradientNode.appendChild(SvgElement.create(\"stop\", attrs, formatter));\n }\n setDefinition(color, gradientNode, \"color\");\n }\n return \"url(#\" + gradientNode.id + \")\";\n }\n function exportText(item) {\n var node = SvgElement.create(\"text\", getTransform(item._matrix, true), formatter);\n node.textContent = item._content;\n return node;\n }\n var exporters = {\n Group: exportGroup,\n Layer: exportGroup,\n Raster: exportRaster,\n Path: exportPath,\n Shape: exportShape,\n CompoundPath: exportCompoundPath,\n SymbolItem: exportSymbolItem,\n PointText: exportText\n };\n function applyStyle(item, node, isRoot) {\n var attrs = {}, parent = !isRoot && item.getParent(), style = [];\n if (item._name != null) attrs.id = item._name;\n Base.each(SvgStyles, function(entry) {\n var get = entry.get, type = entry.type, value = item[get]();\n if (entry.exportFilter ? entry.exportFilter(item, value) : !parent || !Base.equals(parent[get](), value)) {\n if (type === \"color\" && value != null) {\n var alpha = value.getAlpha();\n if (alpha < 1) attrs[entry.attribute + \"-opacity\"] = alpha;\n }\n if (type === \"style\") style.push(entry.attribute + \": \" + value);\n else attrs[entry.attribute] = value == null ? \"none\" : type === \"color\" ? value.gradient ? exportGradient(value, item) : value.toCSS(true) : type === \"array\" ? value.join(\",\") : type === \"lookup\" ? entry.toSVG[value] : value;\n }\n });\n if (style.length) attrs.style = style.join(\";\");\n if (attrs.opacity === 1) delete attrs.opacity;\n if (!item._visible) attrs.visibility = \"hidden\";\n return SvgElement.set(node, attrs, formatter);\n }\n var definitions;\n function getDefinition(item, type) {\n if (!definitions) definitions = {\n ids: {},\n svgs: {}\n };\n return item && definitions.svgs[type + \"-\" + (item._id || item.__id || (item.__id = UID.get(\"svg\")))];\n }\n function setDefinition(item, node, type) {\n if (!definitions) getDefinition();\n var typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n node.id = type + \"-\" + typeId;\n definitions.svgs[type + \"-\" + (item._id || item.__id)] = node;\n }\n function exportDefinitions(node, options) {\n var svg = node, defs = null;\n if (definitions) {\n svg = node.nodeName.toLowerCase() === \"svg\" && node;\n for(var i in definitions.svgs){\n if (!defs) {\n if (!svg) {\n svg = SvgElement.create(\"svg\");\n svg.appendChild(node);\n }\n defs = svg.insertBefore(SvgElement.create(\"defs\"), svg.firstChild);\n }\n defs.appendChild(definitions.svgs[i]);\n }\n definitions = null;\n }\n return options.asString ? new self1.XMLSerializer().serializeToString(svg) : svg;\n }\n function exportSVG(item, options, isRoot) {\n var exporter = exporters[item._class], node = exporter && exporter(item, options);\n if (node) {\n var onExport = options.onExport;\n if (onExport) node = onExport(item, node, options) || node;\n var data = JSON.stringify(item._data);\n if (data && data !== \"{}\" && data !== \"null\") node.setAttribute(\"data-paper-data\", data);\n }\n return node && applyStyle(item, node, isRoot);\n }\n function setOptions(options) {\n if (!options) options = {};\n formatter = new Formatter(options.precision);\n return options;\n }\n Item.inject({\n exportSVG: function(options) {\n options = setOptions(options);\n return exportDefinitions(exportSVG(this, options, true), options);\n }\n });\n Project.inject({\n exportSVG: function(options) {\n options = setOptions(options);\n var children = this._children, view = this.getView(), bounds = Base.pick(options.bounds, \"view\"), mx = options.matrix || bounds === \"view\" && view._matrix, matrix = mx && Matrix.read([\n mx\n ]), rect = bounds === \"view\" ? new Rectangle([\n 0,\n 0\n ], view.getViewSize()) : bounds === \"content\" ? Item._getBounds(children, matrix, {\n stroke: true\n }).rect : Rectangle.read([\n bounds\n ], 0, {\n readNull: true\n }), attrs = {\n version: \"1.1\",\n xmlns: SvgElement.svg,\n \"xmlns:xlink\": SvgElement.xlink\n };\n if (rect) {\n attrs.width = rect.width;\n attrs.height = rect.height;\n if (rect.x || rect.x === 0 || rect.y || rect.y === 0) attrs.viewBox = formatter.rectangle(rect);\n }\n var node = SvgElement.create(\"svg\", attrs, formatter), parent = node;\n if (matrix && !matrix.isIdentity()) parent = node.appendChild(SvgElement.create(\"g\", getTransform(matrix), formatter));\n for(var i = 0, l = children.length; i < l; i++)parent.appendChild(exportSVG(children[i], options, true));\n return exportDefinitions(node, options);\n }\n });\n };\n new function() {\n var definitions = {}, rootSize;\n function getValue(node, name, isString, allowNull, allowPercent, defaultValue) {\n var value = SvgElement.get(node, name) || defaultValue, res = value == null ? allowNull ? null : isString ? \"\" : 0 : isString ? value : parseFloat(value);\n return /%\\s*$/.test(value) ? res / 100 * (allowPercent ? 1 : rootSize[/x|^width/.test(name) ? \"width\" : \"height\"]) : res;\n }\n function getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n x = getValue(node, x || \"x\", false, allowNull, allowPercent, defaultX);\n y = getValue(node, y || \"y\", false, allowNull, allowPercent, defaultY);\n return allowNull && (x == null || y == null) ? null : new Point(x, y);\n }\n function getSize(node, w, h, allowNull, allowPercent) {\n w = getValue(node, w || \"width\", false, allowNull, allowPercent);\n h = getValue(node, h || \"height\", false, allowNull, allowPercent);\n return allowNull && (w == null || h == null) ? null : new Size(w, h);\n }\n function convertValue(value, type, lookup) {\n return value === \"none\" ? null : type === \"number\" ? parseFloat(value) : type === \"array\" ? value ? value.split(/[\\s,]+/g).map(parseFloat) : [] : type === \"color\" ? getDefinition(value) || value : type === \"lookup\" ? lookup[value] : value;\n }\n function importGroup(node, type, options, isRoot) {\n var nodes = node.childNodes, isClip = type === \"clippath\", isDefs = type === \"defs\", item = new Group(), project = item._project, currentStyle = project._currentStyle, children = [];\n if (!isClip && !isDefs) {\n item = applyAttributes(item, node, isRoot);\n project._currentStyle = item._style.clone();\n }\n if (isRoot) {\n var defs = node.querySelectorAll(\"defs\");\n for(var i = 0, l = defs.length; i < l; i++)importNode(defs[i], options, false);\n }\n for(var i = 0, l = nodes.length; i < l; i++){\n var childNode = nodes[i], child;\n if (childNode.nodeType === 1 && !/^defs$/i.test(childNode.nodeName) && (child = importNode(childNode, options, false)) && !(child instanceof SymbolDefinition)) children.push(child);\n }\n item.addChildren(children);\n if (isClip) item = applyAttributes(item.reduce(), node, isRoot);\n project._currentStyle = currentStyle;\n if (isClip || isDefs) {\n item.remove();\n item = null;\n }\n return item;\n }\n function importPoly(node, type) {\n var coords = node.getAttribute(\"points\").match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g), points = [];\n for(var i = 0, l = coords.length; i < l; i += 2)points.push(new Point(parseFloat(coords[i]), parseFloat(coords[i + 1])));\n var path = new Path(points);\n if (type === \"polygon\") path.closePath();\n return path;\n }\n function importPath(node) {\n return PathItem.create(node.getAttribute(\"d\"));\n }\n function importGradient(node, type) {\n var id = (getValue(node, \"href\", true) || \"\").substring(1), radial = type === \"radialgradient\", gradient;\n if (id) {\n gradient = definitions[id].getGradient();\n if (gradient._radial ^ radial) {\n gradient = gradient.clone();\n gradient._radial = radial;\n }\n } else {\n var nodes = node.childNodes, stops = [];\n for(var i = 0, l = nodes.length; i < l; i++){\n var child = nodes[i];\n if (child.nodeType === 1) stops.push(applyAttributes(new GradientStop(), child));\n }\n gradient = new Gradient(stops, radial);\n }\n var origin, destination, highlight, scaleToBounds = getValue(node, \"gradientUnits\", true) !== \"userSpaceOnUse\";\n if (radial) {\n origin = getPoint(node, \"cx\", \"cy\", false, scaleToBounds, \"50%\", \"50%\");\n destination = origin.add(getValue(node, \"r\", false, false, scaleToBounds, \"50%\"), 0);\n highlight = getPoint(node, \"fx\", \"fy\", true, scaleToBounds);\n } else {\n origin = getPoint(node, \"x1\", \"y1\", false, scaleToBounds, \"0%\", \"0%\");\n destination = getPoint(node, \"x2\", \"y2\", false, scaleToBounds, \"100%\", \"0%\");\n }\n var color = applyAttributes(new Color(gradient, origin, destination, highlight), node);\n color._scaleToBounds = scaleToBounds;\n return null;\n }\n var importers = {\n \"#document\": function(node, type, options, isRoot) {\n var nodes = node.childNodes;\n for(var i = 0, l = nodes.length; i < l; i++){\n var child = nodes[i];\n if (child.nodeType === 1) return importNode(child, options, isRoot);\n }\n },\n g: importGroup,\n svg: importGroup,\n clippath: importGroup,\n polygon: importPoly,\n polyline: importPoly,\n path: importPath,\n lineargradient: importGradient,\n radialgradient: importGradient,\n image: function(node) {\n var raster = new Raster(getValue(node, \"href\", true));\n raster.on(\"load\", function() {\n var size = getSize(node);\n this.setSize(size);\n var center = getPoint(node).add(size.divide(2));\n this._matrix.append(new Matrix().translate(center));\n });\n return raster;\n },\n symbol: function(node, type, options, isRoot) {\n return new SymbolDefinition(importGroup(node, type, options, isRoot), true);\n },\n defs: importGroup,\n use: function(node) {\n var id = (getValue(node, \"href\", true) || \"\").substring(1), definition = definitions[id], point = getPoint(node);\n return definition ? definition instanceof SymbolDefinition ? definition.place(point) : definition.clone().translate(point) : null;\n },\n circle: function(node) {\n return new Shape.Circle(getPoint(node, \"cx\", \"cy\"), getValue(node, \"r\"));\n },\n ellipse: function(node) {\n return new Shape.Ellipse({\n center: getPoint(node, \"cx\", \"cy\"),\n radius: getSize(node, \"rx\", \"ry\")\n });\n },\n rect: function(node) {\n return new Shape.Rectangle(new Rectangle(getPoint(node), getSize(node)), getSize(node, \"rx\", \"ry\"));\n },\n line: function(node) {\n return new Path.Line(getPoint(node, \"x1\", \"y1\"), getPoint(node, \"x2\", \"y2\"));\n },\n text: function(node) {\n var text = new PointText(getPoint(node).add(getPoint(node, \"dx\", \"dy\")));\n text.setContent(node.textContent.trim() || \"\");\n return text;\n },\n switch: importGroup\n };\n function applyTransform(item, value, name, node) {\n if (item.transform) {\n var transforms = (node.getAttribute(name) || \"\").split(/\\)\\s*/g), matrix = new Matrix();\n for(var i = 0, l = transforms.length; i < l; i++){\n var transform = transforms[i];\n if (!transform) break;\n var parts = transform.split(/\\(\\s*/), command = parts[0], v = parts[1].split(/[\\s,]+/g);\n for(var j = 0, m = v.length; j < m; j++)v[j] = parseFloat(v[j]);\n switch(command){\n case \"matrix\":\n matrix.append(new Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n break;\n case \"rotate\":\n matrix.rotate(v[0], v[1] || 0, v[2] || 0);\n break;\n case \"translate\":\n matrix.translate(v[0], v[1] || 0);\n break;\n case \"scale\":\n matrix.scale(v);\n break;\n case \"skewX\":\n matrix.skew(v[0], 0);\n break;\n case \"skewY\":\n matrix.skew(0, v[0]);\n break;\n }\n }\n item.transform(matrix);\n }\n }\n function applyOpacity(item, value, name) {\n var key = name === \"fill-opacity\" ? \"getFillColor\" : \"getStrokeColor\", color = item[key] && item[key]();\n if (color) color.setAlpha(parseFloat(value));\n }\n var attributes = Base.set(Base.each(SvgStyles, function(entry) {\n this[entry.attribute] = function(item, value) {\n if (item[entry.set]) {\n item[entry.set](convertValue(value, entry.type, entry.fromSVG));\n if (entry.type === \"color\") {\n var color = item[entry.get]();\n if (color) {\n if (color._scaleToBounds) {\n var bounds = item.getBounds();\n color.transform(new Matrix().translate(bounds.getPoint()).scale(bounds.getSize()));\n }\n }\n }\n }\n };\n }, {}), {\n id: function(item, value) {\n definitions[value] = item;\n if (item.setName) item.setName(value);\n },\n \"clip-path\": function(item, value) {\n var clip = getDefinition(value);\n if (clip) {\n clip = clip.clone();\n clip.setClipMask(true);\n if (item instanceof Group) item.insertChild(0, clip);\n else return new Group(clip, item);\n }\n },\n gradientTransform: applyTransform,\n transform: applyTransform,\n \"fill-opacity\": applyOpacity,\n \"stroke-opacity\": applyOpacity,\n visibility: function(item, value) {\n if (item.setVisible) item.setVisible(value === \"visible\");\n },\n display: function(item, value) {\n if (item.setVisible) item.setVisible(value !== null);\n },\n \"stop-color\": function(item, value) {\n if (item.setColor) item.setColor(value);\n },\n \"stop-opacity\": function(item, value) {\n if (item._color) item._color.setAlpha(parseFloat(value));\n },\n offset: function(item, value) {\n if (item.setOffset) {\n var percent = value.match(/(.*)%$/);\n item.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n }\n },\n viewBox: function(item, value, name, node, styles) {\n var rect = new Rectangle(convertValue(value, \"array\")), size = getSize(node, null, null, true), group, matrix;\n if (item instanceof Group) {\n var scale = size ? size.divide(rect.getSize()) : 1, matrix = new Matrix().scale(scale).translate(rect.getPoint().negate());\n group = item;\n } else if (item instanceof SymbolDefinition) {\n if (size) rect.setSize(size);\n group = item._item;\n }\n if (group) {\n if (getAttribute(node, \"overflow\", styles) !== \"visible\") {\n var clip = new Shape.Rectangle(rect);\n clip.setClipMask(true);\n group.addChild(clip);\n }\n if (matrix) group.transform(matrix);\n }\n }\n });\n function getAttribute(node, name, styles) {\n var attr = node.attributes[name], value = attr && attr.value;\n if (!value && node.style) {\n var style = Base.camelize(name);\n value = node.style[style];\n if (!value && styles.node[style] !== styles.parent[style]) value = styles.node[style];\n }\n return !value ? undefined : value === \"none\" ? null : value;\n }\n function applyAttributes(item, node, isRoot) {\n var parent = node.parentNode, styles = {\n node: DomElement.getStyles(node) || {},\n parent: !isRoot && !/^defs$/i.test(parent.tagName) && DomElement.getStyles(parent) || {}\n };\n Base.each(attributes, function(apply, name) {\n var value = getAttribute(node, name, styles);\n item = value !== undefined && apply(item, value, name, node, styles) || item;\n });\n return item;\n }\n function getDefinition(value) {\n var match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/), name = match && match[1], res = name && definitions[window ? name.replace(window.location.href.split(\"#\")[0] + \"#\", \"\") : name];\n if (res && res._scaleToBounds) {\n res = res.clone();\n res._scaleToBounds = true;\n }\n return res;\n }\n function importNode(node, options, isRoot) {\n var type = node.nodeName.toLowerCase(), isElement = type !== \"#document\", body = document.body, container, parent, next;\n if (isRoot && isElement) {\n rootSize = paper.getView().getSize();\n rootSize = getSize(node, null, null, true) || rootSize;\n container = SvgElement.create(\"svg\", {\n style: \"stroke-width: 1px; stroke-miterlimit: 10\"\n });\n parent = node.parentNode;\n next = node.nextSibling;\n container.appendChild(node);\n body.appendChild(container);\n }\n var settings = paper.settings, applyMatrix = settings.applyMatrix, insertItems = settings.insertItems;\n settings.applyMatrix = false;\n settings.insertItems = false;\n var importer = importers[type], item = importer && importer(node, type, options, isRoot) || null;\n settings.insertItems = insertItems;\n settings.applyMatrix = applyMatrix;\n if (item) {\n if (isElement && !(item instanceof Group)) item = applyAttributes(item, node, isRoot);\n var onImport = options.onImport, data = isElement && node.getAttribute(\"data-paper-data\");\n if (onImport) item = onImport(node, item, options) || item;\n if (options.expandShapes && item instanceof Shape) {\n item.remove();\n item = item.toPath();\n }\n if (data) item._data = JSON.parse(data);\n }\n if (container) {\n body.removeChild(container);\n if (parent) {\n if (next) parent.insertBefore(node, next);\n else parent.appendChild(node);\n }\n }\n if (isRoot) {\n definitions = {};\n if (item && Base.pick(options.applyMatrix, applyMatrix)) item.matrix.apply(true, true);\n }\n return item;\n }\n function importSVG(source, options, owner) {\n if (!source) return null;\n options = typeof options === \"function\" ? {\n onLoad: options\n } : options || {};\n var scope = paper, item = null;\n function onLoad(svg) {\n try {\n var node = typeof svg === \"object\" ? svg : new self1.DOMParser().parseFromString(svg.trim(), \"image/svg+xml\");\n if (!node.nodeName) {\n node = null;\n throw new Error(\"Unsupported SVG source: \" + source);\n }\n paper = scope;\n item = importNode(node, options, true);\n if (!options || options.insert !== false) owner._insertItem(undefined, item);\n var onLoad = options.onLoad;\n if (onLoad) onLoad(item, svg);\n } catch (e) {\n onError(e);\n }\n }\n function onError(message, status) {\n var onError = options.onError;\n if (onError) onError(message, status);\n else throw new Error(message);\n }\n if (typeof source === \"string\" && !/^[\\s\\S]* 3) {\n cats.sort(function(a, b) {\n return b.length - a.length;\n });\n f += \"switch(str.length){\";\n for(var i = 0; i < cats.length; ++i){\n var cat = cats[i];\n f += \"case \" + cat[0].length + \":\";\n compareTo(cat);\n }\n f += \"}\";\n } else compareTo(words);\n return new Function(\"str\", f);\n }\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u0620-\\u0649\\u0672-\\u06D3\\u06E7-\\u06E8\\u06FB-\\u06FC\\u0730-\\u074A\\u0800-\\u0814\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0840-\\u0857\\u08E4-\\u08FE\\u0900-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09D7\\u09DF-\\u09E0\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B60\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2-\\u0CE3\\u0CE6-\\u0CEF\\u0D02\\u0D03\\u0D46-\\u0D48\\u0D57\\u0D62-\\u0D63\\u0D66-\\u0D6F\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E34-\\u0E3A\\u0E40-\\u0E45\\u0E50-\\u0E59\\u0EB4-\\u0EB9\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F41-\\u0F47\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u170E-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17B2\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1920-\\u192B\\u1930-\\u193B\\u1951-\\u196D\\u19B0-\\u19C0\\u19C8-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A15\\u1A20-\\u1A53\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1B46-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C00-\\u1C22\\u1C40-\\u1C49\\u1C5B-\\u1C7D\\u1CD0-\\u1CD2\\u1D00-\\u1DBE\\u1E01-\\u1F15\\u200C\\u200D\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2D81-\\u2D96\\u2DE0-\\u2DFF\\u3021-\\u3028\\u3099\\u309A\\uA640-\\uA66D\\uA674-\\uA67D\\uA69F\\uA6F0-\\uA6F1\\uA7F8-\\uA800\\uA806\\uA80B\\uA823-\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C4\\uA8D0-\\uA8D9\\uA8F3-\\uA8F7\\uA900-\\uA909\\uA926-\\uA92D\\uA930-\\uA945\\uA980-\\uA983\\uA9B3-\\uA9C0\\uAA00-\\uAA27\\uAA40-\\uAA41\\uAA4C-\\uAA4D\\uAA50-\\uAA59\\uAA7B\\uAAE0-\\uAAE9\\uAAF2-\\uAAF3\\uABC0-\\uABE1\\uABEC\\uABED\\uABF0-\\uABF9\\uFB20-\\uFB28\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n var newline = /[\\n\\r\\u2028\\u2029]/;\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n if (code < 65) return code === 36;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n function line_loc_t() {\n this.line = tokCurLine;\n this.column = tokPos - tokLineStart;\n }\n function initTokenState() {\n tokCurLine = 1;\n tokPos = tokLineStart = 0;\n tokRegexpAllowed = true;\n skipSpace();\n }\n function finishToken(type, val) {\n tokEnd = tokPos;\n if (options.locations) tokEndLoc = new line_loc_t;\n tokType = type;\n skipSpace();\n tokVal = val;\n tokRegexpAllowed = type.beforeExpr;\n }\n function skipBlockComment() {\n var startLoc = options.onComment && options.locations && new line_loc_t;\n var start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n if (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n tokPos = end + 2;\n if (options.locations) {\n lineBreak.lastIndex = start;\n var match;\n while((match = lineBreak.exec(input)) && match.index < tokPos){\n ++tokCurLine;\n tokLineStart = match.index + match[0].length;\n }\n }\n if (options.onComment) options.onComment(true, input.slice(start + 2, end), start, tokPos, startLoc, options.locations && new line_loc_t);\n }\n function skipLineComment() {\n var start = tokPos;\n var startLoc = options.onComment && options.locations && new line_loc_t;\n var ch = input.charCodeAt(tokPos += 2);\n while(tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233){\n ++tokPos;\n ch = input.charCodeAt(tokPos);\n }\n if (options.onComment) options.onComment(false, input.slice(start + 2, tokPos), start, tokPos, startLoc, options.locations && new line_loc_t);\n }\n function skipSpace() {\n while(tokPos < inputLen){\n var ch = input.charCodeAt(tokPos);\n if (ch === 32) ++tokPos;\n else if (ch === 13) {\n ++tokPos;\n var next = input.charCodeAt(tokPos);\n if (next === 10) ++tokPos;\n if (options.locations) {\n ++tokCurLine;\n tokLineStart = tokPos;\n }\n } else if (ch === 10 || ch === 8232 || ch === 8233) {\n ++tokPos;\n if (options.locations) {\n ++tokCurLine;\n tokLineStart = tokPos;\n }\n } else if (ch > 8 && ch < 14) ++tokPos;\n else if (ch === 47) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 42) skipBlockComment();\n else if (next === 47) skipLineComment();\n else break;\n } else if (ch === 160) ++tokPos;\n else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) ++tokPos;\n else break;\n }\n }\n function readToken_dot() {\n var next = input.charCodeAt(tokPos + 1);\n if (next >= 48 && next <= 57) return readNumber(true);\n ++tokPos;\n return finishToken(_dot);\n }\n function readToken_slash() {\n var next = input.charCodeAt(tokPos + 1);\n if (tokRegexpAllowed) {\n ++tokPos;\n return readRegexp();\n }\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_slash, 1);\n }\n function readToken_mult_modulo() {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_multiplyModulo, 1);\n }\n function readToken_pipe_amp(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n function readToken_caret() {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_bitwiseXOR, 1);\n }\n function readToken_plus_min(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === code) {\n if (next == 45 && input.charCodeAt(tokPos + 2) == 62 && newline.test(input.slice(lastEnd, tokPos))) {\n tokPos += 3;\n skipLineComment();\n skipSpace();\n return readToken();\n }\n return finishOp(_incDec, 2);\n }\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_plusMin, 1);\n }\n function readToken_lt_gt(code) {\n var next = input.charCodeAt(tokPos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n return finishOp(_bitShift, size);\n }\n if (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 && input.charCodeAt(tokPos + 3) == 45) {\n tokPos += 4;\n skipLineComment();\n skipSpace();\n return readToken();\n }\n if (next === 61) size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n return finishOp(_relational, size);\n }\n function readToken_eq_excl(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n return finishOp(code === 61 ? _eq : _prefix, 1);\n }\n function getTokenFromCode(code) {\n switch(code){\n case 46:\n return readToken_dot();\n case 40:\n ++tokPos;\n return finishToken(_parenL);\n case 41:\n ++tokPos;\n return finishToken(_parenR);\n case 59:\n ++tokPos;\n return finishToken(_semi);\n case 44:\n ++tokPos;\n return finishToken(_comma);\n case 91:\n ++tokPos;\n return finishToken(_bracketL);\n case 93:\n ++tokPos;\n return finishToken(_bracketR);\n case 123:\n ++tokPos;\n return finishToken(_braceL);\n case 125:\n ++tokPos;\n return finishToken(_braceR);\n case 58:\n ++tokPos;\n return finishToken(_colon);\n case 63:\n ++tokPos;\n return finishToken(_question);\n case 48:\n var next = input.charCodeAt(tokPos + 1);\n if (next === 120 || next === 88) return readHexNumber();\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n return readNumber(false);\n case 34:\n case 39:\n return readString(code);\n case 47:\n return readToken_slash(code);\n case 37:\n case 42:\n return readToken_mult_modulo();\n case 124:\n case 38:\n return readToken_pipe_amp(code);\n case 94:\n return readToken_caret();\n case 43:\n case 45:\n return readToken_plus_min(code);\n case 60:\n case 62:\n return readToken_lt_gt(code);\n case 61:\n case 33:\n return readToken_eq_excl(code);\n case 126:\n return finishOp(_prefix, 1);\n }\n return false;\n }\n function readToken(forceRegexp) {\n if (!forceRegexp) tokStart = tokPos;\n else tokPos = tokStart + 1;\n if (options.locations) tokStartLoc = new line_loc_t;\n if (forceRegexp) return readRegexp();\n if (tokPos >= inputLen) return finishToken(_eof);\n var code = input.charCodeAt(tokPos);\n if (isIdentifierStart(code) || code === 92) return readWord();\n var tok = getTokenFromCode(code);\n if (tok === false) {\n var ch = String.fromCharCode(code);\n if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n }\n return tok;\n }\n function finishOp(type, size) {\n var str = input.slice(tokPos, tokPos + size);\n tokPos += size;\n finishToken(type, str);\n }\n function readRegexp() {\n var content = \"\", escaped, inClass, start = tokPos;\n for(;;){\n if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n var ch = input.charAt(tokPos);\n if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n if (!escaped) {\n if (ch === \"[\") inClass = true;\n else if (ch === \"]\" && inClass) inClass = false;\n else if (ch === \"/\" && !inClass) break;\n escaped = ch === \"\\\\\";\n } else escaped = false;\n ++tokPos;\n }\n var content = input.slice(start, tokPos);\n ++tokPos;\n var mods = readWord1();\n if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n try {\n var value = new RegExp(content, mods);\n } catch (e) {\n if (e instanceof SyntaxError) raise(start, e.message);\n raise(e);\n }\n return finishToken(_regexp, value);\n }\n function readInt(radix, len) {\n var start = tokPos, total = 0;\n for(var i = 0, e = len == null ? Infinity : len; i < e; ++i){\n var code = input.charCodeAt(tokPos), val;\n if (code >= 97) val = code - 97 + 10;\n else if (code >= 65) val = code - 65 + 10;\n else if (code >= 48 && code <= 57) val = code - 48;\n else val = Infinity;\n if (val >= radix) break;\n ++tokPos;\n total = total * radix + val;\n }\n if (tokPos === start || len != null && tokPos - start !== len) return null;\n return total;\n }\n function readHexNumber() {\n tokPos += 2;\n var val = readInt(16);\n if (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n return finishToken(_num, val);\n }\n function readNumber(startsWithDot) {\n var start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n if (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n if (input.charCodeAt(tokPos) === 46) {\n ++tokPos;\n readInt(10);\n isFloat = true;\n }\n var next = input.charCodeAt(tokPos);\n if (next === 69 || next === 101) {\n next = input.charCodeAt(++tokPos);\n if (next === 43 || next === 45) ++tokPos;\n if (readInt(10) === null) raise(start, \"Invalid number\");\n isFloat = true;\n }\n if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n var str = input.slice(start, tokPos), val;\n if (isFloat) val = parseFloat(str);\n else if (!octal || str.length === 1) val = parseInt(str, 10);\n else if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n else val = parseInt(str, 8);\n return finishToken(_num, val);\n }\n function readString(quote) {\n tokPos++;\n var out = \"\";\n for(;;){\n if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n var ch = input.charCodeAt(tokPos);\n if (ch === quote) {\n ++tokPos;\n return finishToken(_string, out);\n }\n if (ch === 92) {\n ch = input.charCodeAt(++tokPos);\n var octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n if (octal) octal = octal[0];\n while(octal && parseInt(octal, 8) > 255)octal = octal.slice(0, -1);\n if (octal === \"0\") octal = null;\n ++tokPos;\n if (octal) {\n if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n out += String.fromCharCode(parseInt(octal, 8));\n tokPos += octal.length - 1;\n } else switch(ch){\n case 110:\n out += \"\\n\";\n break;\n case 114:\n out += \"\\r\";\n break;\n case 120:\n out += String.fromCharCode(readHexChar(2));\n break;\n case 117:\n out += String.fromCharCode(readHexChar(4));\n break;\n case 85:\n out += String.fromCharCode(readHexChar(8));\n break;\n case 116:\n out += \"\t\";\n break;\n case 98:\n out += \"\\b\";\n break;\n case 118:\n out += \"\\v\";\n break;\n case 102:\n out += \"\\f\";\n break;\n case 48:\n out += \"\\x00\";\n break;\n case 13:\n if (input.charCodeAt(tokPos) === 10) ++tokPos;\n case 10:\n if (options.locations) {\n tokLineStart = tokPos;\n ++tokCurLine;\n }\n break;\n default:\n out += String.fromCharCode(ch);\n break;\n }\n } else {\n if (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n out += String.fromCharCode(ch);\n ++tokPos;\n }\n }\n }\n function readHexChar(len) {\n var n = readInt(16, len);\n if (n === null) raise(tokStart, \"Bad character escape sequence\");\n return n;\n }\n var containsEsc;\n function readWord1() {\n containsEsc = false;\n var word, first = true, start = tokPos;\n for(;;){\n var ch = input.charCodeAt(tokPos);\n if (isIdentifierChar(ch)) {\n if (containsEsc) word += input.charAt(tokPos);\n ++tokPos;\n } else if (ch === 92) {\n if (!containsEsc) word = input.slice(start, tokPos);\n containsEsc = true;\n if (input.charCodeAt(++tokPos) != 117) raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n ++tokPos;\n var esc = readHexChar(4);\n var escStr = String.fromCharCode(esc);\n if (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n if (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc))) raise(tokPos - 4, \"Invalid Unicode escape\");\n word += escStr;\n } else break;\n first = false;\n }\n return containsEsc ? word : input.slice(start, tokPos);\n }\n function readWord() {\n var word = readWord1();\n var type = _name;\n if (!containsEsc && isKeyword(word)) type = keywordTypes[word];\n return finishToken(type, word);\n }\n function next() {\n lastStart = tokStart;\n lastEnd = tokEnd;\n lastEndLoc = tokEndLoc;\n readToken();\n }\n function setStrict(strct) {\n strict = strct;\n tokPos = tokStart;\n if (options.locations) while(tokPos < tokLineStart){\n tokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n --tokCurLine;\n }\n skipSpace();\n readToken();\n }\n function node_t() {\n this.type = null;\n this.start = tokStart;\n this.end = null;\n }\n function node_loc_t() {\n this.start = tokStartLoc;\n this.end = null;\n if (sourceFile !== null) this.source = sourceFile;\n }\n function startNode() {\n var node = new node_t();\n if (options.locations) node.loc = new node_loc_t();\n if (options.directSourceFile) node.sourceFile = options.directSourceFile;\n if (options.ranges) node.range = [\n tokStart,\n 0\n ];\n return node;\n }\n function startNodeFrom(other) {\n var node = new node_t();\n node.start = other.start;\n if (options.locations) {\n node.loc = new node_loc_t();\n node.loc.start = other.loc.start;\n }\n if (options.ranges) node.range = [\n other.range[0],\n 0\n ];\n return node;\n }\n function finishNode(node, type) {\n node.type = type;\n node.end = lastEnd;\n if (options.locations) node.loc.end = lastEndLoc;\n if (options.ranges) node.range[1] = lastEnd;\n return node;\n }\n function isUseStrict(stmt) {\n return options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n function eat(type) {\n if (tokType === type) {\n next();\n return true;\n }\n }\n function canInsertSemicolon() {\n return !options.strictSemicolons && (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n function semicolon() {\n if (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n function expect(type) {\n if (tokType === type) next();\n else unexpected();\n }\n function unexpected() {\n raise(tokStart, \"Unexpected token\");\n }\n function checkLVal(expr) {\n if (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\") raise(expr.start, \"Assigning to rvalue\");\n if (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name)) raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n function parseTopLevel(program) {\n lastStart = lastEnd = tokPos;\n if (options.locations) lastEndLoc = new line_loc_t;\n inFunction = strict = null;\n labels = [];\n readToken();\n var node = program || startNode(), first = true;\n if (!program) node.body = [];\n while(tokType !== _eof){\n var stmt = parseStatement();\n node.body.push(stmt);\n if (first && isUseStrict(stmt)) setStrict(true);\n first = false;\n }\n return finishNode(node, \"Program\");\n }\n var loopLabel = {\n kind: \"loop\"\n }, switchLabel = {\n kind: \"switch\"\n };\n function parseStatement() {\n if (tokType === _slash || tokType === _assign && tokVal == \"/=\") readToken(true);\n var starttype = tokType, node = startNode();\n switch(starttype){\n case _break:\n case _continue:\n next();\n var isBreak = starttype === _break;\n if (eat(_semi) || canInsertSemicolon()) node.label = null;\n else if (tokType !== _name) unexpected();\n else {\n node.label = parseIdent();\n semicolon();\n }\n for(var i = 0; i < labels.length; ++i){\n var lab = labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n case _debugger:\n next();\n semicolon();\n return finishNode(node, \"DebuggerStatement\");\n case _do:\n next();\n labels.push(loopLabel);\n node.body = parseStatement();\n labels.pop();\n expect(_while);\n node.test = parseParenExpression();\n semicolon();\n return finishNode(node, \"DoWhileStatement\");\n case _for:\n next();\n labels.push(loopLabel);\n expect(_parenL);\n if (tokType === _semi) return parseFor(node, null);\n if (tokType === _var) {\n var init = startNode();\n next();\n parseVar(init, true);\n finishNode(init, \"VariableDeclaration\");\n if (init.declarations.length === 1 && eat(_in)) return parseForIn(node, init);\n return parseFor(node, init);\n }\n var init = parseExpression(false, true);\n if (eat(_in)) {\n checkLVal(init);\n return parseForIn(node, init);\n }\n return parseFor(node, init);\n case _function:\n next();\n return parseFunction(node, true);\n case _if:\n next();\n node.test = parseParenExpression();\n node.consequent = parseStatement();\n node.alternate = eat(_else) ? parseStatement() : null;\n return finishNode(node, \"IfStatement\");\n case _return:\n if (!inFunction && !options.allowReturnOutsideFunction) raise(tokStart, \"'return' outside of function\");\n next();\n if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n else {\n node.argument = parseExpression();\n semicolon();\n }\n return finishNode(node, \"ReturnStatement\");\n case _switch:\n next();\n node.discriminant = parseParenExpression();\n node.cases = [];\n expect(_braceL);\n labels.push(switchLabel);\n for(var cur, sawDefault; tokType != _braceR;)if (tokType === _case || tokType === _default) {\n var isCase = tokType === _case;\n if (cur) finishNode(cur, \"SwitchCase\");\n node.cases.push(cur = startNode());\n cur.consequent = [];\n next();\n if (isCase) cur.test = parseExpression();\n else {\n if (sawDefault) raise(lastStart, \"Multiple default clauses\");\n sawDefault = true;\n cur.test = null;\n }\n expect(_colon);\n } else {\n if (!cur) unexpected();\n cur.consequent.push(parseStatement());\n }\n if (cur) finishNode(cur, \"SwitchCase\");\n next();\n labels.pop();\n return finishNode(node, \"SwitchStatement\");\n case _throw:\n next();\n if (newline.test(input.slice(lastEnd, tokStart))) raise(lastEnd, \"Illegal newline after throw\");\n node.argument = parseExpression();\n semicolon();\n return finishNode(node, \"ThrowStatement\");\n case _try:\n next();\n node.block = parseBlock();\n node.handler = null;\n if (tokType === _catch) {\n var clause = startNode();\n next();\n expect(_parenL);\n clause.param = parseIdent();\n if (strict && isStrictBadIdWord(clause.param.name)) raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n expect(_parenR);\n clause.guard = null;\n clause.body = parseBlock();\n node.handler = finishNode(clause, \"CatchClause\");\n }\n node.guardedHandlers = empty;\n node.finalizer = eat(_finally) ? parseBlock() : null;\n if (!node.handler && !node.finalizer) raise(node.start, \"Missing catch or finally clause\");\n return finishNode(node, \"TryStatement\");\n case _var:\n next();\n parseVar(node);\n semicolon();\n return finishNode(node, \"VariableDeclaration\");\n case _while:\n next();\n node.test = parseParenExpression();\n labels.push(loopLabel);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"WhileStatement\");\n case _with:\n if (strict) raise(tokStart, \"'with' in strict mode\");\n next();\n node.object = parseParenExpression();\n node.body = parseStatement();\n return finishNode(node, \"WithStatement\");\n case _braceL:\n return parseBlock();\n case _semi:\n next();\n return finishNode(node, \"EmptyStatement\");\n default:\n var maybeName = tokVal, expr = parseExpression();\n if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n for(var i = 0; i < labels.length; ++i)if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n var kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n labels.push({\n name: maybeName,\n kind: kind\n });\n node.body = parseStatement();\n labels.pop();\n node.label = expr;\n return finishNode(node, \"LabeledStatement\");\n } else {\n node.expression = expr;\n semicolon();\n return finishNode(node, \"ExpressionStatement\");\n }\n }\n }\n function parseParenExpression() {\n expect(_parenL);\n var val = parseExpression();\n expect(_parenR);\n return val;\n }\n function parseBlock(allowStrict) {\n var node = startNode(), first = true, strict = false, oldStrict;\n node.body = [];\n expect(_braceL);\n while(!eat(_braceR)){\n var stmt = parseStatement();\n node.body.push(stmt);\n if (first && allowStrict && isUseStrict(stmt)) {\n oldStrict = strict;\n setStrict(strict = true);\n }\n first = false;\n }\n if (strict && !oldStrict) setStrict(false);\n return finishNode(node, \"BlockStatement\");\n }\n function parseFor(node, init) {\n node.init = init;\n expect(_semi);\n node.test = tokType === _semi ? null : parseExpression();\n expect(_semi);\n node.update = tokType === _parenR ? null : parseExpression();\n expect(_parenR);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"ForStatement\");\n }\n function parseForIn(node, init) {\n node.left = init;\n node.right = parseExpression();\n expect(_parenR);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"ForInStatement\");\n }\n function parseVar(node, noIn) {\n node.declarations = [];\n node.kind = \"var\";\n for(;;){\n var decl = startNode();\n decl.id = parseIdent();\n if (strict && isStrictBadIdWord(decl.id.name)) raise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n if (!eat(_comma)) break;\n }\n return node;\n }\n function parseExpression(noComma, noIn) {\n var expr = parseMaybeAssign(noIn);\n if (!noComma && tokType === _comma) {\n var node = startNodeFrom(expr);\n node.expressions = [\n expr\n ];\n while(eat(_comma))node.expressions.push(parseMaybeAssign(noIn));\n return finishNode(node, \"SequenceExpression\");\n }\n return expr;\n }\n function parseMaybeAssign(noIn) {\n var left = parseMaybeConditional(noIn);\n if (tokType.isAssign) {\n var node = startNodeFrom(left);\n node.operator = tokVal;\n node.left = left;\n next();\n node.right = parseMaybeAssign(noIn);\n checkLVal(left);\n return finishNode(node, \"AssignmentExpression\");\n }\n return left;\n }\n function parseMaybeConditional(noIn) {\n var expr = parseExprOps(noIn);\n if (eat(_question)) {\n var node = startNodeFrom(expr);\n node.test = expr;\n node.consequent = parseExpression(true);\n expect(_colon);\n node.alternate = parseExpression(true, noIn);\n return finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n }\n function parseExprOps(noIn) {\n return parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n function parseExprOp(left, minPrec, noIn) {\n var prec = tokType.binop;\n if (prec != null && (!noIn || tokType !== _in)) {\n if (prec > minPrec) {\n var node = startNodeFrom(left);\n node.left = left;\n node.operator = tokVal;\n var op = tokType;\n next();\n node.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n var exprNode = finishNode(node, op === _logicalOR || op === _logicalAND ? \"LogicalExpression\" : \"BinaryExpression\");\n return parseExprOp(exprNode, minPrec, noIn);\n }\n }\n return left;\n }\n function parseMaybeUnary() {\n if (tokType.prefix) {\n var node = startNode(), update = tokType.isUpdate;\n node.operator = tokVal;\n node.prefix = true;\n tokRegexpAllowed = true;\n next();\n node.argument = parseMaybeUnary();\n if (update) checkLVal(node.argument);\n else if (strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") raise(node.start, \"Deleting local variable in strict mode\");\n return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n }\n var expr = parseExprSubscripts();\n while(tokType.postfix && !canInsertSemicolon()){\n var node = startNodeFrom(expr);\n node.operator = tokVal;\n node.prefix = false;\n node.argument = expr;\n checkLVal(expr);\n next();\n expr = finishNode(node, \"UpdateExpression\");\n }\n return expr;\n }\n function parseExprSubscripts() {\n return parseSubscripts(parseExprAtom());\n }\n function parseSubscripts(base, noCalls) {\n if (eat(_dot)) {\n var node = startNodeFrom(base);\n node.object = base;\n node.property = parseIdent(true);\n node.computed = false;\n return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n } else if (eat(_bracketL)) {\n var node = startNodeFrom(base);\n node.object = base;\n node.property = parseExpression();\n node.computed = true;\n expect(_bracketR);\n return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n } else if (!noCalls && eat(_parenL)) {\n var node = startNodeFrom(base);\n node.callee = base;\n node.arguments = parseExprList(_parenR, false);\n return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n } else return base;\n }\n function parseExprAtom() {\n switch(tokType){\n case _this:\n var node = startNode();\n next();\n return finishNode(node, \"ThisExpression\");\n case _name:\n return parseIdent();\n case _num:\n case _string:\n case _regexp:\n var node = startNode();\n node.value = tokVal;\n node.raw = input.slice(tokStart, tokEnd);\n next();\n return finishNode(node, \"Literal\");\n case _null:\n case _true:\n case _false:\n var node = startNode();\n node.value = tokType.atomValue;\n node.raw = tokType.keyword;\n next();\n return finishNode(node, \"Literal\");\n case _parenL:\n var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n next();\n var val = parseExpression();\n val.start = tokStart1;\n val.end = tokEnd;\n if (options.locations) {\n val.loc.start = tokStartLoc1;\n val.loc.end = tokEndLoc;\n }\n if (options.ranges) val.range = [\n tokStart1,\n tokEnd\n ];\n expect(_parenR);\n return val;\n case _bracketL:\n var node = startNode();\n next();\n node.elements = parseExprList(_bracketR, true, true);\n return finishNode(node, \"ArrayExpression\");\n case _braceL:\n return parseObj();\n case _function:\n var node = startNode();\n next();\n return parseFunction(node, false);\n case _new:\n return parseNew();\n default:\n unexpected();\n }\n }\n function parseNew() {\n var node = startNode();\n next();\n node.callee = parseSubscripts(parseExprAtom(), true);\n if (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n else node.arguments = empty;\n return finishNode(node, \"NewExpression\");\n }\n function parseObj() {\n var node = startNode(), first = true, sawGetSet = false;\n node.properties = [];\n next();\n while(!eat(_braceR)){\n if (!first) {\n expect(_comma);\n if (options.allowTrailingCommas && eat(_braceR)) break;\n } else first = false;\n var prop = {\n key: parsePropertyName()\n }, isGetSet = false, kind;\n if (eat(_colon)) {\n prop.value = parseExpression(true);\n kind = prop.kind = \"init\";\n } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n isGetSet = sawGetSet = true;\n kind = prop.kind = prop.key.name;\n prop.key = parsePropertyName();\n if (tokType !== _parenL) unexpected();\n prop.value = parseFunction(startNode(), false);\n } else unexpected();\n if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) for(var i = 0; i < node.properties.length; ++i){\n var other = node.properties[i];\n if (other.key.name === prop.key.name) {\n var conflict = kind == other.kind || isGetSet && other.kind === \"init\" || kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n if (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n if (conflict) raise(prop.key.start, \"Redefinition of property\");\n }\n }\n node.properties.push(prop);\n }\n return finishNode(node, \"ObjectExpression\");\n }\n function parsePropertyName() {\n if (tokType === _num || tokType === _string) return parseExprAtom();\n return parseIdent(true);\n }\n function parseFunction(node, isStatement) {\n if (tokType === _name) node.id = parseIdent();\n else if (isStatement) unexpected();\n else node.id = null;\n node.params = [];\n var first = true;\n expect(_parenL);\n while(!eat(_parenR)){\n if (!first) expect(_comma);\n else first = false;\n node.params.push(parseIdent());\n }\n var oldInFunc = inFunction, oldLabels = labels;\n inFunction = true;\n labels = [];\n node.body = parseBlock(true);\n inFunction = oldInFunc;\n labels = oldLabels;\n if (strict || node.body.body.length && isUseStrict(node.body.body[0])) for(var i = node.id ? -1 : 0; i < node.params.length; ++i){\n var id = i < 0 ? node.id : node.params[i];\n if (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name)) raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n if (i >= 0) {\n for(var j = 0; j < i; ++j)if (id.name === node.params[j].name) raise(id.start, \"Argument name clash in strict mode\");\n }\n }\n return finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n var elts = [], first = true;\n while(!eat(close)){\n if (!first) {\n expect(_comma);\n if (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n } else first = false;\n if (allowEmpty && tokType === _comma) elts.push(null);\n else elts.push(parseExpression(true));\n }\n return elts;\n }\n function parseIdent(liberal) {\n var node = startNode();\n if (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n if (tokType === _name) {\n if (!liberal && (options.forbidReserved && (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) || strict && isStrictReservedWord(tokVal)) && input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1) raise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n node.name = tokVal;\n } else if (liberal && tokType.keyword) node.name = tokType.keyword;\n else unexpected();\n tokRegexpAllowed = false;\n next();\n return finishNode(node, \"Identifier\");\n }\n });\n if (!acorn.version) acorn = null;\n }\n function parse(code, options) {\n return (global.acorn || acorn).parse(code, options);\n }\n var binaryOperators = {\n \"+\": \"__add\",\n \"-\": \"__subtract\",\n \"*\": \"__multiply\",\n \"/\": \"__divide\",\n \"%\": \"__modulo\",\n \"==\": \"__equals\",\n \"!=\": \"__equals\"\n };\n var unaryOperators = {\n \"-\": \"__negate\",\n \"+\": \"__self\"\n };\n var fields = Base.each([\n \"add\",\n \"subtract\",\n \"multiply\",\n \"divide\",\n \"modulo\",\n \"equals\",\n \"negate\"\n ], function(name) {\n this[\"__\" + name] = \"#\" + name;\n }, {\n __self: function() {\n return this;\n }\n });\n Point.inject(fields);\n Size.inject(fields);\n Color.inject(fields);\n function __$__(left, operator, right) {\n var handler = binaryOperators[operator];\n if (left && left[handler]) {\n var res = left[handler](right);\n return operator === \"!=\" ? !res : res;\n }\n switch(operator){\n case \"+\":\n return left + right;\n case \"-\":\n return left - right;\n case \"*\":\n return left * right;\n case \"/\":\n return left / right;\n case \"%\":\n return left % right;\n case \"==\":\n return left == right;\n case \"!=\":\n return left != right;\n }\n }\n function $__(operator, value) {\n var handler = unaryOperators[operator];\n if (value && value[handler]) return value[handler]();\n switch(operator){\n case \"+\":\n return +value;\n case \"-\":\n return -value;\n }\n }\n function compile(code, options) {\n if (!code) return \"\";\n options = options || {};\n var insertions = [];\n function getOffset(offset) {\n for(var i = 0, l = insertions.length; i < l; i++){\n var insertion = insertions[i];\n if (insertion[0] >= offset) break;\n offset += insertion[1];\n }\n return offset;\n }\n function getCode(node) {\n return code.substring(getOffset(node.range[0]), getOffset(node.range[1]));\n }\n function getBetween(left, right) {\n return code.substring(getOffset(left.range[1]), getOffset(right.range[0]));\n }\n function replaceCode(node, str) {\n var start = getOffset(node.range[0]), end = getOffset(node.range[1]), insert = 0;\n for(var i = insertions.length - 1; i >= 0; i--)if (start > insertions[i][0]) {\n insert = i + 1;\n break;\n }\n insertions.splice(insert, 0, [\n start,\n str.length - end + start\n ]);\n code = code.substring(0, start) + str + code.substring(end);\n }\n function handleOverloading(node, parent) {\n switch(node.type){\n case \"UnaryExpression\":\n if (node.operator in unaryOperators && node.argument.type !== \"Literal\") {\n var arg = getCode(node.argument);\n replaceCode(node, '$__(\"' + node.operator + '\", ' + arg + \")\");\n }\n break;\n case \"BinaryExpression\":\n if (node.operator in binaryOperators && node.left.type !== \"Literal\") {\n var left = getCode(node.left), right = getCode(node.right), between = getBetween(node.left, node.right), operator = node.operator;\n replaceCode(node, \"__$__(\" + left + \",\" + between.replace(new RegExp(\"\\\\\" + operator), '\"' + operator + '\"') + \", \" + right + \")\");\n }\n break;\n case \"UpdateExpression\":\n case \"AssignmentExpression\":\n var parentType = parent && parent.type;\n if (!(parentType === \"ForStatement\" || parentType === \"BinaryExpression\" && /^[=!<>]/.test(parent.operator) || parentType === \"MemberExpression\" && parent.computed)) {\n if (node.type === \"UpdateExpression\") {\n var arg = getCode(node.argument), exp = \"__$__(\" + arg + ', \"' + node.operator[0] + '\", 1)', str = arg + \" = \" + exp;\n if (node.prefix) str = \"(\" + str + \")\";\n else if (parentType === \"AssignmentExpression\" || parentType === \"VariableDeclarator\" || parentType === \"BinaryExpression\") {\n if (getCode(parent.left || parent.id) === arg) str = exp;\n str = arg + \"; \" + str;\n }\n replaceCode(node, str);\n } else if (/^.=$/.test(node.operator) && node.left.type !== \"Literal\") {\n var left = getCode(node.left), right = getCode(node.right), exp = left + \" = __$__(\" + left + ', \"' + node.operator[0] + '\", ' + right + \")\";\n replaceCode(node, /^\\(.*\\)$/.test(getCode(node)) ? \"(\" + exp + \")\" : exp);\n }\n }\n break;\n }\n }\n function handleExports(node) {\n switch(node.type){\n case \"ExportDefaultDeclaration\":\n replaceCode({\n range: [\n node.start,\n node.declaration.start\n ]\n }, \"module.exports = \");\n break;\n case \"ExportNamedDeclaration\":\n var declaration = node.declaration;\n var specifiers = node.specifiers;\n if (declaration) {\n var declarations = declaration.declarations;\n if (declarations) {\n declarations.forEach(function(dec) {\n replaceCode(dec, \"module.exports.\" + getCode(dec));\n });\n replaceCode({\n range: [\n node.start,\n declaration.start + declaration.kind.length\n ]\n }, \"\");\n }\n } else if (specifiers) {\n var exports = specifiers.map(function(specifier) {\n var name = getCode(specifier);\n return \"module.exports.\" + name + \" = \" + name + \"; \";\n }).join(\"\");\n if (exports) replaceCode(node, exports);\n }\n break;\n }\n }\n function walkAST(node, parent, paperFeatures) {\n if (node) {\n for(var key in node)if (key !== \"range\" && key !== \"loc\") {\n var value = node[key];\n if (Array.isArray(value)) for(var i = 0, l = value.length; i < l; i++)walkAST(value[i], node, paperFeatures);\n else if (value && typeof value === \"object\") walkAST(value, node, paperFeatures);\n }\n if (paperFeatures.operatorOverloading !== false) handleOverloading(node, parent);\n if (paperFeatures.moduleExports !== false) handleExports(node);\n }\n }\n function encodeVLQ(value) {\n var res = \"\", base64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n value = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n while(value || !res){\n var next = value & 31;\n value >>= 5;\n if (value) next |= 32;\n res += base64[next];\n }\n return res;\n }\n var url = options.url || \"\", sourceMaps = options.sourceMaps, paperFeatures = options.paperFeatures || {}, source = options.source || code, offset = options.offset || 0, agent = paper.agent, version = agent.versionNumber, offsetCode = false, lineBreaks = /\\r\\n|\\n|\\r/mg, map;\n if (sourceMaps && (agent.chrome && version >= 30 || agent.webkit && version >= 537.76 || agent.firefox && version >= 23 || agent.node)) {\n if (agent.node) offset -= 2;\n else if (window && url && !window.location.href.indexOf(url)) {\n var html = document.getElementsByTagName(\"html\")[0].innerHTML;\n offset = html.substr(0, html.indexOf(code) + 1).match(lineBreaks).length + 1;\n }\n offsetCode = offset > 0 && !(agent.chrome && version >= 36 || agent.safari && version >= 600 || agent.firefox && version >= 40 || agent.node);\n var mappings = [\n \"AA\" + encodeVLQ(offsetCode ? 0 : offset) + \"A\"\n ];\n mappings.length = (code.match(lineBreaks) || []).length + 1 + (offsetCode ? offset : 0);\n map = {\n version: 3,\n file: url,\n names: [],\n mappings: mappings.join(\";AACA\"),\n sourceRoot: \"\",\n sources: [\n url\n ],\n sourcesContent: [\n source\n ]\n };\n }\n if (paperFeatures.operatorOverloading !== false || paperFeatures.moduleExports !== false) walkAST(parse(code, {\n ranges: true,\n preserveParens: true,\n sourceType: \"module\"\n }), null, paperFeatures);\n if (map) {\n if (offsetCode) code = new Array(offset + 1).join(\"\\n\") + code;\n if (/^(inline|both)$/.test(sourceMaps)) code += \"\\n//# sourceMappingURL=data:application/json;base64,\" + self1.btoa(unescape(encodeURIComponent(JSON.stringify(map))));\n code += \"\\n//# sourceURL=\" + (url || \"paperscript\");\n }\n return {\n url: url,\n source: source,\n code: code,\n map: map\n };\n }\n function execute(code, scope, options) {\n paper = scope;\n var view = scope.getView(), tool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/.test(code) && !/\\bnew\\s+Tool\\b/.test(code) ? new Tool() : null, toolHandlers = tool ? tool._events : [], handlers = [\n \"onFrame\",\n \"onResize\"\n ].concat(toolHandlers), params = [], args = [], func, compiled = typeof code === \"object\" ? code : compile(code, options);\n code = compiled.code;\n function expose(scope, hidden) {\n for(var key in scope)if ((hidden || !/^_/.test(key)) && new RegExp(\"([\\\\b\\\\s\\\\W]|^)\" + key.replace(/\\$/g, \"\\\\$\") + \"\\\\b\").test(code)) {\n params.push(key);\n args.push(scope[key]);\n }\n }\n expose({\n __$__: __$__,\n $__: $__,\n paper: scope,\n tool: tool\n }, true);\n expose(scope);\n code = \"var module = { exports: {} }; \" + code;\n var exports = Base.each(handlers, function(key) {\n if (new RegExp(\"\\\\s+\" + key + \"\\\\b\").test(code)) {\n params.push(key);\n this.push(\"module.exports.\" + key + \" = \" + key + \";\");\n }\n }, []).join(\"\\n\");\n if (exports) code += \"\\n\" + exports;\n code += \"\\nreturn module.exports;\";\n var agent = paper.agent;\n if (document && (agent.chrome || agent.firefox && agent.versionNumber < 40)) {\n var script = document.createElement(\"script\"), head = document.head || document.getElementsByTagName(\"head\")[0];\n if (agent.firefox) code = \"\\n\" + code;\n script.appendChild(document.createTextNode(\"document.__paperscript__ = function(\" + params + \") {\" + code + \"\\n}\"));\n head.appendChild(script);\n func = document.__paperscript__;\n delete document.__paperscript__;\n head.removeChild(script);\n } else func = Function(params, code);\n var exports = func && func.apply(scope, args);\n var obj = exports || {};\n Base.each(toolHandlers, function(key) {\n var value = obj[key];\n if (value) tool[key] = value;\n });\n if (view) {\n if (obj.onResize) view.setOnResize(obj.onResize);\n view.emit(\"resize\", {\n size: view.size,\n delta: new Point()\n });\n if (obj.onFrame) view.setOnFrame(obj.onFrame);\n view.requestUpdate();\n }\n return exports;\n }\n function loadScript(script) {\n if (/^text\\/(?:x-|)paperscript$/.test(script.type) && PaperScope.getAttribute(script, \"ignore\") !== \"true\") {\n var canvasId = PaperScope.getAttribute(script, \"canvas\"), canvas = document.getElementById(canvasId), src = script.src || script.getAttribute(\"data-src\"), async = PaperScope.hasAttribute(script, \"async\"), scopeAttribute = \"data-paper-scope\";\n if (!canvas) throw new Error('Unable to find canvas with id \"' + canvasId + '\"');\n var scope = PaperScope.get(canvas.getAttribute(scopeAttribute)) || new PaperScope().setup(canvas);\n canvas.setAttribute(scopeAttribute, scope._id);\n if (src) Http.request({\n url: src,\n async: async,\n mimeType: \"text/plain\",\n onLoad: function(code) {\n execute(code, scope, src);\n }\n });\n else execute(script.innerHTML, scope, script.baseURI);\n script.setAttribute(\"data-paper-ignore\", \"true\");\n return scope;\n }\n }\n function loadAll() {\n Base.each(document && document.getElementsByTagName(\"script\"), loadScript);\n }\n function load(script) {\n return script ? loadScript(script) : loadAll();\n }\n if (window) {\n if (document.readyState === \"complete\") setTimeout(loadAll);\n else DomEvent.add(window, {\n load: loadAll\n });\n }\n return {\n compile: compile,\n execute: execute,\n load: load,\n parse: parse,\n calculateBinary: __$__,\n calculateUnary: $__\n };\n }).call(this);\n var paper = new (PaperScope.inject(Base.exports, {\n Base: Base,\n Numerical: Numerical,\n Key: Key,\n DomEvent: DomEvent,\n DomElement: DomElement,\n document: document,\n window: window,\n Symbol: SymbolDefinition,\n PlacedSymbol: SymbolItem\n }))();\n if (paper.agent.node) (parcelRequire(\"1S6xU\"))(paper);\n if (typeof define === \"function\" && define.amd) define(\"paper\", paper);\n else if (module) module.exports = paper;\n return paper;\n}).call(this, typeof self === \"object\" ? self : null);\n\n});\nparcelRegister(\"1S6xU\", function(module, exports) {\n\"use strict\";\n\n});\n\nparcelRegister(\"9SFwl\", function(module, exports) {\n\n$parcel$export(module.exports, \"isIdentifierStart\", function () { return $ebef8a20963d596b$export$56b48cc5d7560ffb; });\n$parcel$export(module.exports, \"isIdentifierChar\", function () { return $ebef8a20963d596b$export$332f4d7bee38db93; });\n$parcel$export(module.exports, \"TokenType\", function () { return $ebef8a20963d596b$export$f435f793048e7a0f; });\n$parcel$export(module.exports, \"keywordTypes\", function () { return $ebef8a20963d596b$export$d53f8326294b31d8; });\n$parcel$export(module.exports, \"tokTypes\", function () { return $ebef8a20963d596b$export$b54c7ea7aabba5c8; });\n$parcel$export(module.exports, \"lineBreak\", function () { return $ebef8a20963d596b$export$a1aa2dd4ad0d3f6; });\n$parcel$export(module.exports, \"lineBreakG\", function () { return $ebef8a20963d596b$export$866e20207bbc41f2; });\n$parcel$export(module.exports, \"isNewLine\", function () { return $ebef8a20963d596b$export$2c19a3e3b4008fff; });\n$parcel$export(module.exports, \"nonASCIIwhitespace\", function () { return $ebef8a20963d596b$export$268622f0f1cbc82b; });\n$parcel$export(module.exports, \"Position\", function () { return $ebef8a20963d596b$export$13807d9ee5a34a42; });\n$parcel$export(module.exports, \"SourceLocation\", function () { return $ebef8a20963d596b$export$7387db7caf96fcdb; });\n$parcel$export(module.exports, \"getLineInfo\", function () { return $ebef8a20963d596b$export$7af82191547c5ff7; });\n$parcel$export(module.exports, \"defaultOptions\", function () { return $ebef8a20963d596b$export$ba43bf67f3d48107; });\n$parcel$export(module.exports, \"Parser\", function () { return $ebef8a20963d596b$export$7acfa6ed01010e37; });\n$parcel$export(module.exports, \"TokContext\", function () { return $ebef8a20963d596b$export$68e7b4c4d99215d9; });\n$parcel$export(module.exports, \"tokContexts\", function () { return $ebef8a20963d596b$export$2b5f701edfbd6f00; });\n$parcel$export(module.exports, \"Node\", function () { return $ebef8a20963d596b$export$85c928794f8d04d4; });\n$parcel$export(module.exports, \"Token\", function () { return $ebef8a20963d596b$export$50792b0e93539fde; });\n$parcel$export(module.exports, \"version\", function () { return $ebef8a20963d596b$export$83d89fbfd8236492; });\n$parcel$export(module.exports, \"parse\", function () { return $ebef8a20963d596b$export$98e6a39c04603d36; });\n$parcel$export(module.exports, \"parseExpressionAt\", function () { return $ebef8a20963d596b$export$61f24eb03dd7ce92; });\n$parcel$export(module.exports, \"tokenizer\", function () { return $ebef8a20963d596b$export$5f8c09e3ae6f64e1; });\n// This file was generated. Do not modify manually!\nvar $ebef8a20963d596b$var$astralIdentifierCodes = [\n 509,\n 0,\n 227,\n 0,\n 150,\n 4,\n 294,\n 9,\n 1368,\n 2,\n 2,\n 1,\n 6,\n 3,\n 41,\n 2,\n 5,\n 0,\n 166,\n 1,\n 574,\n 3,\n 9,\n 9,\n 370,\n 1,\n 81,\n 2,\n 71,\n 10,\n 50,\n 3,\n 123,\n 2,\n 54,\n 14,\n 32,\n 10,\n 3,\n 1,\n 11,\n 3,\n 46,\n 10,\n 8,\n 0,\n 46,\n 9,\n 7,\n 2,\n 37,\n 13,\n 2,\n 9,\n 6,\n 1,\n 45,\n 0,\n 13,\n 2,\n 49,\n 13,\n 9,\n 3,\n 2,\n 11,\n 83,\n 11,\n 7,\n 0,\n 3,\n 0,\n 158,\n 11,\n 6,\n 9,\n 7,\n 3,\n 56,\n 1,\n 2,\n 6,\n 3,\n 1,\n 3,\n 2,\n 10,\n 0,\n 11,\n 1,\n 3,\n 6,\n 4,\n 4,\n 193,\n 17,\n 10,\n 9,\n 5,\n 0,\n 82,\n 19,\n 13,\n 9,\n 214,\n 6,\n 3,\n 8,\n 28,\n 1,\n 83,\n 16,\n 16,\n 9,\n 82,\n 12,\n 9,\n 9,\n 84,\n 14,\n 5,\n 9,\n 243,\n 14,\n 166,\n 9,\n 71,\n 5,\n 2,\n 1,\n 3,\n 3,\n 2,\n 0,\n 2,\n 1,\n 13,\n 9,\n 120,\n 6,\n 3,\n 6,\n 4,\n 0,\n 29,\n 9,\n 41,\n 6,\n 2,\n 3,\n 9,\n 0,\n 10,\n 10,\n 47,\n 15,\n 406,\n 7,\n 2,\n 7,\n 17,\n 9,\n 57,\n 21,\n 2,\n 13,\n 123,\n 5,\n 4,\n 0,\n 2,\n 1,\n 2,\n 6,\n 2,\n 0,\n 9,\n 9,\n 49,\n 4,\n 2,\n 1,\n 2,\n 4,\n 9,\n 9,\n 330,\n 3,\n 10,\n 1,\n 2,\n 0,\n 49,\n 6,\n 4,\n 4,\n 14,\n 9,\n 5351,\n 0,\n 7,\n 14,\n 13835,\n 9,\n 87,\n 9,\n 39,\n 4,\n 60,\n 6,\n 26,\n 9,\n 1014,\n 0,\n 2,\n 54,\n 8,\n 3,\n 82,\n 0,\n 12,\n 1,\n 19628,\n 1,\n 4706,\n 45,\n 3,\n 22,\n 543,\n 4,\n 4,\n 5,\n 9,\n 7,\n 3,\n 6,\n 31,\n 3,\n 149,\n 2,\n 1418,\n 49,\n 513,\n 54,\n 5,\n 49,\n 9,\n 0,\n 15,\n 0,\n 23,\n 4,\n 2,\n 14,\n 1361,\n 6,\n 2,\n 16,\n 3,\n 6,\n 2,\n 1,\n 2,\n 4,\n 101,\n 0,\n 161,\n 6,\n 10,\n 9,\n 357,\n 0,\n 62,\n 13,\n 499,\n 13,\n 983,\n 6,\n 110,\n 6,\n 6,\n 9,\n 4759,\n 9,\n 787719,\n 239\n];\n// This file was generated. Do not modify manually!\nvar $ebef8a20963d596b$var$astralIdentifierStartCodes = [\n 0,\n 11,\n 2,\n 25,\n 2,\n 18,\n 2,\n 1,\n 2,\n 14,\n 3,\n 13,\n 35,\n 122,\n 70,\n 52,\n 268,\n 28,\n 4,\n 48,\n 48,\n 31,\n 14,\n 29,\n 6,\n 37,\n 11,\n 29,\n 3,\n 35,\n 5,\n 7,\n 2,\n 4,\n 43,\n 157,\n 19,\n 35,\n 5,\n 35,\n 5,\n 39,\n 9,\n 51,\n 13,\n 10,\n 2,\n 14,\n 2,\n 6,\n 2,\n 1,\n 2,\n 10,\n 2,\n 14,\n 2,\n 6,\n 2,\n 1,\n 68,\n 310,\n 10,\n 21,\n 11,\n 7,\n 25,\n 5,\n 2,\n 41,\n 2,\n 8,\n 70,\n 5,\n 3,\n 0,\n 2,\n 43,\n 2,\n 1,\n 4,\n 0,\n 3,\n 22,\n 11,\n 22,\n 10,\n 30,\n 66,\n 18,\n 2,\n 1,\n 11,\n 21,\n 11,\n 25,\n 71,\n 55,\n 7,\n 1,\n 65,\n 0,\n 16,\n 3,\n 2,\n 2,\n 2,\n 28,\n 43,\n 28,\n 4,\n 28,\n 36,\n 7,\n 2,\n 27,\n 28,\n 53,\n 11,\n 21,\n 11,\n 18,\n 14,\n 17,\n 111,\n 72,\n 56,\n 50,\n 14,\n 50,\n 14,\n 35,\n 349,\n 41,\n 7,\n 1,\n 79,\n 28,\n 11,\n 0,\n 9,\n 21,\n 43,\n 17,\n 47,\n 20,\n 28,\n 22,\n 13,\n 52,\n 58,\n 1,\n 3,\n 0,\n 14,\n 44,\n 33,\n 24,\n 27,\n 35,\n 30,\n 0,\n 3,\n 0,\n 9,\n 34,\n 4,\n 0,\n 13,\n 47,\n 15,\n 3,\n 22,\n 0,\n 2,\n 0,\n 36,\n 17,\n 2,\n 24,\n 20,\n 1,\n 64,\n 6,\n 2,\n 0,\n 2,\n 3,\n 2,\n 14,\n 2,\n 9,\n 8,\n 46,\n 39,\n 7,\n 3,\n 1,\n 3,\n 21,\n 2,\n 6,\n 2,\n 1,\n 2,\n 4,\n 4,\n 0,\n 19,\n 0,\n 13,\n 4,\n 159,\n 52,\n 19,\n 3,\n 21,\n 2,\n 31,\n 47,\n 21,\n 1,\n 2,\n 0,\n 185,\n 46,\n 42,\n 3,\n 37,\n 47,\n 21,\n 0,\n 60,\n 42,\n 14,\n 0,\n 72,\n 26,\n 38,\n 6,\n 186,\n 43,\n 117,\n 63,\n 32,\n 7,\n 3,\n 0,\n 3,\n 7,\n 2,\n 1,\n 2,\n 23,\n 16,\n 0,\n 2,\n 0,\n 95,\n 7,\n 3,\n 38,\n 17,\n 0,\n 2,\n 0,\n 29,\n 0,\n 11,\n 39,\n 8,\n 0,\n 22,\n 0,\n 12,\n 45,\n 20,\n 0,\n 19,\n 72,\n 264,\n 8,\n 2,\n 36,\n 18,\n 0,\n 50,\n 29,\n 113,\n 6,\n 2,\n 1,\n 2,\n 37,\n 22,\n 0,\n 26,\n 5,\n 2,\n 1,\n 2,\n 31,\n 15,\n 0,\n 328,\n 18,\n 16,\n 0,\n 2,\n 12,\n 2,\n 33,\n 125,\n 0,\n 80,\n 921,\n 103,\n 110,\n 18,\n 195,\n 2637,\n 96,\n 16,\n 1071,\n 18,\n 5,\n 4026,\n 582,\n 8634,\n 568,\n 8,\n 30,\n 18,\n 78,\n 18,\n 29,\n 19,\n 47,\n 17,\n 3,\n 32,\n 20,\n 6,\n 18,\n 689,\n 63,\n 129,\n 74,\n 6,\n 0,\n 67,\n 12,\n 65,\n 1,\n 2,\n 0,\n 29,\n 6135,\n 9,\n 1237,\n 43,\n 8,\n 8936,\n 3,\n 2,\n 6,\n 2,\n 1,\n 2,\n 290,\n 16,\n 0,\n 30,\n 2,\n 3,\n 0,\n 15,\n 3,\n 9,\n 395,\n 2309,\n 106,\n 6,\n 12,\n 4,\n 8,\n 8,\n 9,\n 5991,\n 84,\n 2,\n 70,\n 2,\n 1,\n 3,\n 0,\n 3,\n 1,\n 3,\n 3,\n 2,\n 11,\n 2,\n 0,\n 2,\n 6,\n 2,\n 64,\n 2,\n 3,\n 3,\n 7,\n 2,\n 6,\n 2,\n 27,\n 2,\n 3,\n 2,\n 4,\n 2,\n 0,\n 4,\n 6,\n 2,\n 339,\n 3,\n 24,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 7,\n 1845,\n 30,\n 7,\n 5,\n 262,\n 61,\n 147,\n 44,\n 11,\n 6,\n 17,\n 0,\n 322,\n 29,\n 19,\n 43,\n 485,\n 27,\n 757,\n 6,\n 2,\n 3,\n 2,\n 1,\n 2,\n 14,\n 2,\n 196,\n 60,\n 67,\n 8,\n 0,\n 1205,\n 3,\n 2,\n 26,\n 2,\n 1,\n 2,\n 0,\n 3,\n 0,\n 2,\n 9,\n 2,\n 3,\n 2,\n 0,\n 2,\n 0,\n 7,\n 0,\n 5,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 2,\n 2,\n 1,\n 2,\n 0,\n 3,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 1,\n 2,\n 0,\n 3,\n 3,\n 2,\n 6,\n 2,\n 3,\n 2,\n 3,\n 2,\n 0,\n 2,\n 9,\n 2,\n 16,\n 6,\n 2,\n 2,\n 4,\n 2,\n 16,\n 4421,\n 42719,\n 33,\n 4153,\n 7,\n 221,\n 3,\n 5761,\n 15,\n 7472,\n 3104,\n 541,\n 1507,\n 4938,\n 6,\n 4191\n];\n// This file was generated. Do not modify manually!\nvar $ebef8a20963d596b$var$nonASCIIidentifierChars = \"\\u200C\\u200D\\xb7\\u0300-\\u036F\\u0387\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u0669\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u06F0-\\u06F9\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07C0-\\u07C9\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09E6-\\u09EF\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AE6-\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CE6-\\u0CEF\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D66-\\u0D6F\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0E50-\\u0E59\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1040-\\u1049\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u180F-\\u1819\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u194F\\u19D0-\\u19DA\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1C40-\\u1C49\\u1C50-\\u1C59\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA620-\\uA629\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F1\\uA8FF-\\uA909\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9D0-\\uA9D9\\uA9E5\\uA9F0-\\uA9F9\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA50-\\uAA59\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\n// This file was generated. Do not modify manually!\nvar $ebef8a20963d596b$var$nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n// Reserved word lists for various dialects of the language\nvar $ebef8a20963d596b$var$reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n// And the keywords\nvar $ebef8a20963d596b$var$ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\nvar $ebef8a20963d596b$var$keywords$1 = {\n 5: $ebef8a20963d596b$var$ecma5AndLessKeywords,\n \"5module\": $ebef8a20963d596b$var$ecma5AndLessKeywords + \" export import\",\n 6: $ebef8a20963d596b$var$ecma5AndLessKeywords + \" const class extends export import super\"\n};\nvar $ebef8a20963d596b$var$keywordRelationalOperator = /^in(stanceof)?$/;\n// ## Character categories\nvar $ebef8a20963d596b$var$nonASCIIidentifierStart = new RegExp(\"[\" + $ebef8a20963d596b$var$nonASCIIidentifierStartChars + \"]\");\nvar $ebef8a20963d596b$var$nonASCIIidentifier = new RegExp(\"[\" + $ebef8a20963d596b$var$nonASCIIidentifierStartChars + $ebef8a20963d596b$var$nonASCIIidentifierChars + \"]\");\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction $ebef8a20963d596b$var$isInAstralSet(code, set) {\n var pos = 0x10000;\n for(var i = 0; i < set.length; i += 2){\n pos += set[i];\n if (pos > code) return false;\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n// Test whether a given character code starts an identifier.\nfunction $ebef8a20963d596b$export$56b48cc5d7560ffb(code, astral) {\n if (code < 65) return code === 36;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code <= 0xffff) return code >= 0xaa && $ebef8a20963d596b$var$nonASCIIidentifierStart.test(String.fromCharCode(code));\n if (astral === false) return false;\n return $ebef8a20963d596b$var$isInAstralSet(code, $ebef8a20963d596b$var$astralIdentifierStartCodes);\n}\n// Test whether a given character is part of an identifier.\nfunction $ebef8a20963d596b$export$332f4d7bee38db93(code, astral) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code <= 0xffff) return code >= 0xaa && $ebef8a20963d596b$var$nonASCIIidentifier.test(String.fromCharCode(code));\n if (astral === false) return false;\n return $ebef8a20963d596b$var$isInAstralSet(code, $ebef8a20963d596b$var$astralIdentifierStartCodes) || $ebef8a20963d596b$var$isInAstralSet(code, $ebef8a20963d596b$var$astralIdentifierCodes);\n}\n// ## Token types\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\nvar $ebef8a20963d596b$export$f435f793048e7a0f = function TokenType(label, conf) {\n if (conf === void 0) conf = {};\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\nfunction $ebef8a20963d596b$var$binop(name, prec) {\n return new $ebef8a20963d596b$export$f435f793048e7a0f(name, {\n beforeExpr: true,\n binop: prec\n });\n}\nvar $ebef8a20963d596b$var$beforeExpr = {\n beforeExpr: true\n}, $ebef8a20963d596b$var$startsExpr = {\n startsExpr: true\n};\n// Map keyword names to token types.\nvar $ebef8a20963d596b$export$d53f8326294b31d8 = {};\n// Succinct definitions of keyword token types\nfunction $ebef8a20963d596b$var$kw(name, options) {\n if (options === void 0) options = {};\n options.keyword = name;\n return $ebef8a20963d596b$export$d53f8326294b31d8[name] = new $ebef8a20963d596b$export$f435f793048e7a0f(name, options);\n}\nvar $ebef8a20963d596b$export$b54c7ea7aabba5c8 = {\n num: new $ebef8a20963d596b$export$f435f793048e7a0f(\"num\", $ebef8a20963d596b$var$startsExpr),\n regexp: new $ebef8a20963d596b$export$f435f793048e7a0f(\"regexp\", $ebef8a20963d596b$var$startsExpr),\n string: new $ebef8a20963d596b$export$f435f793048e7a0f(\"string\", $ebef8a20963d596b$var$startsExpr),\n name: new $ebef8a20963d596b$export$f435f793048e7a0f(\"name\", $ebef8a20963d596b$var$startsExpr),\n privateId: new $ebef8a20963d596b$export$f435f793048e7a0f(\"privateId\", $ebef8a20963d596b$var$startsExpr),\n eof: new $ebef8a20963d596b$export$f435f793048e7a0f(\"eof\"),\n // Punctuation token types.\n bracketL: new $ebef8a20963d596b$export$f435f793048e7a0f(\"[\", {\n beforeExpr: true,\n startsExpr: true\n }),\n bracketR: new $ebef8a20963d596b$export$f435f793048e7a0f(\"]\"),\n braceL: new $ebef8a20963d596b$export$f435f793048e7a0f(\"{\", {\n beforeExpr: true,\n startsExpr: true\n }),\n braceR: new $ebef8a20963d596b$export$f435f793048e7a0f(\"}\"),\n parenL: new $ebef8a20963d596b$export$f435f793048e7a0f(\"(\", {\n beforeExpr: true,\n startsExpr: true\n }),\n parenR: new $ebef8a20963d596b$export$f435f793048e7a0f(\")\"),\n comma: new $ebef8a20963d596b$export$f435f793048e7a0f(\",\", $ebef8a20963d596b$var$beforeExpr),\n semi: new $ebef8a20963d596b$export$f435f793048e7a0f(\";\", $ebef8a20963d596b$var$beforeExpr),\n colon: new $ebef8a20963d596b$export$f435f793048e7a0f(\":\", $ebef8a20963d596b$var$beforeExpr),\n dot: new $ebef8a20963d596b$export$f435f793048e7a0f(\".\"),\n question: new $ebef8a20963d596b$export$f435f793048e7a0f(\"?\", $ebef8a20963d596b$var$beforeExpr),\n questionDot: new $ebef8a20963d596b$export$f435f793048e7a0f(\"?.\"),\n arrow: new $ebef8a20963d596b$export$f435f793048e7a0f(\"=>\", $ebef8a20963d596b$var$beforeExpr),\n template: new $ebef8a20963d596b$export$f435f793048e7a0f(\"template\"),\n invalidTemplate: new $ebef8a20963d596b$export$f435f793048e7a0f(\"invalidTemplate\"),\n ellipsis: new $ebef8a20963d596b$export$f435f793048e7a0f(\"...\", $ebef8a20963d596b$var$beforeExpr),\n backQuote: new $ebef8a20963d596b$export$f435f793048e7a0f(\"`\", $ebef8a20963d596b$var$startsExpr),\n dollarBraceL: new $ebef8a20963d596b$export$f435f793048e7a0f(\"${\", {\n beforeExpr: true,\n startsExpr: true\n }),\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n eq: new $ebef8a20963d596b$export$f435f793048e7a0f(\"=\", {\n beforeExpr: true,\n isAssign: true\n }),\n assign: new $ebef8a20963d596b$export$f435f793048e7a0f(\"_=\", {\n beforeExpr: true,\n isAssign: true\n }),\n incDec: new $ebef8a20963d596b$export$f435f793048e7a0f(\"++/--\", {\n prefix: true,\n postfix: true,\n startsExpr: true\n }),\n prefix: new $ebef8a20963d596b$export$f435f793048e7a0f(\"!/~\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n logicalOR: $ebef8a20963d596b$var$binop(\"||\", 1),\n logicalAND: $ebef8a20963d596b$var$binop(\"&&\", 2),\n bitwiseOR: $ebef8a20963d596b$var$binop(\"|\", 3),\n bitwiseXOR: $ebef8a20963d596b$var$binop(\"^\", 4),\n bitwiseAND: $ebef8a20963d596b$var$binop(\"&\", 5),\n equality: $ebef8a20963d596b$var$binop(\"==/!=/===/!==\", 6),\n relational: $ebef8a20963d596b$var$binop(\"/<=/>=\", 7),\n bitShift: $ebef8a20963d596b$var$binop(\"<>/>>>\", 8),\n plusMin: new $ebef8a20963d596b$export$f435f793048e7a0f(\"+/-\", {\n beforeExpr: true,\n binop: 9,\n prefix: true,\n startsExpr: true\n }),\n modulo: $ebef8a20963d596b$var$binop(\"%\", 10),\n star: $ebef8a20963d596b$var$binop(\"*\", 10),\n slash: $ebef8a20963d596b$var$binop(\"/\", 10),\n starstar: new $ebef8a20963d596b$export$f435f793048e7a0f(\"**\", {\n beforeExpr: true\n }),\n coalesce: $ebef8a20963d596b$var$binop(\"??\", 1),\n // Keyword token types.\n _break: $ebef8a20963d596b$var$kw(\"break\"),\n _case: $ebef8a20963d596b$var$kw(\"case\", $ebef8a20963d596b$var$beforeExpr),\n _catch: $ebef8a20963d596b$var$kw(\"catch\"),\n _continue: $ebef8a20963d596b$var$kw(\"continue\"),\n _debugger: $ebef8a20963d596b$var$kw(\"debugger\"),\n _default: $ebef8a20963d596b$var$kw(\"default\", $ebef8a20963d596b$var$beforeExpr),\n _do: $ebef8a20963d596b$var$kw(\"do\", {\n isLoop: true,\n beforeExpr: true\n }),\n _else: $ebef8a20963d596b$var$kw(\"else\", $ebef8a20963d596b$var$beforeExpr),\n _finally: $ebef8a20963d596b$var$kw(\"finally\"),\n _for: $ebef8a20963d596b$var$kw(\"for\", {\n isLoop: true\n }),\n _function: $ebef8a20963d596b$var$kw(\"function\", $ebef8a20963d596b$var$startsExpr),\n _if: $ebef8a20963d596b$var$kw(\"if\"),\n _return: $ebef8a20963d596b$var$kw(\"return\", $ebef8a20963d596b$var$beforeExpr),\n _switch: $ebef8a20963d596b$var$kw(\"switch\"),\n _throw: $ebef8a20963d596b$var$kw(\"throw\", $ebef8a20963d596b$var$beforeExpr),\n _try: $ebef8a20963d596b$var$kw(\"try\"),\n _var: $ebef8a20963d596b$var$kw(\"var\"),\n _const: $ebef8a20963d596b$var$kw(\"const\"),\n _while: $ebef8a20963d596b$var$kw(\"while\", {\n isLoop: true\n }),\n _with: $ebef8a20963d596b$var$kw(\"with\"),\n _new: $ebef8a20963d596b$var$kw(\"new\", {\n beforeExpr: true,\n startsExpr: true\n }),\n _this: $ebef8a20963d596b$var$kw(\"this\", $ebef8a20963d596b$var$startsExpr),\n _super: $ebef8a20963d596b$var$kw(\"super\", $ebef8a20963d596b$var$startsExpr),\n _class: $ebef8a20963d596b$var$kw(\"class\", $ebef8a20963d596b$var$startsExpr),\n _extends: $ebef8a20963d596b$var$kw(\"extends\", $ebef8a20963d596b$var$beforeExpr),\n _export: $ebef8a20963d596b$var$kw(\"export\"),\n _import: $ebef8a20963d596b$var$kw(\"import\", $ebef8a20963d596b$var$startsExpr),\n _null: $ebef8a20963d596b$var$kw(\"null\", $ebef8a20963d596b$var$startsExpr),\n _true: $ebef8a20963d596b$var$kw(\"true\", $ebef8a20963d596b$var$startsExpr),\n _false: $ebef8a20963d596b$var$kw(\"false\", $ebef8a20963d596b$var$startsExpr),\n _in: $ebef8a20963d596b$var$kw(\"in\", {\n beforeExpr: true,\n binop: 7\n }),\n _instanceof: $ebef8a20963d596b$var$kw(\"instanceof\", {\n beforeExpr: true,\n binop: 7\n }),\n _typeof: $ebef8a20963d596b$var$kw(\"typeof\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n _void: $ebef8a20963d596b$var$kw(\"void\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n _delete: $ebef8a20963d596b$var$kw(\"delete\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n })\n};\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nvar $ebef8a20963d596b$export$a1aa2dd4ad0d3f6 = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar $ebef8a20963d596b$export$866e20207bbc41f2 = new RegExp($ebef8a20963d596b$export$a1aa2dd4ad0d3f6.source, \"g\");\nfunction $ebef8a20963d596b$export$2c19a3e3b4008fff(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029;\n}\nfunction $ebef8a20963d596b$var$nextLineBreak(code, from, end) {\n if (end === void 0) end = code.length;\n for(var i = from; i < end; i++){\n var next = code.charCodeAt(i);\n if ($ebef8a20963d596b$export$2c19a3e3b4008fff(next)) return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1;\n }\n return -1;\n}\nvar $ebef8a20963d596b$export$268622f0f1cbc82b = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\nvar $ebef8a20963d596b$var$skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nvar $ebef8a20963d596b$var$ref = Object.prototype;\nvar $ebef8a20963d596b$var$hasOwnProperty = $ebef8a20963d596b$var$ref.hasOwnProperty;\nvar $ebef8a20963d596b$var$toString = $ebef8a20963d596b$var$ref.toString;\nvar $ebef8a20963d596b$var$hasOwn = Object.hasOwn || function(obj, propName) {\n return $ebef8a20963d596b$var$hasOwnProperty.call(obj, propName);\n};\nvar $ebef8a20963d596b$var$isArray = Array.isArray || function(obj) {\n return $ebef8a20963d596b$var$toString.call(obj) === \"[object Array]\";\n};\nfunction $ebef8a20963d596b$var$wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\");\n}\nfunction $ebef8a20963d596b$var$codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) return String.fromCharCode(code);\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00);\n}\nvar $ebef8a20963d596b$var$loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\nvar $ebef8a20963d596b$export$13807d9ee5a34a42 = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n$ebef8a20963d596b$export$13807d9ee5a34a42.prototype.offset = function offset(n) {\n return new $ebef8a20963d596b$export$13807d9ee5a34a42(this.line, this.column + n);\n};\nvar $ebef8a20963d596b$export$7387db7caf96fcdb = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) this.source = p.sourceFile;\n};\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\nfunction $ebef8a20963d596b$export$7af82191547c5ff7(input, offset) {\n for(var line = 1, cur = 0;;){\n var nextBreak = $ebef8a20963d596b$var$nextLineBreak(input, cur, offset);\n if (nextBreak < 0) return new $ebef8a20963d596b$export$13807d9ee5a34a42(line, offset - cur);\n ++line;\n cur = nextBreak;\n }\n}\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\nvar $ebef8a20963d596b$export$ba43bf67f3d48107 = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n// Interpret and default an options object\nvar $ebef8a20963d596b$var$warnedAboutEcmaVersion = false;\nfunction $ebef8a20963d596b$var$getOptions(opts) {\n var options = {};\n for(var opt in $ebef8a20963d596b$export$ba43bf67f3d48107)options[opt] = opts && $ebef8a20963d596b$var$hasOwn(opts, opt) ? opts[opt] : $ebef8a20963d596b$export$ba43bf67f3d48107[opt];\n if (options.ecmaVersion === \"latest\") options.ecmaVersion = 1e8;\n else if (options.ecmaVersion == null) {\n if (!$ebef8a20963d596b$var$warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n $ebef8a20963d596b$var$warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) options.ecmaVersion -= 2009;\n if (options.allowReserved == null) options.allowReserved = options.ecmaVersion < 5;\n if (!opts || opts.allowHashBang == null) options.allowHashBang = options.ecmaVersion >= 14;\n if ($ebef8a20963d596b$var$isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function(token) {\n return tokens.push(token);\n };\n }\n if ($ebef8a20963d596b$var$isArray(options.onComment)) options.onComment = $ebef8a20963d596b$var$pushComment(options, options.onComment);\n return options;\n}\nfunction $ebef8a20963d596b$var$pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations) comment.loc = new $ebef8a20963d596b$export$7387db7caf96fcdb(this, startLoc, endLoc);\n if (options.ranges) comment.range = [\n start,\n end\n ];\n array.push(comment);\n };\n}\n// Each scope gets a bitset that may contain these flags\nvar $ebef8a20963d596b$var$SCOPE_TOP = 1, $ebef8a20963d596b$var$SCOPE_FUNCTION = 2, $ebef8a20963d596b$var$SCOPE_ASYNC = 4, $ebef8a20963d596b$var$SCOPE_GENERATOR = 8, $ebef8a20963d596b$var$SCOPE_ARROW = 16, $ebef8a20963d596b$var$SCOPE_SIMPLE_CATCH = 32, $ebef8a20963d596b$var$SCOPE_SUPER = 64, $ebef8a20963d596b$var$SCOPE_DIRECT_SUPER = 128, $ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK = 256, $ebef8a20963d596b$var$SCOPE_VAR = $ebef8a20963d596b$var$SCOPE_TOP | $ebef8a20963d596b$var$SCOPE_FUNCTION | $ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK;\nfunction $ebef8a20963d596b$var$functionFlags(async, generator) {\n return $ebef8a20963d596b$var$SCOPE_FUNCTION | (async ? $ebef8a20963d596b$var$SCOPE_ASYNC : 0) | (generator ? $ebef8a20963d596b$var$SCOPE_GENERATOR : 0);\n}\n// Used in checkLVal* and declareName to determine the type of a binding\nvar $ebef8a20963d596b$var$BIND_NONE = 0, $ebef8a20963d596b$var$BIND_VAR = 1, $ebef8a20963d596b$var$BIND_LEXICAL = 2, $ebef8a20963d596b$var$BIND_FUNCTION = 3, $ebef8a20963d596b$var$BIND_SIMPLE_CATCH = 4, $ebef8a20963d596b$var$BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\nvar $ebef8a20963d596b$export$7acfa6ed01010e37 = function Parser(options, input, startPos) {\n this.options = options = $ebef8a20963d596b$var$getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = $ebef8a20963d596b$var$wordsRegexp($ebef8a20963d596b$var$keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = $ebef8a20963d596b$var$reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") reserved += \" await\";\n }\n this.reservedWords = $ebef8a20963d596b$var$wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + $ebef8a20963d596b$var$reservedWords.strict;\n this.reservedWordsStrict = $ebef8a20963d596b$var$wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = $ebef8a20963d596b$var$wordsRegexp(reservedStrict + \" \" + $ebef8a20963d596b$var$reservedWords.strictBind);\n this.input = String(input);\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n // Set up token state\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split($ebef8a20963d596b$export$a1aa2dd4ad0d3f6).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n // Properties of the current token:\n // Its type\n this.type = $ebef8a20963d596b$export$b54c7ea7aabba5c8.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\") this.skipLineComment(2);\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope($ebef8a20963d596b$var$SCOPE_TOP);\n // For RegExp validation\n this.regexpState = null;\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\nvar $ebef8a20963d596b$var$prototypeAccessors = {\n inFunction: {\n configurable: true\n },\n inGenerator: {\n configurable: true\n },\n inAsync: {\n configurable: true\n },\n canAwait: {\n configurable: true\n },\n allowSuper: {\n configurable: true\n },\n allowDirectSuper: {\n configurable: true\n },\n treatFunctionsAsVar: {\n configurable: true\n },\n allowNewDotTarget: {\n configurable: true\n },\n inClassStaticBlock: {\n configurable: true\n }\n};\n$ebef8a20963d596b$export$7acfa6ed01010e37.prototype.parse = function parse() {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node);\n};\n$ebef8a20963d596b$var$prototypeAccessors.inFunction.get = function() {\n return (this.currentVarScope().flags & $ebef8a20963d596b$var$SCOPE_FUNCTION) > 0;\n};\n$ebef8a20963d596b$var$prototypeAccessors.inGenerator.get = function() {\n return (this.currentVarScope().flags & $ebef8a20963d596b$var$SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit;\n};\n$ebef8a20963d596b$var$prototypeAccessors.inAsync.get = function() {\n return (this.currentVarScope().flags & $ebef8a20963d596b$var$SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit;\n};\n$ebef8a20963d596b$var$prototypeAccessors.canAwait.get = function() {\n for(var i = this.scopeStack.length - 1; i >= 0; i--){\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & $ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK) return false;\n if (scope.flags & $ebef8a20963d596b$var$SCOPE_FUNCTION) return (scope.flags & $ebef8a20963d596b$var$SCOPE_ASYNC) > 0;\n }\n return this.inModule && this.options.ecmaVersion >= 13 || this.options.allowAwaitOutsideFunction;\n};\n$ebef8a20963d596b$var$prototypeAccessors.allowSuper.get = function() {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & $ebef8a20963d596b$var$SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod;\n};\n$ebef8a20963d596b$var$prototypeAccessors.allowDirectSuper.get = function() {\n return (this.currentThisScope().flags & $ebef8a20963d596b$var$SCOPE_DIRECT_SUPER) > 0;\n};\n$ebef8a20963d596b$var$prototypeAccessors.treatFunctionsAsVar.get = function() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n};\n$ebef8a20963d596b$var$prototypeAccessors.allowNewDotTarget.get = function() {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & ($ebef8a20963d596b$var$SCOPE_FUNCTION | $ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit;\n};\n$ebef8a20963d596b$var$prototypeAccessors.inClassStaticBlock.get = function() {\n return (this.currentVarScope().flags & $ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK) > 0;\n};\n$ebef8a20963d596b$export$7acfa6ed01010e37.extend = function extend() {\n var plugins = [], len = arguments.length;\n while(len--)plugins[len] = arguments[len];\n var cls = this;\n for(var i = 0; i < plugins.length; i++)cls = plugins[i](cls);\n return cls;\n};\n$ebef8a20963d596b$export$7acfa6ed01010e37.parse = function parse(input, options) {\n return new this(options, input).parse();\n};\n$ebef8a20963d596b$export$7acfa6ed01010e37.parseExpressionAt = function parseExpressionAt(input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression();\n};\n$ebef8a20963d596b$export$7acfa6ed01010e37.tokenizer = function tokenizer(input, options) {\n return new this(options, input);\n};\nObject.defineProperties($ebef8a20963d596b$export$7acfa6ed01010e37.prototype, $ebef8a20963d596b$var$prototypeAccessors);\nvar $ebef8a20963d596b$var$pp$9 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n// ## Parser utilities\nvar $ebef8a20963d596b$var$literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n$ebef8a20963d596b$var$pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) return false;\n for(;;){\n // Try to find string literal.\n $ebef8a20963d596b$var$skipWhiteSpace.lastIndex = start;\n start += $ebef8a20963d596b$var$skipWhiteSpace.exec(this.input)[0].length;\n var match = $ebef8a20963d596b$var$literal.exec(this.input.slice(start));\n if (!match) return false;\n if ((match[1] || match[2]) === \"use strict\") {\n $ebef8a20963d596b$var$skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = $ebef8a20963d596b$var$skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" || $ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(spaceAfter[0]) && !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\");\n }\n start += match[0].length;\n // Skip semicolon, if any.\n $ebef8a20963d596b$var$skipWhiteSpace.lastIndex = start;\n start += $ebef8a20963d596b$var$skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\") start++;\n }\n};\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n$ebef8a20963d596b$var$pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true;\n } else return false;\n};\n// Tests whether parsed token is a contextual keyword.\n$ebef8a20963d596b$var$pp$9.isContextual = function(name) {\n return this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name && this.value === name && !this.containsEsc;\n};\n// Consumes contextual keyword if possible.\n$ebef8a20963d596b$var$pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) return false;\n this.next();\n return true;\n};\n// Asserts that following token is given contextual keyword.\n$ebef8a20963d596b$var$pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) this.unexpected();\n};\n// Test whether a semicolon can be inserted at the current position.\n$ebef8a20963d596b$var$pp$9.canInsertSemicolon = function() {\n return this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eof || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR || $ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n};\n$ebef8a20963d596b$var$pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon) this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc);\n return true;\n }\n};\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n$ebef8a20963d596b$var$pp$9.semicolon = function() {\n if (!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi) && !this.insertSemicolon()) this.unexpected();\n};\n$ebef8a20963d596b$var$pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma) this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc);\n if (!notNext) this.next();\n return true;\n }\n};\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n$ebef8a20963d596b$var$pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n// Raise an unexpected token error.\n$ebef8a20963d596b$var$pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\nvar $ebef8a20963d596b$var$DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1;\n};\n$ebef8a20963d596b$var$pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) return;\n if (refDestructuringErrors.trailingComma > -1) this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\");\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\");\n};\n$ebef8a20963d596b$var$pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) return false;\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0;\n if (shorthandAssign >= 0) this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\");\n if (doubleProto >= 0) this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\");\n};\n$ebef8a20963d596b$var$pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) this.raise(this.yieldPos, \"Yield expression cannot be a default value\");\n if (this.awaitPos) this.raise(this.awaitPos, \"Await expression cannot be a default value\");\n};\n$ebef8a20963d596b$var$pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\") return this.isSimpleAssignTarget(expr.expression);\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\";\n};\nvar $ebef8a20963d596b$var$pp$8 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n// ### Statement parsing\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n$ebef8a20963d596b$var$pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) node.body = [];\n while(this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.eof){\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule) for(var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1){\n var name = list[i];\n this.raiseRecoverable(this.undefinedExports[name].start, \"Export '\" + name + \"' is not defined\");\n }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\");\n};\nvar $ebef8a20963d596b$var$loopLabel = {\n kind: \"loop\"\n}, $ebef8a20963d596b$var$switchLabel = {\n kind: \"switch\"\n};\n$ebef8a20963d596b$var$pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) return false;\n $ebef8a20963d596b$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $ebef8a20963d596b$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) return true;\n // '[', '/'\n if (context) return false;\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) return true;\n // '{', astral\n if ($ebef8a20963d596b$export$56b48cc5d7560ffb(nextCh, true)) {\n var pos = next + 1;\n while($ebef8a20963d596b$export$332f4d7bee38db93(nextCh = this.input.charCodeAt(pos), true))++pos;\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) return true;\n var ident = this.input.slice(next, pos);\n if (!$ebef8a20963d596b$var$keywordRelationalOperator.test(ident)) return true;\n }\n return false;\n};\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\n$ebef8a20963d596b$var$pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\")) return false;\n $ebef8a20963d596b$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $ebef8a20963d596b$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !$ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === \"function\" && (next + 8 === this.input.length || !($ebef8a20963d596b$export$332f4d7bee38db93(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00));\n};\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n$ebef8a20963d596b$var$pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n if (this.isLet(context)) {\n starttype = $ebef8a20963d596b$export$b54c7ea7aabba5c8._var;\n kind = \"let\";\n }\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n switch(starttype){\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._break:\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._continue:\n return this.parseBreakContinueStatement(node, starttype.keyword);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._debugger:\n return this.parseDebuggerStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._do:\n return this.parseDoStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._for:\n return this.parseForStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if (context && (this.strict || context !== \"if\" && context !== \"label\") && this.options.ecmaVersion >= 6) this.unexpected();\n return this.parseFunctionStatement(node, false, !context);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._class:\n if (context) this.unexpected();\n return this.parseClass(node, true);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._if:\n return this.parseIfStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._return:\n return this.parseReturnStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._switch:\n return this.parseSwitchStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._throw:\n return this.parseThrowStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._try:\n return this.parseTryStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._const:\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") this.unexpected();\n return this.parseVarStatement(node, kind);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._while:\n return this.parseWhileStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._with:\n return this.parseWithStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL:\n return this.parseBlock(true, node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.semi:\n return this.parseEmptyStatement(node);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._export:\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._import:\n if (this.options.ecmaVersion > 10 && starttype === $ebef8a20963d596b$export$b54c7ea7aabba5c8._import) {\n $ebef8a20963d596b$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $ebef8a20963d596b$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) return this.parseExpressionStatement(node, this.parseExpression());\n }\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel) this.raise(this.start, \"'import' and 'export' may only appear at the top level\");\n if (!this.inModule) this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\");\n }\n return starttype === $ebef8a20963d596b$export$b54c7ea7aabba5c8._import ? this.parseImport(node) : this.parseExport(node, exports);\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) this.unexpected();\n this.next();\n return this.parseFunctionStatement(node, true, !context);\n }\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name && expr.type === \"Identifier\" && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.colon)) return this.parseLabeledStatement(node, maybeName, expr, context);\n else return this.parseExpressionStatement(node, expr);\n }\n};\n$ebef8a20963d596b$var$pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi) || this.insertSemicolon()) node.label = null;\n else if (this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) this.unexpected();\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for(; i < this.labels.length; ++i){\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === this.labels.length) this.raise(node.start, \"Unsyntactic \" + keyword);\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push($ebef8a20963d596b$var$loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6) this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi);\n else this.semicolon();\n return this.finishNode(node, \"DoWhileStatement\");\n};\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n$ebef8a20963d596b$var$pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\") ? this.lastTokStart : -1;\n this.labels.push($ebef8a20963d596b$var$loopLabel);\n this.enterScope(0);\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL);\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.semi) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, null);\n }\n var isLet = this.isLet();\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._var || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\")) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else node.await = awaitAt > -1;\n }\n return this.parseForIn(node, init$1);\n }\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, init$1);\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new $ebef8a20963d596b$var$DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else node.await = awaitAt > -1;\n }\n if (startsWithLet && isForOf) this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\");\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init);\n } else this.checkExpressionErrors(refDestructuringErrors, true);\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, init);\n};\n$ebef8a20963d596b$var$pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, $ebef8a20963d596b$var$FUNC_STATEMENT | (declarationPosition ? 0 : $ebef8a20963d596b$var$FUNC_HANGING_STATEMENT), false, isAsync);\n};\n$ebef8a20963d596b$var$pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction) this.raise(this.start, \"'return' outside of function\");\n this.next();\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi) || this.insertSemicolon()) node.argument = null;\n else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n return this.finishNode(node, \"ReturnStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL);\n this.labels.push($ebef8a20963d596b$var$switchLabel);\n this.enterScope(0);\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n var cur;\n for(var sawDefault = false; this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR;)if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._case || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._default) {\n var isCase = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._case;\n if (cur) this.finishNode(cur, \"SwitchCase\");\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) cur.test = this.parseExpression();\n else {\n if (sawDefault) this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\");\n sawDefault = true;\n cur.test = null;\n }\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.colon);\n } else {\n if (!cur) this.unexpected();\n cur.consequent.push(this.parseStatement(null));\n }\n this.exitScope();\n if (cur) this.finishNode(cur, \"SwitchCase\");\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseThrowStatement = function(node) {\n this.next();\n if ($ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start))) this.raise(this.lastTokEnd, \"Illegal newline after throw\");\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\");\n};\n// Reused empty array added for node fields that are always empty.\nvar $ebef8a20963d596b$var$empty$1 = [];\n$ebef8a20963d596b$var$pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? $ebef8a20963d596b$var$SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? $ebef8a20963d596b$var$BIND_SIMPLE_CATCH : $ebef8a20963d596b$var$BIND_LEXICAL);\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR);\n return param;\n};\n$ebef8a20963d596b$var$pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL)) clause.param = this.parseCatchClauseParam();\n else {\n if (this.options.ecmaVersion < 10) this.unexpected();\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer) this.raise(node.start, \"Missing catch or finally clause\");\n return this.finishNode(node, \"TryStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\");\n};\n$ebef8a20963d596b$var$pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push($ebef8a20963d596b$var$loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseWithStatement = function(node) {\n if (this.strict) this.raise(this.start, \"'with' in strict mode\");\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for(var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1){\n var label = list[i$1];\n if (label.name === maybeName) this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n }\n var kind = this.type.isLoop ? \"loop\" : this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._switch ? \"switch\" : null;\n for(var i = this.labels.length - 1; i >= 0; i--){\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else break;\n }\n this.labels.push({\n name: maybeName,\n kind: kind,\n statementStart: this.start\n });\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\");\n};\n$ebef8a20963d596b$var$pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\");\n};\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n$ebef8a20963d596b$var$pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if (createNewLexicalScope === void 0) createNewLexicalScope = true;\n if (node === void 0) node = this.startNode();\n node.body = [];\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL);\n if (createNewLexicalScope) this.enterScope(0);\n while(this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR){\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) this.strict = false;\n this.next();\n if (createNewLexicalScope) this.exitScope();\n return this.finishNode(node, \"BlockStatement\");\n};\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n$ebef8a20963d596b$var$pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi);\n node.test = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.semi ? null : this.parseExpression();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi);\n node.update = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR ? null : this.parseExpression();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\");\n};\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n$ebef8a20963d596b$var$pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in;\n this.next();\n if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.options.ecmaVersion < 8 || this.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) this.raise(init.start, (isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\");\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n};\n// Parse a list of variable declarations.\n$ebef8a20963d596b$var$pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for(;;){\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.eq)) decl.init = this.parseMaybeAssign(isFor);\n else if (!allowMissingInitializer && kind === \"const\" && !(this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) this.unexpected();\n else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._in || this.isContextual(\"of\")))) this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n else decl.init = null;\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma)) break;\n }\n return node;\n};\n$ebef8a20963d596b$var$pp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? $ebef8a20963d596b$var$BIND_VAR : $ebef8a20963d596b$var$BIND_LEXICAL, false);\n};\nvar $ebef8a20963d596b$var$FUNC_STATEMENT = 1, $ebef8a20963d596b$var$FUNC_HANGING_STATEMENT = 2, $ebef8a20963d596b$var$FUNC_NULLABLE_ID = 4;\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n$ebef8a20963d596b$var$pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.star && statement & $ebef8a20963d596b$var$FUNC_HANGING_STATEMENT) this.unexpected();\n node.generator = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.star);\n }\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n if (statement & $ebef8a20963d596b$var$FUNC_STATEMENT) {\n node.id = statement & $ebef8a20963d596b$var$FUNC_NULLABLE_ID && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.name ? null : this.parseIdent();\n if (node.id && !(statement & $ebef8a20963d596b$var$FUNC_HANGING_STATEMENT)) this.checkLValSimple(node.id, this.strict || node.generator || node.async ? this.treatFunctionsAsVar ? $ebef8a20963d596b$var$BIND_VAR : $ebef8a20963d596b$var$BIND_LEXICAL : $ebef8a20963d596b$var$BIND_FUNCTION);\n }\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope($ebef8a20963d596b$var$functionFlags(node.async, node.generator));\n if (!(statement & $ebef8a20963d596b$var$FUNC_STATEMENT)) node.id = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name ? this.parseIdent() : null;\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, statement & $ebef8a20963d596b$var$FUNC_STATEMENT ? \"FunctionDeclaration\" : \"FunctionExpression\");\n};\n$ebef8a20963d596b$var$pp$8.parseFunctionParams = function(node) {\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL);\n node.params = this.parseBindingList($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n$ebef8a20963d596b$var$pp$8.parseClass = function(node, isStatement) {\n this.next();\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL);\n while(this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR){\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\");\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && $ebef8a20963d596b$var$isPrivateNameConflicted(privateNameMap, element)) this.raiseRecoverable(element.key.start, \"Identifier '#\" + element.key.name + \"' has already been declared\");\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n};\n$ebef8a20963d596b$var$pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.semi)) return null;\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL)) {\n this.parseClassStaticBlock(node);\n return node;\n }\n if (this.isClassElementNameStart() || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.star) isStatic = true;\n else keyName = \"static\";\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.star) && !this.canInsertSemicolon()) isAsync = true;\n else keyName = \"async\";\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.star)) isGenerator = true;\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) kind = lastValue;\n else keyName = lastValue;\n }\n }\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else this.parseClassElementName(node);\n // Parse element value\n if (ecmaVersion < 13 || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && $ebef8a20963d596b$var$checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") this.raise(node.key.start, \"Constructor can't have get/set modifier\");\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else this.parseClassField(node);\n return node;\n};\n$ebef8a20963d596b$var$pp$8.isClassElementNameStart = function() {\n return this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.privateId || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.num || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.string || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL || this.type.keyword;\n};\n$ebef8a20963d596b$var$pp$8.parseClassElementName = function(element) {\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.privateId) {\n if (this.value === \"constructor\") this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else this.parsePropertyName(element);\n};\n$ebef8a20963d596b$var$pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) this.raise(key.start, \"Constructor can't be a generator\");\n if (isAsync) this.raise(key.start, \"Constructor can't be an async method\");\n } else if (method.static && $ebef8a20963d596b$var$checkKeyName(method, \"prototype\")) this.raise(key.start, \"Classes may not have a static property named prototype\");\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0) this.raiseRecoverable(value.start, \"getter should have no params\");\n if (method.kind === \"set\" && value.params.length !== 1) this.raiseRecoverable(value.start, \"setter should have exactly one param\");\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\") this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\");\n return this.finishNode(method, \"MethodDefinition\");\n};\n$ebef8a20963d596b$var$pp$8.parseClassField = function(field) {\n if ($ebef8a20963d596b$var$checkKeyName(field, \"constructor\")) this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n else if (field.static && $ebef8a20963d596b$var$checkKeyName(field, \"prototype\")) this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else field.value = null;\n this.semicolon();\n return this.finishNode(field, \"PropertyDefinition\");\n};\n$ebef8a20963d596b$var$pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope($ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK | $ebef8a20963d596b$var$SCOPE_SUPER);\n while(this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR){\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n return this.finishNode(node, \"StaticBlock\");\n};\n$ebef8a20963d596b$var$pp$8.parseClassId = function(node, isStatement) {\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) {\n node.id = this.parseIdent();\n if (isStatement) this.checkLValSimple(node.id, $ebef8a20963d596b$var$BIND_LEXICAL, false);\n } else {\n if (isStatement === true) this.unexpected();\n node.id = null;\n }\n};\n$ebef8a20963d596b$var$pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n$ebef8a20963d596b$var$pp$8.enterClassBody = function() {\n var element = {\n declared: Object.create(null),\n used: []\n };\n this.privateNameStack.push(element);\n return element.declared;\n};\n$ebef8a20963d596b$var$pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) return;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for(var i = 0; i < used.length; ++i){\n var id = used[i];\n if (!$ebef8a20963d596b$var$hasOwn(declared, id.name)) {\n if (parent) parent.used.push(id);\n else this.raiseRecoverable(id.start, \"Private field '#\" + id.name + \"' must be declared in an enclosing class\");\n }\n }\n};\nfunction $ebef8a20963d596b$var$isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) next = (element.static ? \"s\" : \"i\") + element.kind;\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (curr === \"iget\" && next === \"iset\" || curr === \"iset\" && next === \"iget\" || curr === \"sget\" && next === \"sset\" || curr === \"sset\" && next === \"sget\") {\n privateNameMap[name] = \"true\";\n return false;\n } else if (!curr) {\n privateNameMap[name] = next;\n return false;\n } else return true;\n}\nfunction $ebef8a20963d596b$var$checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (key.type === \"Identifier\" && key.name === name || key.type === \"Literal\" && key.value === name);\n}\n// Parses module export declaration.\n$ebef8a20963d596b$var$pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else node.exported = null;\n }\n this.expectContextual(\"from\");\n if (this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.string) this.unexpected();\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\");\n};\n$ebef8a20963d596b$var$pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.star)) return this.parseExportAllDeclaration(node, exports);\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8._default)) {\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\");\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\") this.checkVariableExport(exports, node.declaration.declarations);\n else this.checkExport(exports, node.declaration.id, node.declaration.id.start);\n node.specifiers = [];\n node.source = null;\n } else {\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.string) this.unexpected();\n node.source = this.parseExprAtom();\n } else {\n for(var i = 0, list = node.specifiers; i < list.length; i += 1){\n // check for keywords used as local names\n var spec = list[i];\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n if (spec.local.type === \"Literal\") this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\");\n};\n$ebef8a20963d596b$var$pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null);\n};\n$ebef8a20963d596b$var$pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) this.next();\n return this.parseFunction(fNode, $ebef8a20963d596b$var$FUNC_STATEMENT | $ebef8a20963d596b$var$FUNC_NULLABLE_ID, false, isAsync);\n } else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\");\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration;\n }\n};\n$ebef8a20963d596b$var$pp$8.checkExport = function(exports, name, pos) {\n if (!exports) return;\n if (typeof name !== \"string\") name = name.type === \"Identifier\" ? name.name : name.value;\n if ($ebef8a20963d596b$var$hasOwn(exports, name)) this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\");\n exports[name] = true;\n};\n$ebef8a20963d596b$var$pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\") this.checkExport(exports, pat, pat.start);\n else if (type === \"ObjectPattern\") for(var i = 0, list = pat.properties; i < list.length; i += 1){\n var prop = list[i];\n this.checkPatternExport(exports, prop);\n }\n else if (type === \"ArrayPattern\") for(var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1){\n var elt = list$1[i$1];\n if (elt) this.checkPatternExport(exports, elt);\n }\n else if (type === \"Property\") this.checkPatternExport(exports, pat.value);\n else if (type === \"AssignmentPattern\") this.checkPatternExport(exports, pat.left);\n else if (type === \"RestElement\") this.checkPatternExport(exports, pat.argument);\n else if (type === \"ParenthesizedExpression\") this.checkPatternExport(exports, pat.expression);\n};\n$ebef8a20963d596b$var$pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) return;\n for(var i = 0, list = decls; i < list.length; i += 1){\n var decl = list[i];\n this.checkPatternExport(exports, decl.id);\n }\n};\n$ebef8a20963d596b$var$pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" || this.type.keyword === \"const\" || this.type.keyword === \"class\" || this.type.keyword === \"function\" || this.isLet() || this.isAsyncFunction();\n};\n// Parses a comma-separated list of module exports.\n$ebef8a20963d596b$var$pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(exports, node.exported, node.exported.start);\n return this.finishNode(node, \"ExportSpecifier\");\n};\n$ebef8a20963d596b$var$pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL);\n while(!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma);\n if (this.afterTrailingComma($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes;\n};\n// Parses import declaration.\n$ebef8a20963d596b$var$pp$8.parseImport = function(node) {\n this.next();\n // import '...'\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.string) {\n node.specifiers = $ebef8a20963d596b$var$empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n};\n// Parses a comma-separated list of module imports.\n$ebef8a20963d596b$var$pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n if (this.eatContextual(\"as\")) node.local = this.parseIdent();\n else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, $ebef8a20963d596b$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportSpecifier\");\n};\n$ebef8a20963d596b$var$pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, $ebef8a20963d596b$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\");\n};\n$ebef8a20963d596b$var$pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, $ebef8a20963d596b$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\");\n};\n$ebef8a20963d596b$var$pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma)) return nodes;\n }\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes;\n }\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL);\n while(!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma);\n if (this.afterTrailingComma($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n nodes.push(this.parseImportSpecifier());\n }\n return nodes;\n};\n$ebef8a20963d596b$var$pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if ($ebef8a20963d596b$var$loneSurrogate.test(stringLiteral.value)) this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n return stringLiteral;\n }\n return this.parseIdent(true);\n};\n// Set `ExpressionStatement#directive` property for directive prologues.\n$ebef8a20963d596b$var$pp$8.adaptDirectivePrologue = function(statements) {\n for(var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i)statements[i].directive = statements[i].expression.raw.slice(1, -1);\n};\n$ebef8a20963d596b$var$pp$8.isDirectiveCandidate = function(statement) {\n return this.options.ecmaVersion >= 5 && statement.type === \"ExpressionStatement\" && statement.expression.type === \"Literal\" && typeof statement.expression.value === \"string\" && // Reject parenthesized strings.\n (this.input[statement.start] === '\"' || this.input[statement.start] === \"'\");\n};\nvar $ebef8a20963d596b$var$pp$7 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n// Convert existing expression atom to assignable pattern\n// if possible.\n$ebef8a20963d596b$var$pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) switch(node.type){\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\") this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\");\n break;\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break;\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n for(var i = 0, list = node.properties; i < list.length; i += 1){\n var prop = list[i];\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (prop.type === \"RestElement\" && (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")) this.raise(prop.argument.start, \"Unexpected token\");\n }\n break;\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") this.raise(node.key.start, \"Object pattern can't contain getter or setter\");\n this.toAssignable(node.value, isBinding);\n break;\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n this.toAssignableList(node.elements, isBinding);\n break;\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\") this.raise(node.argument.start, \"Rest elements cannot have a default value\");\n break;\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\");\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break;\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break;\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break;\n case \"MemberExpression\":\n if (!isBinding) break;\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n else if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n return node;\n};\n// Convert list of expression atoms to binding list.\n$ebef8a20963d596b$var$pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for(var i = 0; i < end; i++){\n var elt = exprList[i];\n if (elt) this.toAssignable(elt, isBinding);\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\") this.unexpected(last.argument.start);\n }\n return exprList;\n};\n// Parses spread element.\n$ebef8a20963d596b$var$pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\");\n};\n$ebef8a20963d596b$var$pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) this.unexpected();\n node.argument = this.parseBindingAtom();\n return this.finishNode(node, \"RestElement\");\n};\n// Parses lvalue (assignable) atom.\n$ebef8a20963d596b$var$pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) switch(this.type){\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList($ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\");\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL:\n return this.parseObj(true);\n }\n return this.parseIdent();\n};\n$ebef8a20963d596b$var$pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while(!this.eat(close)){\n if (first) first = false;\n else this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma);\n if (allowEmpty && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) elts.push(null);\n else if (allowTrailingComma && this.afterTrailingComma(close)) break;\n else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n this.expect(close);\n break;\n } else elts.push(this.parseAssignableListItem(allowModifiers));\n }\n return elts;\n};\n$ebef8a20963d596b$var$pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem;\n};\n$ebef8a20963d596b$var$pp$7.parseBindingListItem = function(param) {\n return param;\n};\n// Parses assignment pattern around given atom if possible.\n$ebef8a20963d596b$var$pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.eq)) return left;\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\");\n};\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n$ebef8a20963d596b$var$pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $ebef8a20963d596b$var$BIND_NONE;\n var isBind = bindingType !== $ebef8a20963d596b$var$BIND_NONE;\n switch(expr.type){\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name)) this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\");\n if (isBind) {\n if (bindingType === $ebef8a20963d596b$var$BIND_LEXICAL && expr.name === \"let\") this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\");\n if (checkClashes) {\n if ($ebef8a20963d596b$var$hasOwn(checkClashes, expr.name)) this.raiseRecoverable(expr.start, \"Argument name clash\");\n checkClashes[expr.name] = true;\n }\n if (bindingType !== $ebef8a20963d596b$var$BIND_OUTSIDE) this.declareName(expr.name, bindingType, expr.start);\n }\n break;\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break;\n case \"MemberExpression\":\n if (isBind) this.raiseRecoverable(expr.start, \"Binding member expression\");\n break;\n case \"ParenthesizedExpression\":\n if (isBind) this.raiseRecoverable(expr.start, \"Binding parenthesized expression\");\n return this.checkLValSimple(expr.expression, bindingType, checkClashes);\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n$ebef8a20963d596b$var$pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $ebef8a20963d596b$var$BIND_NONE;\n switch(expr.type){\n case \"ObjectPattern\":\n for(var i = 0, list = expr.properties; i < list.length; i += 1){\n var prop = list[i];\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break;\n case \"ArrayPattern\":\n for(var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1){\n var elem = list$1[i$1];\n if (elem) this.checkLValInnerPattern(elem, bindingType, checkClashes);\n }\n break;\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n$ebef8a20963d596b$var$pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $ebef8a20963d596b$var$BIND_NONE;\n switch(expr.type){\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break;\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break;\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break;\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\nvar $ebef8a20963d596b$export$68e7b4c4d99215d9 = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\nvar $ebef8a20963d596b$export$2b5f701edfbd6f00 = {\n b_stat: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"{\", false),\n b_expr: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"{\", true),\n b_tmpl: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"${\", false),\n p_stat: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"(\", false),\n p_expr: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"(\", true),\n q_tmpl: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"`\", true, true, function(p) {\n return p.tryReadTemplateToken();\n }),\n f_stat: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"function\", false),\n f_expr: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"function\", true),\n f_expr_gen: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"function\", true, false, null, true),\n f_gen: new $ebef8a20963d596b$export$68e7b4c4d99215d9(\"function\", false, false, null, true)\n};\nvar $ebef8a20963d596b$var$pp$6 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n$ebef8a20963d596b$var$pp$6.initialContext = function() {\n return [\n $ebef8a20963d596b$export$2b5f701edfbd6f00.b_stat\n ];\n};\n$ebef8a20963d596b$var$pp$6.curContext = function() {\n return this.context[this.context.length - 1];\n};\n$ebef8a20963d596b$var$pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === $ebef8a20963d596b$export$2b5f701edfbd6f00.f_expr || parent === $ebef8a20963d596b$export$2b5f701edfbd6f00.f_stat) return true;\n if (prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.colon && (parent === $ebef8a20963d596b$export$2b5f701edfbd6f00.b_stat || parent === $ebef8a20963d596b$export$2b5f701edfbd6f00.b_expr)) return !parent.isExpr;\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._return || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name && this.exprAllowed) return $ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n if (prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._else || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.semi || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eof || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.arrow) return true;\n if (prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL) return parent === $ebef8a20963d596b$export$2b5f701edfbd6f00.b_stat;\n if (prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._var || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._const || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) return false;\n return !this.exprAllowed;\n};\n$ebef8a20963d596b$var$pp$6.inGeneratorContext = function() {\n for(var i = this.context.length - 1; i >= 1; i--){\n var context = this.context[i];\n if (context.token === \"function\") return context.generator;\n }\n return false;\n};\n$ebef8a20963d596b$var$pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.dot) this.exprAllowed = false;\n else if (update = type.updateContext) update.call(this, prevType);\n else this.exprAllowed = type.beforeExpr;\n};\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n$ebef8a20963d596b$var$pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) this.context[this.context.length - 1] = tokenCtx;\n};\n// Token-specific context update code\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR.updateContext = $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return;\n }\n var out = this.context.pop();\n if (out === $ebef8a20963d596b$export$2b5f701edfbd6f00.b_stat && this.curContext().token === \"function\") out = this.context.pop();\n this.exprAllowed = !out.isExpr;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? $ebef8a20963d596b$export$2b5f701edfbd6f00.b_stat : $ebef8a20963d596b$export$2b5f701edfbd6f00.b_expr);\n this.exprAllowed = true;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.dollarBraceL.updateContext = function() {\n this.context.push($ebef8a20963d596b$export$2b5f701edfbd6f00.b_tmpl);\n this.exprAllowed = true;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL.updateContext = function(prevType) {\n var statementParens = prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._if || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._for || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._with || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._while;\n this.context.push(statementParens ? $ebef8a20963d596b$export$2b5f701edfbd6f00.p_stat : $ebef8a20963d596b$export$2b5f701edfbd6f00.p_expr);\n this.exprAllowed = true;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.incDec.updateContext = function() {\n// tokExprAllowed stays unchanged\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8._function.updateContext = $ebef8a20963d596b$export$b54c7ea7aabba5c8._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== $ebef8a20963d596b$export$b54c7ea7aabba5c8._else && !(prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.semi && this.curContext() !== $ebef8a20963d596b$export$2b5f701edfbd6f00.p_stat) && !(prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._return && $ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start))) && !((prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.colon || prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL) && this.curContext() === $ebef8a20963d596b$export$2b5f701edfbd6f00.b_stat)) this.context.push($ebef8a20963d596b$export$2b5f701edfbd6f00.f_expr);\n else this.context.push($ebef8a20963d596b$export$2b5f701edfbd6f00.f_stat);\n this.exprAllowed = false;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.backQuote.updateContext = function() {\n if (this.curContext() === $ebef8a20963d596b$export$2b5f701edfbd6f00.q_tmpl) this.context.pop();\n else this.context.push($ebef8a20963d596b$export$2b5f701edfbd6f00.q_tmpl);\n this.exprAllowed = false;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.star.updateContext = function(prevType) {\n if (prevType === $ebef8a20963d596b$export$b54c7ea7aabba5c8._function) {\n var index = this.context.length - 1;\n if (this.context[index] === $ebef8a20963d596b$export$2b5f701edfbd6f00.f_expr) this.context[index] = $ebef8a20963d596b$export$2b5f701edfbd6f00.f_expr_gen;\n else this.context[index] = $ebef8a20963d596b$export$2b5f701edfbd6f00.f_gen;\n }\n this.exprAllowed = true;\n};\n$ebef8a20963d596b$export$b54c7ea7aabba5c8.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.dot) {\n if (this.value === \"of\" && !this.exprAllowed || this.value === \"yield\" && this.inGeneratorContext()) allowed = true;\n }\n this.exprAllowed = allowed;\n};\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\nvar $ebef8a20963d596b$var$pp$5 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n$ebef8a20963d596b$var$pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\") return;\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) return;\n var key = prop.key;\n var name;\n switch(key.type){\n case \"Identifier\":\n name = key.name;\n break;\n case \"Literal\":\n name = String(key.value);\n break;\n default:\n return;\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) refDestructuringErrors.doubleProto = key.start;\n } else this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n propHash.proto = true;\n }\n return;\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") redefinition = this.strict && other.init || other.get || other.set;\n else redefinition = other.init || other[kind];\n if (redefinition) this.raiseRecoverable(key.start, \"Redefinition of property\");\n } else other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n other[kind] = true;\n};\n// ### Expression parsing\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n$ebef8a20963d596b$var$pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [\n expr\n ];\n while(this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma))node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors));\n return this.finishNode(node, \"SequenceExpression\");\n }\n return expr;\n};\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n$ebef8a20963d596b$var$pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) return this.parseYield(forInit);\n else this.exprAllowed = false;\n }\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new $ebef8a20963d596b$var$DestructuringErrors;\n ownDestructuringErrors = true;\n }\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc);\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eq) left = this.toAssignable(left, false, refDestructuringErrors);\n if (!ownDestructuringErrors) refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n if (refDestructuringErrors.shorthandAssign >= left.start) refDestructuringErrors.shorthandAssign = -1;\n // reset because shorthand default was used correctly\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eq) this.checkLValPattern(left);\n else this.checkLValSimple(left);\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) refDestructuringErrors.doubleProto = oldDoubleProto;\n return this.finishNode(node, \"AssignmentExpression\");\n } else if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true);\n if (oldParenAssign > -1) refDestructuringErrors.parenthesizedAssign = oldParenAssign;\n if (oldTrailingComma > -1) refDestructuringErrors.trailingComma = oldTrailingComma;\n return left;\n};\n// Parse a ternary conditional (`?:`) operator.\n$ebef8a20963d596b$var$pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n};\n// Start the precedence parser.\n$ebef8a20963d596b$var$pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit);\n};\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n$ebef8a20963d596b$var$pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8._in)) {\n if (prec > minPrec) {\n var logical = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalOR || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalAND;\n var coalesce = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.coalesce;\n if (coalesce) // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalAND.binop;\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if (logical && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.coalesce || coalesce && (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalOR || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalAND)) this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit);\n }\n }\n return left;\n};\n$ebef8a20963d596b$var$pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") this.raise(right.start, \"Private identifier can only be left side of binary expression\");\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\");\n};\n// Parse unary operators, both prefix and postfix.\n$ebef8a20963d596b$var$pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) this.checkLValSimple(node.argument);\n else if (this.strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\");\n else if (node.operator === \"delete\" && $ebef8a20963d596b$var$isPrivateFieldAccess(node.argument)) this.raiseRecoverable(node.start, \"Private fields can not be deleted\");\n else sawUnary = true;\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) this.unexpected();\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8._in) this.unexpected();\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n while(this.type.postfix && !this.canInsertSemicolon()){\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n if (!incDec && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.starstar)) {\n if (sawUnary) this.unexpected(this.lastTokStart);\n else return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false);\n } else return expr;\n};\nfunction $ebef8a20963d596b$var$isPrivateFieldAccess(node) {\n return node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" || node.type === \"ChainExpression\" && $ebef8a20963d596b$var$isPrivateFieldAccess(node.expression);\n}\n// Parse call, dot, and `[]`-subscript expressions.\n$ebef8a20963d596b$var$pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\") return expr;\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1;\n if (refDestructuringErrors.parenthesizedBind >= result.start) refDestructuringErrors.parenthesizedBind = -1;\n if (refDestructuringErrors.trailingComma >= result.start) refDestructuringErrors.trailingComma = -1;\n }\n return result;\n};\n$ebef8a20963d596b$var$pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && this.potentialArrowAt === base.start;\n var optionalChained = false;\n while(true){\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n if (element.optional) optionalChained = true;\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element;\n }\n base = element;\n }\n};\n$ebef8a20963d596b$var$pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.arrow);\n};\n$ebef8a20963d596b$var$pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit);\n};\n$ebef8a20963d596b$var$pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.questionDot);\n if (noCalls && optional) this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\");\n var computed = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL);\n if (computed || optional && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.backQuote || this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketR);\n } else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.privateId && base.type !== \"Super\") node.property = this.parsePrivateIdent();\n else node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n node.computed = !!computed;\n if (optionalSupported) node.optional = optional;\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL)) {\n var refDestructuringErrors = new $ebef8a20963d596b$var$DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0) this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\");\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit);\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) node$1.optional = optional;\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.backQuote) {\n if (optional || optionalChained) this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({\n isTagged: true\n });\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base;\n};\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n$ebef8a20963d596b$var$pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.slash) this.readRegexp();\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch(this.type){\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._super:\n if (!this.allowSuper) this.raise(this.start, \"'super' keyword outside a method\");\n node = this.startNode();\n this.next();\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL && !this.allowDirectSuper) this.raise(node.start, \"super() call outside constructor of a subclass\");\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.dot && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL) this.unexpected();\n return this.finishNode(node, \"Super\");\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\");\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8._function)) {\n this.overrideContext($ebef8a20963d596b$export$2b5f701edfbd6f00.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit);\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.arrow)) return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [\n id\n ], false, forInit);\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name && !containsEsc && (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.arrow)) this.unexpected();\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [\n id\n ], true, forInit);\n }\n }\n return id;\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {\n pattern: value.pattern,\n flags: value.flags\n };\n return node;\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.num:\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.string:\n return this.parseLiteral(this.value);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._null:\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._true:\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._false:\n node = this.startNode();\n node.value = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._null ? null : this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\");\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) refDestructuringErrors.parenthesizedAssign = start;\n if (refDestructuringErrors.parenthesizedBind < 0) refDestructuringErrors.parenthesizedBind = start;\n }\n return expr;\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList($ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\");\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL:\n this.overrideContext($ebef8a20963d596b$export$2b5f701edfbd6f00.b_expr);\n return this.parseObj(false, refDestructuringErrors);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._class:\n return this.parseClass(this.startNode(), false);\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._new:\n return this.parseNew();\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8.backQuote:\n return this.parseTemplate();\n case $ebef8a20963d596b$export$b54c7ea7aabba5c8._import:\n if (this.options.ecmaVersion >= 11) return this.parseExprImport(forNew);\n else return this.unexpected();\n default:\n return this.parseExprAtomDefault();\n }\n};\n$ebef8a20963d596b$var$pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n$ebef8a20963d596b$var$pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword import\");\n var meta = this.parseIdent(true);\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL && !forNew) return this.parseDynamicImport(node);\n else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.dot) {\n node.meta = meta;\n return this.parseImportMeta(node);\n } else this.unexpected();\n};\n$ebef8a20963d596b$var$pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n // Verify ending.\n if (!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR)) {\n var errorPos = this.start;\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR)) this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n else this.unexpected(errorPos);\n }\n return this.finishNode(node, \"ImportExpression\");\n};\n$ebef8a20963d596b$var$pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"meta\") this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\");\n if (containsEsc) this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\");\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere) this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\");\n return this.finishNode(node, \"MetaProperty\");\n};\n$ebef8a20963d596b$var$pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\");\n this.next();\n return this.finishNode(node, \"Literal\");\n};\n$ebef8a20963d596b$var$pp$5.parseParenExpression = function() {\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL);\n var val = this.parseExpression();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR);\n return val;\n};\n$ebef8a20963d596b$var$pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon();\n};\n$ebef8a20963d596b$var$pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new $ebef8a20963d596b$var$DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while(this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR){\n first ? first = false : this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma);\n if (allowTrailingComma && this.afterTrailingComma($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR, true)) {\n lastIsComma = true;\n break;\n } else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n break;\n } else exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR);\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit);\n }\n if (!exprList.length || lastIsComma) this.unexpected(this.lastTokStart);\n if (spreadStart) this.unexpected(spreadStart);\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else val = exprList[0];\n } else val = this.parseParenExpression();\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\");\n } else return val;\n};\n$ebef8a20963d596b$var$pp$5.parseParenItem = function(item) {\n return item;\n};\n$ebef8a20963d596b$var$pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit);\n};\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\nvar $ebef8a20963d596b$var$empty = [];\n$ebef8a20963d596b$var$pp$5.parseNew = function() {\n if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword new\");\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\") this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\");\n if (containsEsc) this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\");\n if (!this.allowNewDotTarget) this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\");\n return this.finishNode(node, \"MetaProperty\");\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL)) node.arguments = this.parseExprList($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR, this.options.ecmaVersion >= 8, false);\n else node.arguments = $ebef8a20963d596b$var$empty;\n return this.finishNode(node, \"NewExpression\");\n};\n// Parse template expression.\n$ebef8a20963d596b$var$pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n var elem = this.startNode();\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.invalidTemplate) {\n if (!isTagged) this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n this.next();\n elem.tail = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.backQuote;\n return this.finishNode(elem, \"TemplateElement\");\n};\n$ebef8a20963d596b$var$pp$5.parseTemplate = function(ref) {\n if (ref === void 0) ref = {};\n var isTagged = ref.isTagged;\n if (isTagged === void 0) isTagged = false;\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({\n isTagged: isTagged\n });\n node.quasis = [\n curElt\n ];\n while(!curElt.tail){\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eof) this.raise(this.pos, \"Unterminated template literal\");\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({\n isTagged: isTagged\n }));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\");\n};\n$ebef8a20963d596b$var$pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" && (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.num || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.string || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL || this.type.keyword || this.options.ecmaVersion >= 9 && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.star) && !$ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n};\n// Parse an object literal or binding pattern.\n$ebef8a20963d596b$var$pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while(!this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma($ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) this.checkPropClash(prop, propHash, refDestructuringErrors);\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\");\n};\n$ebef8a20963d596b$var$pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n return this.finishNode(prop, \"RestElement\");\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) refDestructuringErrors.trailingComma = this.start;\n // Finish\n return this.finishNode(prop, \"SpreadElement\");\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern) isGenerator = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.star);\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.star);\n this.parsePropertyName(prop);\n } else isAsync = false;\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\");\n};\n$ebef8a20963d596b$var$pp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\") this.raiseRecoverable(start, \"getter should have no params\");\n else this.raiseRecoverable(start, \"setter should have exactly one param\");\n } else if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\") this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\");\n};\n$ebef8a20963d596b$var$pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.colon) this.unexpected();\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL) {\n if (isPattern) this.unexpected();\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\") && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceR && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.eq) {\n if (isGenerator || isAsync) this.unexpected();\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) this.unexpected();\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos) this.awaitIdentPos = startPos;\n prop.kind = \"init\";\n if (isPattern) prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0) refDestructuringErrors.shorthandAssign = this.start;\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else prop.value = this.copyNode(prop.key);\n prop.shorthand = true;\n } else this.unexpected();\n};\n$ebef8a20963d596b$var$pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.bracketR);\n return prop.key;\n } else prop.computed = false;\n }\n return prop.key = this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.num || this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n};\n// Initialize empty function node.\n$ebef8a20963d596b$var$pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) node.generator = node.expression = false;\n if (this.options.ecmaVersion >= 8) node.async = false;\n};\n// Parse object or class method.\n$ebef8a20963d596b$var$pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6) node.generator = isGenerator;\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope($ebef8a20963d596b$var$functionFlags(isAsync, node.generator) | $ebef8a20963d596b$var$SCOPE_SUPER | (allowDirectSuper ? $ebef8a20963d596b$var$SCOPE_DIRECT_SUPER : 0));\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenL);\n node.params = this.parseBindingList($ebef8a20963d596b$export$b54c7ea7aabba5c8.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\");\n};\n// Parse arrow function expression with given parameters.\n$ebef8a20963d596b$var$pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.enterScope($ebef8a20963d596b$var$functionFlags(isAsync, false) | $ebef8a20963d596b$var$SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\");\n};\n// Parse function body and check parameters.\n$ebef8a20963d596b$var$pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.braceL;\n var oldStrict = this.strict, useStrict = false;\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple) this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\");\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) this.strict = true;\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) this.checkLValSimple(node.id, $ebef8a20963d596b$var$BIND_OUTSIDE);\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n$ebef8a20963d596b$var$pp$5.isSimpleParamList = function(params) {\n for(var i = 0, list = params; i < list.length; i += 1){\n var param = list[i];\n if (param.type !== \"Identifier\") return false;\n }\n return true;\n};\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n$ebef8a20963d596b$var$pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for(var i = 0, list = node.params; i < list.length; i += 1){\n var param = list[i];\n this.checkLValInnerPattern(param, $ebef8a20963d596b$var$BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n$ebef8a20963d596b$var$pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while(!this.eat(close)){\n if (!first) {\n this.expect($ebef8a20963d596b$export$b54c7ea7aabba5c8.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) break;\n } else first = false;\n var elt = void 0;\n if (allowEmpty && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma) elt = null;\n else if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.comma && refDestructuringErrors.trailingComma < 0) refDestructuringErrors.trailingComma = this.start;\n } else elt = this.parseMaybeAssign(false, refDestructuringErrors);\n elts.push(elt);\n }\n return elts;\n};\n$ebef8a20963d596b$var$pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n if (this.inGenerator && name === \"yield\") this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\");\n if (this.inAsync && name === \"await\") this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\");\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\") this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\");\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\")) this.raise(start, \"Cannot use \" + name + \" in class static initialization block\");\n if (this.keywords.test(name)) this.raise(start, \"Unexpected keyword '\" + name + \"'\");\n if (this.options.ecmaVersion < 6 && this.input.slice(start, end).indexOf(\"\\\\\") !== -1) return;\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\") this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\");\n this.raiseRecoverable(start, \"The keyword '\" + name + \"' is reserved\");\n }\n};\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n$ebef8a20963d596b$var$pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos) this.awaitIdentPos = node.start;\n }\n return node;\n};\n$ebef8a20963d596b$var$pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.name) node.name = this.value;\n else if (this.type.keyword) {\n node.name = this.type.keyword;\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") && (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) this.context.pop();\n } else this.unexpected();\n return node;\n};\n$ebef8a20963d596b$var$pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.privateId) node.name = this.value;\n else this.unexpected();\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) this.raise(node.start, \"Private field '#\" + node.name + \"' must be declared in an enclosing class\");\n else this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n return node;\n};\n// Parses yield expression inside generator.\n$ebef8a20963d596b$var$pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) this.yieldPos = this.start;\n var node = this.startNode();\n this.next();\n if (this.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.semi || this.canInsertSemicolon() || this.type !== $ebef8a20963d596b$export$b54c7ea7aabba5c8.star && !this.type.startsExpr) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat($ebef8a20963d596b$export$b54c7ea7aabba5c8.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\");\n};\n$ebef8a20963d596b$var$pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) this.awaitPos = this.start;\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\");\n};\nvar $ebef8a20963d596b$var$pp$4 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n$ebef8a20963d596b$var$pp$4.raise = function(pos, message) {\n var loc = $ebef8a20963d596b$export$7af82191547c5ff7(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos;\n err.loc = loc;\n err.raisedAt = this.pos;\n throw err;\n};\n$ebef8a20963d596b$var$pp$4.raiseRecoverable = $ebef8a20963d596b$var$pp$4.raise;\n$ebef8a20963d596b$var$pp$4.curPosition = function() {\n if (this.options.locations) return new $ebef8a20963d596b$export$13807d9ee5a34a42(this.curLine, this.pos - this.lineStart);\n};\nvar $ebef8a20963d596b$var$pp$3 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\nvar $ebef8a20963d596b$var$Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n$ebef8a20963d596b$var$pp$3.enterScope = function(flags) {\n this.scopeStack.push(new $ebef8a20963d596b$var$Scope(flags));\n};\n$ebef8a20963d596b$var$pp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\n$ebef8a20963d596b$var$pp$3.treatFunctionsAsVarInScope = function(scope) {\n return scope.flags & $ebef8a20963d596b$var$SCOPE_FUNCTION || !this.inModule && scope.flags & $ebef8a20963d596b$var$SCOPE_TOP;\n};\n$ebef8a20963d596b$var$pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === $ebef8a20963d596b$var$BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && scope.flags & $ebef8a20963d596b$var$SCOPE_TOP) delete this.undefinedExports[name];\n } else if (bindingType === $ebef8a20963d596b$var$BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === $ebef8a20963d596b$var$BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar) redeclared = scope$2.lexical.indexOf(name) > -1;\n else redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1;\n scope$2.functions.push(name);\n } else for(var i = this.scopeStack.length - 1; i >= 0; --i){\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !(scope$3.flags & $ebef8a20963d596b$var$SCOPE_SIMPLE_CATCH && scope$3.lexical[0] === name) || !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break;\n }\n scope$3.var.push(name);\n if (this.inModule && scope$3.flags & $ebef8a20963d596b$var$SCOPE_TOP) delete this.undefinedExports[name];\n if (scope$3.flags & $ebef8a20963d596b$var$SCOPE_VAR) break;\n }\n if (redeclared) this.raiseRecoverable(pos, \"Identifier '\" + name + \"' has already been declared\");\n};\n$ebef8a20963d596b$var$pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && this.scopeStack[0].var.indexOf(id.name) === -1) this.undefinedExports[id.name] = id;\n};\n$ebef8a20963d596b$var$pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1];\n};\n$ebef8a20963d596b$var$pp$3.currentVarScope = function() {\n for(var i = this.scopeStack.length - 1;; i--){\n var scope = this.scopeStack[i];\n if (scope.flags & $ebef8a20963d596b$var$SCOPE_VAR) return scope;\n }\n};\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n$ebef8a20963d596b$var$pp$3.currentThisScope = function() {\n for(var i = this.scopeStack.length - 1;; i--){\n var scope = this.scopeStack[i];\n if (scope.flags & $ebef8a20963d596b$var$SCOPE_VAR && !(scope.flags & $ebef8a20963d596b$var$SCOPE_ARROW)) return scope;\n }\n};\nvar $ebef8a20963d596b$export$85c928794f8d04d4 = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations) this.loc = new $ebef8a20963d596b$export$7387db7caf96fcdb(parser, loc);\n if (parser.options.directSourceFile) this.sourceFile = parser.options.directSourceFile;\n if (parser.options.ranges) this.range = [\n pos,\n 0\n ];\n};\n// Start an AST node, attaching a start offset.\nvar $ebef8a20963d596b$var$pp$2 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n$ebef8a20963d596b$var$pp$2.startNode = function() {\n return new $ebef8a20963d596b$export$85c928794f8d04d4(this, this.start, this.startLoc);\n};\n$ebef8a20963d596b$var$pp$2.startNodeAt = function(pos, loc) {\n return new $ebef8a20963d596b$export$85c928794f8d04d4(this, pos, loc);\n};\n// Finish an AST node, adding `type` and `end` properties.\nfunction $ebef8a20963d596b$var$finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations) node.loc.end = loc;\n if (this.options.ranges) node.range[1] = pos;\n return node;\n}\n$ebef8a20963d596b$var$pp$2.finishNode = function(node, type) {\n return $ebef8a20963d596b$var$finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc);\n};\n// Finish node at given position\n$ebef8a20963d596b$var$pp$2.finishNodeAt = function(node, type, pos, loc) {\n return $ebef8a20963d596b$var$finishNodeAt.call(this, node, type, pos, loc);\n};\n$ebef8a20963d596b$var$pp$2.copyNode = function(node) {\n var newNode = new $ebef8a20963d596b$export$85c928794f8d04d4(this, node.start, this.startLoc);\n for(var prop in node)newNode[prop] = node[prop];\n return newNode;\n};\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n// #table-binary-unicode-properties\nvar $ebef8a20963d596b$var$ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar $ebef8a20963d596b$var$ecma10BinaryProperties = $ebef8a20963d596b$var$ecma9BinaryProperties + \" Extended_Pictographic\";\nvar $ebef8a20963d596b$var$ecma11BinaryProperties = $ebef8a20963d596b$var$ecma10BinaryProperties;\nvar $ebef8a20963d596b$var$ecma12BinaryProperties = $ebef8a20963d596b$var$ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar $ebef8a20963d596b$var$ecma13BinaryProperties = $ebef8a20963d596b$var$ecma12BinaryProperties;\nvar $ebef8a20963d596b$var$ecma14BinaryProperties = $ebef8a20963d596b$var$ecma13BinaryProperties;\nvar $ebef8a20963d596b$var$unicodeBinaryProperties = {\n 9: $ebef8a20963d596b$var$ecma9BinaryProperties,\n 10: $ebef8a20963d596b$var$ecma10BinaryProperties,\n 11: $ebef8a20963d596b$var$ecma11BinaryProperties,\n 12: $ebef8a20963d596b$var$ecma12BinaryProperties,\n 13: $ebef8a20963d596b$var$ecma13BinaryProperties,\n 14: $ebef8a20963d596b$var$ecma14BinaryProperties\n};\n// #table-binary-unicode-properties-of-strings\nvar $ebef8a20963d596b$var$ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\nvar $ebef8a20963d596b$var$unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: $ebef8a20963d596b$var$ecma14BinaryPropertiesOfStrings\n};\n// #table-unicode-general-category-values\nvar $ebef8a20963d596b$var$unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n// #table-unicode-script-values\nvar $ebef8a20963d596b$var$ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar $ebef8a20963d596b$var$ecma10ScriptValues = $ebef8a20963d596b$var$ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar $ebef8a20963d596b$var$ecma11ScriptValues = $ebef8a20963d596b$var$ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar $ebef8a20963d596b$var$ecma12ScriptValues = $ebef8a20963d596b$var$ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar $ebef8a20963d596b$var$ecma13ScriptValues = $ebef8a20963d596b$var$ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar $ebef8a20963d596b$var$ecma14ScriptValues = $ebef8a20963d596b$var$ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\nvar $ebef8a20963d596b$var$unicodeScriptValues = {\n 9: $ebef8a20963d596b$var$ecma9ScriptValues,\n 10: $ebef8a20963d596b$var$ecma10ScriptValues,\n 11: $ebef8a20963d596b$var$ecma11ScriptValues,\n 12: $ebef8a20963d596b$var$ecma12ScriptValues,\n 13: $ebef8a20963d596b$var$ecma13ScriptValues,\n 14: $ebef8a20963d596b$var$ecma14ScriptValues\n};\nvar $ebef8a20963d596b$var$data = {};\nfunction $ebef8a20963d596b$var$buildUnicodeData(ecmaVersion) {\n var d = $ebef8a20963d596b$var$data[ecmaVersion] = {\n binary: $ebef8a20963d596b$var$wordsRegexp($ebef8a20963d596b$var$unicodeBinaryProperties[ecmaVersion] + \" \" + $ebef8a20963d596b$var$unicodeGeneralCategoryValues),\n binaryOfStrings: $ebef8a20963d596b$var$wordsRegexp($ebef8a20963d596b$var$unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: $ebef8a20963d596b$var$wordsRegexp($ebef8a20963d596b$var$unicodeGeneralCategoryValues),\n Script: $ebef8a20963d596b$var$wordsRegexp($ebef8a20963d596b$var$unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\nfor(var $ebef8a20963d596b$var$i = 0, $ebef8a20963d596b$var$list = [\n 9,\n 10,\n 11,\n 12,\n 13,\n 14\n]; $ebef8a20963d596b$var$i < $ebef8a20963d596b$var$list.length; $ebef8a20963d596b$var$i += 1){\n var $ebef8a20963d596b$var$ecmaVersion = $ebef8a20963d596b$var$list[$ebef8a20963d596b$var$i];\n $ebef8a20963d596b$var$buildUnicodeData($ebef8a20963d596b$var$ecmaVersion);\n}\nvar $ebef8a20963d596b$var$pp$1 = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\nvar $ebef8a20963d596b$var$RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = $ebef8a20963d596b$var$data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.reset = function reset(start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.raise = function raise(message) {\n this.parser.raiseRecoverable(this.start, \"Invalid regular expression: /\" + this.source + \"/: \" + message);\n};\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n$ebef8a20963d596b$var$RegExpValidationState.prototype.at = function at(i, forceU) {\n if (forceU === void 0) forceU = false;\n var s = this.source;\n var l = s.length;\n if (i >= l) return -1;\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) return c;\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c;\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.nextIndex = function nextIndex(i, forceU) {\n if (forceU === void 0) forceU = false;\n var s = this.source;\n var l = s.length;\n if (i >= l) return l;\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l || (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) return i + 1;\n return i + 2;\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.current = function current(forceU) {\n if (forceU === void 0) forceU = false;\n return this.at(this.pos, forceU);\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.lookahead = function lookahead(forceU) {\n if (forceU === void 0) forceU = false;\n return this.at(this.nextIndex(this.pos, forceU), forceU);\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.advance = function advance(forceU) {\n if (forceU === void 0) forceU = false;\n this.pos = this.nextIndex(this.pos, forceU);\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.eat = function eat(ch, forceU) {\n if (forceU === void 0) forceU = false;\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true;\n }\n return false;\n};\n$ebef8a20963d596b$var$RegExpValidationState.prototype.eatChars = function eatChars(chs, forceU) {\n if (forceU === void 0) forceU = false;\n var pos = this.pos;\n for(var i = 0, list = chs; i < list.length; i += 1){\n var ch = list[i];\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) return false;\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true;\n};\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */ $ebef8a20963d596b$var$pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n var u = false;\n var v = false;\n for(var i = 0; i < flags.length; i++){\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) this.raise(state.start, \"Invalid regular expression flag\");\n if (flags.indexOf(flag, i + 1) > -1) this.raise(state.start, \"Duplicate regular expression flag\");\n if (flag === \"u\") u = true;\n if (flag === \"v\") v = true;\n }\n if (this.options.ecmaVersion >= 15 && u && v) this.raise(state.start, \"Invalid regular expression flag\");\n};\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */ $ebef8a20963d596b$var$pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n$ebef8a20963d596b$var$pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n this.regexp_disjunction(state);\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */ )) state.raise(\"Unmatched ')'\");\n if (state.eat(0x5D /* ] */ ) || state.eat(0x7D /* } */ )) state.raise(\"Lone quantifier brackets\");\n }\n if (state.maxBackReference > state.numCapturingParens) state.raise(\"Invalid escape\");\n for(var i = 0, list = state.backReferenceNames; i < list.length; i += 1){\n var name = list[i];\n if (state.groupNames.indexOf(name) === -1) state.raise(\"Invalid named capture referenced\");\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n$ebef8a20963d596b$var$pp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while(state.eat(0x7C /* | */ ))this.regexp_alternative(state);\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) state.raise(\"Nothing to repeat\");\n if (state.eat(0x7B /* { */ )) state.raise(\"Lone quantifier brackets\");\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n$ebef8a20963d596b$var$pp$1.regexp_alternative = function(state) {\n while(state.pos < state.source.length && this.regexp_eatTerm(state));\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n$ebef8a20963d596b$var$pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) // Make the same message as V8.\n {\n if (state.switchU) state.raise(\"Invalid quantifier\");\n }\n return true;\n }\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n$ebef8a20963d596b$var$pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n // ^, $\n if (state.eat(0x5E /* ^ */ ) || state.eat(0x24 /* $ */ )) return true;\n // \\b \\B\n if (state.eat(0x5C /* \\ */ )) {\n if (state.eat(0x42 /* B */ ) || state.eat(0x62 /* b */ )) return true;\n state.pos = start;\n }\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */ ) && state.eat(0x3F /* ? */ )) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) lookbehind = state.eat(0x3C /* < */ );\n if (state.eat(0x3D /* = */ ) || state.eat(0x21 /* ! */ )) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */ )) state.raise(\"Unterminated group\");\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true;\n }\n }\n state.pos = start;\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n$ebef8a20963d596b$var$pp$1.regexp_eatQuantifier = function(state, noError) {\n if (noError === void 0) noError = false;\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */ );\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n$ebef8a20963d596b$var$pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return state.eat(0x2A /* * */ ) || state.eat(0x2B /* + */ ) || state.eat(0x3F /* ? */ ) || this.regexp_eatBracedQuantifier(state, noError);\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */ )) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */ ) && this.regexp_eatDecimalDigits(state)) max = state.lastIntValue;\n if (state.eat(0x7D /* } */ )) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) state.raise(\"numbers out of order in {} quantifier\");\n return true;\n }\n }\n if (state.switchU && !noError) state.raise(\"Incomplete quantifier\");\n state.pos = start;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n$ebef8a20963d596b$var$pp$1.regexp_eatAtom = function(state) {\n return this.regexp_eatPatternCharacters(state) || state.eat(0x2E /* . */ ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state);\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatAtomEscape(state)) return true;\n state.pos = start;\n }\n return false;\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */ )) {\n if (state.eat(0x3F /* ? */ ) && state.eat(0x3A /* : */ )) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */ )) return true;\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false;\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */ )) {\n if (this.options.ecmaVersion >= 9) this.regexp_groupSpecifier(state);\n else if (state.current() === 0x3F /* ? */ ) state.raise(\"Invalid group\");\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */ )) {\n state.numCapturingParens += 1;\n return true;\n }\n state.raise(\"Unterminated group\");\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n$ebef8a20963d596b$var$pp$1.regexp_eatExtendedAtom = function(state) {\n return state.eat(0x2E /* . */ ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state) || this.regexp_eatInvalidBracedQuantifier(state) || this.regexp_eatExtendedPatternCharacter(state);\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n$ebef8a20963d596b$var$pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) state.raise(\"Nothing to repeat\");\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n$ebef8a20963d596b$var$pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if ($ebef8a20963d596b$var$isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\nfunction $ebef8a20963d596b$var$isSyntaxCharacter(ch) {\n return ch === 0x24 /* $ */ || ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ || ch === 0x2E /* . */ || ch === 0x3F /* ? */ || ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ || ch >= 0x7B /* { */ && ch <= 0x7D /* } */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\n$ebef8a20963d596b$var$pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while((ch = state.current()) !== -1 && !$ebef8a20963d596b$var$isSyntaxCharacter(ch))state.advance();\n return state.pos !== start;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n$ebef8a20963d596b$var$pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (ch !== -1 && ch !== 0x24 /* $ */ && !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ) && ch !== 0x2E /* . */ && ch !== 0x3F /* ? */ && ch !== 0x5B /* [ */ && ch !== 0x5E /* ^ */ && ch !== 0x7C /* | */ ) {\n state.advance();\n return true;\n }\n return false;\n};\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\n$ebef8a20963d596b$var$pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */ )) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) state.raise(\"Duplicate capture group name\");\n state.groupNames.push(state.lastStringValue);\n return;\n }\n state.raise(\"Invalid group\");\n }\n};\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\n$ebef8a20963d596b$var$pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */ )) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */ )) return true;\n state.raise(\"Invalid capture group name\");\n }\n return false;\n};\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\n$ebef8a20963d596b$var$pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += $ebef8a20963d596b$var$codePointToString(state.lastIntValue);\n while(this.regexp_eatRegExpIdentifierPart(state))state.lastStringValue += $ebef8a20963d596b$var$codePointToString(state.lastIntValue);\n return true;\n }\n return false;\n};\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n$ebef8a20963d596b$var$pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) ch = state.lastIntValue;\n if ($ebef8a20963d596b$var$isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true;\n }\n state.pos = start;\n return false;\n};\nfunction $ebef8a20963d596b$var$isRegExpIdentifierStart(ch) {\n return $ebef8a20963d596b$export$56b48cc5d7560ffb(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ ;\n}\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \n$ebef8a20963d596b$var$pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) ch = state.lastIntValue;\n if ($ebef8a20963d596b$var$isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true;\n }\n state.pos = start;\n return false;\n};\nfunction $ebef8a20963d596b$var$isRegExpIdentifierPart(ch) {\n return $ebef8a20963d596b$export$332f4d7bee38db93(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatAtomEscape = function(state) {\n if (this.regexp_eatBackReference(state) || this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state) || state.switchN && this.regexp_eatKGroupName(state)) return true;\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */ ) state.raise(\"Invalid unicode escape\");\n state.raise(\"Invalid escape\");\n }\n return false;\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) state.maxBackReference = n;\n return true;\n }\n if (n <= state.numCapturingParens) return true;\n state.pos = start;\n }\n return false;\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */ )) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true;\n }\n state.raise(\"Invalid named reference\");\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatCharacterEscape = function(state) {\n return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state, false) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state);\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */ )) {\n if (this.regexp_eatControlLetter(state)) return true;\n state.pos = start;\n }\n return false;\n};\n$ebef8a20963d596b$var$pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !$ebef8a20963d596b$var$isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */ ) {\n state.lastIntValue = 0x09; /* \\t */ \n state.advance();\n return true;\n }\n if (ch === 0x6E /* n */ ) {\n state.lastIntValue = 0x0A; /* \\n */ \n state.advance();\n return true;\n }\n if (ch === 0x76 /* v */ ) {\n state.lastIntValue = 0x0B; /* \\v */ \n state.advance();\n return true;\n }\n if (ch === 0x66 /* f */ ) {\n state.lastIntValue = 0x0C; /* \\f */ \n state.advance();\n return true;\n }\n if (ch === 0x72 /* r */ ) {\n state.lastIntValue = 0x0D; /* \\r */ \n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n$ebef8a20963d596b$var$pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if ($ebef8a20963d596b$var$isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true;\n }\n return false;\n};\nfunction $ebef8a20963d596b$var$isControlLetter(ch) {\n return ch >= 0x41 /* A */ && ch <= 0x5A /* Z */ || ch >= 0x61 /* a */ && ch <= 0x7A /* z */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n$ebef8a20963d596b$var$pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if (forceU === void 0) forceU = false;\n var start = state.pos;\n var switchU = forceU || state.switchU;\n if (state.eat(0x75 /* u */ )) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */ ) && state.eat(0x75 /* u */ ) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true;\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true;\n }\n if (switchU && state.eat(0x7B /* { */ ) && this.regexp_eatHexDigits(state) && state.eat(0x7D /* } */ ) && $ebef8a20963d596b$var$isValidUnicode(state.lastIntValue)) return true;\n if (switchU) state.raise(\"Invalid unicode escape\");\n state.pos = start;\n }\n return false;\n};\nfunction $ebef8a20963d596b$var$isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) return true;\n if (state.eat(0x2F /* / */ )) {\n state.lastIntValue = 0x2F; /* / */ \n return true;\n }\n return false;\n }\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */ )) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */ ) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */ );\n state.advance();\n }while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ );\n return true;\n }\n return false;\n};\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar $ebef8a20963d596b$var$CharSetNone = 0; // Nothing parsed\nvar $ebef8a20963d596b$var$CharSetOk = 1; // Construct parsed, cannot contain strings\nvar $ebef8a20963d596b$var$CharSetString = 2; // Construct parsed, can contain strings\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n if ($ebef8a20963d596b$var$isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return $ebef8a20963d596b$var$CharSetOk;\n }\n var negate = false;\n if (state.switchU && this.options.ecmaVersion >= 9 && ((negate = ch === 0x50 /* P */ ) || ch === 0x70 /* p */ )) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (state.eat(0x7B /* { */ ) && (result = this.regexp_eatUnicodePropertyValueExpression(state)) && state.eat(0x7D /* } */ )) {\n if (negate && result === $ebef8a20963d596b$var$CharSetString) state.raise(\"Invalid property name\");\n return result;\n }\n state.raise(\"Invalid property name\");\n }\n return $ebef8a20963d596b$var$CharSetNone;\n};\nfunction $ebef8a20963d596b$var$isCharacterClassEscape(ch) {\n return ch === 0x64 /* d */ || ch === 0x44 /* D */ || ch === 0x73 /* s */ || ch === 0x53 /* S */ || ch === 0x77 /* w */ || ch === 0x57 /* W */ ;\n}\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\n$ebef8a20963d596b$var$pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */ )) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return $ebef8a20963d596b$var$CharSetOk;\n }\n }\n state.pos = start;\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n }\n return $ebef8a20963d596b$var$CharSetNone;\n};\n$ebef8a20963d596b$var$pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!$ebef8a20963d596b$var$hasOwn(state.unicodeProperties.nonBinary, name)) state.raise(\"Invalid property name\");\n if (!state.unicodeProperties.nonBinary[name].test(value)) state.raise(\"Invalid property value\");\n};\n$ebef8a20963d596b$var$pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) return $ebef8a20963d596b$var$CharSetOk;\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) return $ebef8a20963d596b$var$CharSetString;\n state.raise(\"Invalid property name\");\n};\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\n$ebef8a20963d596b$var$pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while($ebef8a20963d596b$var$isUnicodePropertyNameCharacter(ch = state.current())){\n state.lastStringValue += $ebef8a20963d596b$var$codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\";\n};\nfunction $ebef8a20963d596b$var$isUnicodePropertyNameCharacter(ch) {\n return $ebef8a20963d596b$var$isControlLetter(ch) || ch === 0x5F /* _ */ ;\n}\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\n$ebef8a20963d596b$var$pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while($ebef8a20963d596b$var$isUnicodePropertyValueCharacter(ch = state.current())){\n state.lastStringValue += $ebef8a20963d596b$var$codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\";\n};\nfunction $ebef8a20963d596b$var$isUnicodePropertyValueCharacter(ch) {\n return $ebef8a20963d596b$var$isUnicodePropertyNameCharacter(ch) || $ebef8a20963d596b$var$isDecimalDigit(ch);\n}\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\n$ebef8a20963d596b$var$pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state);\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n$ebef8a20963d596b$var$pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */ )) {\n var negate = state.eat(0x5E /* ^ */ );\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */ )) state.raise(\"Unterminated character class\");\n if (negate && result === $ebef8a20963d596b$var$CharSetString) state.raise(\"Negated character class may contain strings\");\n return true;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n$ebef8a20963d596b$var$pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */ ) return $ebef8a20963d596b$var$CharSetOk;\n if (state.switchV) return this.regexp_classSetExpression(state);\n this.regexp_nonEmptyClassRanges(state);\n return $ebef8a20963d596b$var$CharSetOk;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n$ebef8a20963d596b$var$pp$1.regexp_nonEmptyClassRanges = function(state) {\n while(this.regexp_eatClassAtom(state)){\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */ ) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) state.raise(\"Invalid character class\");\n if (left !== -1 && right !== -1 && left > right) state.raise(\"Range out of order in character class\");\n }\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n$ebef8a20963d596b$var$pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatClassEscape(state)) return true;\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || $ebef8a20963d596b$var$isOctalDigit(ch$1)) state.raise(\"Invalid class escape\");\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n var ch = state.current();\n if (ch !== 0x5D /* ] */ ) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n$ebef8a20963d596b$var$pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x62 /* b */ )) {\n state.lastIntValue = 0x08; /* */ \n return true;\n }\n if (state.switchU && state.eat(0x2D /* - */ )) {\n state.lastIntValue = 0x2D; /* - */ \n return true;\n }\n if (!state.switchU && state.eat(0x63 /* c */ )) {\n if (this.regexp_eatClassControlLetter(state)) return true;\n state.pos = start;\n }\n return this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state);\n};\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\n$ebef8a20963d596b$var$pp$1.regexp_classSetExpression = function(state) {\n var result = $ebef8a20963d596b$var$CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ;\n else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === $ebef8a20963d596b$var$CharSetString) result = $ebef8a20963d596b$var$CharSetString;\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while(state.eatChars([\n 0x26,\n 0x26\n ])){\n if (state.current() !== 0x26 /* & */ && (subResult = this.regexp_eatClassSetOperand(state))) {\n if (subResult !== $ebef8a20963d596b$var$CharSetString) result = $ebef8a20963d596b$var$CharSetOk;\n continue;\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) return result;\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while(state.eatChars([\n 0x2D,\n 0x2D\n ])){\n if (this.regexp_eatClassSetOperand(state)) continue;\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) return result;\n } else state.raise(\"Invalid character in character class\");\n // https://tc39.es/ecma262/#prod-ClassUnion\n for(;;){\n if (this.regexp_eatClassSetRange(state)) continue;\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) return result;\n if (subResult === $ebef8a20963d596b$var$CharSetString) result = $ebef8a20963d596b$var$CharSetString;\n }\n};\n// https://tc39.es/ecma262/#prod-ClassSetRange\n$ebef8a20963d596b$var$pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */ ) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) state.raise(\"Range out of order in character class\");\n return true;\n }\n state.pos = start;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassSetOperand\n$ebef8a20963d596b$var$pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) return $ebef8a20963d596b$var$CharSetOk;\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state);\n};\n// https://tc39.es/ecma262/#prod-NestedClass\n$ebef8a20963d596b$var$pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */ )) {\n var negate = state.eat(0x5E /* ^ */ );\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */ )) {\n if (negate && result === $ebef8a20963d596b$var$CharSetString) state.raise(\"Negated character class may contain strings\");\n return result;\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */ )) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) return result$1;\n state.pos = start;\n }\n return null;\n};\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\n$ebef8a20963d596b$var$pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([\n 0x5C,\n 0x71\n ])) {\n if (state.eat(0x7B /* { */ )) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */ )) return result;\n } else // Make the same message as V8.\n state.raise(\"Invalid escape\");\n state.pos = start;\n }\n return null;\n};\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n$ebef8a20963d596b$var$pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while(state.eat(0x7C /* | */ ))if (this.regexp_classString(state) === $ebef8a20963d596b$var$CharSetString) result = $ebef8a20963d596b$var$CharSetString;\n return result;\n};\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\n$ebef8a20963d596b$var$pp$1.regexp_classString = function(state) {\n var count = 0;\n while(this.regexp_eatClassSetCharacter(state))count++;\n return count === 1 ? $ebef8a20963d596b$var$CharSetOk : $ebef8a20963d596b$var$CharSetString;\n};\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\n$ebef8a20963d596b$var$pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatCharacterEscape(state) || this.regexp_eatClassSetReservedPunctuator(state)) return true;\n if (state.eat(0x62 /* b */ )) {\n state.lastIntValue = 0x08; /* */ \n return true;\n }\n state.pos = start;\n return false;\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && $ebef8a20963d596b$var$isClassSetReservedDoublePunctuatorCharacter(ch)) return false;\n if ($ebef8a20963d596b$var$isClassSetSyntaxCharacter(ch)) return false;\n state.advance();\n state.lastIntValue = ch;\n return true;\n};\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction $ebef8a20963d596b$var$isClassSetReservedDoublePunctuatorCharacter(ch) {\n return ch === 0x21 /* ! */ || ch >= 0x23 /* # */ && ch <= 0x26 /* & */ || ch >= 0x2A /* * */ && ch <= 0x2C /* , */ || ch === 0x2E /* . */ || ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ || ch === 0x5E /* ^ */ || ch === 0x60 /* ` */ || ch === 0x7E /* ~ */ ;\n}\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction $ebef8a20963d596b$var$isClassSetSyntaxCharacter(ch) {\n return ch === 0x28 /* ( */ || ch === 0x29 /* ) */ || ch === 0x2D /* - */ || ch === 0x2F /* / */ || ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ || ch >= 0x7B /* { */ && ch <= 0x7D /* } */ ;\n}\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n$ebef8a20963d596b$var$pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if ($ebef8a20963d596b$var$isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction $ebef8a20963d596b$var$isClassSetReservedPunctuator(ch) {\n return ch === 0x21 /* ! */ || ch === 0x23 /* # */ || ch === 0x25 /* % */ || ch === 0x26 /* & */ || ch === 0x2C /* , */ || ch === 0x2D /* - */ || ch >= 0x3A /* : */ && ch <= 0x3E /* > */ || ch === 0x40 /* @ */ || ch === 0x60 /* ` */ || ch === 0x7E /* ~ */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n$ebef8a20963d596b$var$pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if ($ebef8a20963d596b$var$isDecimalDigit(ch) || ch === 0x5F /* _ */ ) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n$ebef8a20963d596b$var$pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */ )) {\n if (this.regexp_eatFixedHexDigits(state, 2)) return true;\n if (state.switchU) state.raise(\"Invalid escape\");\n state.pos = start;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n$ebef8a20963d596b$var$pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while($ebef8a20963d596b$var$isDecimalDigit(ch = state.current())){\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */ );\n state.advance();\n }\n return state.pos !== start;\n};\nfunction $ebef8a20963d596b$var$isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n$ebef8a20963d596b$var$pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while($ebef8a20963d596b$var$isHexDigit(ch = state.current())){\n state.lastIntValue = 16 * state.lastIntValue + $ebef8a20963d596b$var$hexToInt(ch);\n state.advance();\n }\n return state.pos !== start;\n};\nfunction $ebef8a20963d596b$var$isHexDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ || ch >= 0x41 /* A */ && ch <= 0x46 /* F */ || ch >= 0x61 /* a */ && ch <= 0x66 /* f */ ;\n}\nfunction $ebef8a20963d596b$var$hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */ ) return 10 + (ch - 0x41 /* A */ );\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */ ) return 10 + (ch - 0x61 /* a */ );\n return ch - 0x30 /* 0 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\n$ebef8a20963d596b$var$pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n else state.lastIntValue = n1 * 8 + n2;\n } else state.lastIntValue = n1;\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n$ebef8a20963d596b$var$pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if ($ebef8a20963d596b$var$isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */ \n state.advance();\n return true;\n }\n state.lastIntValue = 0;\n return false;\n};\nfunction $ebef8a20963d596b$var$isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n$ebef8a20963d596b$var$pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for(var i = 0; i < length; ++i){\n var ch = state.current();\n if (!$ebef8a20963d596b$var$isHexDigit(ch)) {\n state.pos = start;\n return false;\n }\n state.lastIntValue = 16 * state.lastIntValue + $ebef8a20963d596b$var$hexToInt(ch);\n state.advance();\n }\n return true;\n};\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\nvar $ebef8a20963d596b$export$50792b0e93539fde = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations) this.loc = new $ebef8a20963d596b$export$7387db7caf96fcdb(p, p.startLoc, p.endLoc);\n if (p.options.ranges) this.range = [\n p.start,\n p.end\n ];\n};\n// ## Tokenizer\nvar $ebef8a20963d596b$var$pp = $ebef8a20963d596b$export$7acfa6ed01010e37.prototype;\n// Move to the next token\n$ebef8a20963d596b$var$pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword);\n if (this.options.onToken) this.options.onToken(new $ebef8a20963d596b$export$50792b0e93539fde(this));\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n$ebef8a20963d596b$var$pp.getToken = function() {\n this.next();\n return new $ebef8a20963d596b$export$50792b0e93539fde(this);\n};\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\") $ebef8a20963d596b$var$pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n return {\n next: function() {\n var token = this$1$1.getToken();\n return {\n done: token.type === $ebef8a20963d596b$export$b54c7ea7aabba5c8.eof,\n value: token\n };\n }\n };\n};\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n// Read a single token, updating the parser object's token-related\n// properties.\n$ebef8a20963d596b$var$pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) this.skipSpace();\n this.start = this.pos;\n if (this.options.locations) this.startLoc = this.curPosition();\n if (this.pos >= this.input.length) return this.finishToken($ebef8a20963d596b$export$b54c7ea7aabba5c8.eof);\n if (curContext.override) return curContext.override(this);\n else this.readToken(this.fullCharCodeAtPos());\n};\n$ebef8a20963d596b$var$pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if ($ebef8a20963d596b$export$56b48cc5d7560ffb(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */ ) return this.readWord();\n return this.getTokenFromCode(code);\n};\n$ebef8a20963d596b$var$pp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) return code;\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00;\n};\n$ebef8a20963d596b$var$pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) this.raise(this.pos - 2, \"Unterminated comment\");\n this.pos = end + 2;\n if (this.options.locations) for(var nextBreak = void 0, pos = start; (nextBreak = $ebef8a20963d596b$var$nextLineBreak(this.input, pos, this.pos)) > -1;){\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n if (this.options.onComment) this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition());\n};\n$ebef8a20963d596b$var$pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while(this.pos < this.input.length && !$ebef8a20963d596b$export$2c19a3e3b4008fff(ch))ch = this.input.charCodeAt(++this.pos);\n if (this.options.onComment) this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition());\n};\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n$ebef8a20963d596b$var$pp.skipSpace = function() {\n loop: while(this.pos < this.input.length){\n var ch = this.input.charCodeAt(this.pos);\n switch(ch){\n case 32:\n case 160:\n ++this.pos;\n break;\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) ++this.pos;\n case 10:\n case 8232:\n case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break;\n case 47:\n switch(this.input.charCodeAt(this.pos + 1)){\n case 42:\n this.skipBlockComment();\n break;\n case 47:\n this.skipLineComment(2);\n break;\n default:\n break loop;\n }\n break;\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && $ebef8a20963d596b$export$268622f0f1cbc82b.test(String.fromCharCode(ch))) ++this.pos;\n else break loop;\n }\n }\n};\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n$ebef8a20963d596b$var$pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) this.endLoc = this.curPosition();\n var prevType = this.type;\n this.type = type;\n this.value = val;\n this.updateContext(prevType);\n};\n// ### Token reading\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\n$ebef8a20963d596b$var$pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) return this.readNumber(true);\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) {\n this.pos += 3;\n return this.finishToken($ebef8a20963d596b$export$b54c7ea7aabba5c8.ellipsis);\n } else {\n ++this.pos;\n return this.finishToken($ebef8a20963d596b$export$b54c7ea7aabba5c8.dot);\n }\n};\n$ebef8a20963d596b$var$pp.readToken_slash = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) {\n ++this.pos;\n return this.readRegexp();\n }\n if (next === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.slash, 1);\n};\n$ebef8a20963d596b$var$pp.readToken_mult_modulo_exp = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? $ebef8a20963d596b$export$b54c7ea7aabba5c8.star : $ebef8a20963d596b$export$b54c7ea7aabba5c8.modulo;\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = $ebef8a20963d596b$export$b54c7ea7aabba5c8.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n if (next === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp(tokentype, size);\n};\n$ebef8a20963d596b$var$pp.readToken_pipe_amp = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, 3);\n }\n return this.finishOp(code === 124 ? $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalOR : $ebef8a20963d596b$export$b54c7ea7aabba5c8.logicalAND, 2);\n }\n if (next === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp(code === 124 ? $ebef8a20963d596b$export$b54c7ea7aabba5c8.bitwiseOR : $ebef8a20963d596b$export$b54c7ea7aabba5c8.bitwiseAND, 1);\n};\n$ebef8a20963d596b$var$pp.readToken_caret = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.bitwiseXOR, 1);\n};\n$ebef8a20963d596b$var$pp.readToken_plus_min = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || $ebef8a20963d596b$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken();\n }\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.incDec, 2);\n }\n if (next === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.plusMin, 1);\n};\n$ebef8a20963d596b$var$pp.readToken_lt_gt = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp($ebef8a20963d596b$export$b54c7ea7aabba5c8.bitShift, size);\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n // operators --> modify existing Colors\n // interpolators\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n // scale\n chroma.scales = scales;\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n var chroma_js = chroma;\n return chroma_js;\n});\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nconst $3e2f0fa58ba587b4$var$location = window.location;\nconst $3e2f0fa58ba587b4$export$281ad3752a540efe = new URLSearchParams($3e2f0fa58ba587b4$var$location.search);\nconst $3e2f0fa58ba587b4$export$128fa18b7194ef = new URL($3e2f0fa58ba587b4$var$location);\nconst $3e2f0fa58ba587b4$export$1bb10639a2cd4297 = $90706cc60453e267$export$185802fd694ee1f5({\n objectHash: $3e2f0fa58ba587b4$export$9cb4719e2e525b7a\n});\nfunction $3e2f0fa58ba587b4$export$d2cf6cd1dc7067d3(className, ...elements) {\n elements.forEach((element)=>element.classList.add(className));\n}\nfunction $3e2f0fa58ba587b4$export$1a23559e655dacdd(original, degrees) {\n const result = original + degrees;\n if (result < 0) return 360 + result;\n else if (result > 360) return result - 360;\n return result;\n}\nfunction $3e2f0fa58ba587b4$export$bac4c4504d574f(direction, amount) {\n return (direction + amount + 6) % 6;\n}\nfunction $3e2f0fa58ba587b4$export$afb15ede80c42aab(string) {\n const binString = window.atob($3e2f0fa58ba587b4$var$base64unescape(string));\n // noinspection JSCheckFunctionSignatures\n return new TextDecoder().decode((0, $a39eeb69bf620de6$export$2e2bcd8739ae039).inflate(Uint8Array.from(binString, (c)=>c.codePointAt(0))));\n}\nwindow.base64decode = $3e2f0fa58ba587b4$export$afb15ede80c42aab;\nfunction $3e2f0fa58ba587b4$export$4e633de97d65d1c8(string) {\n return $3e2f0fa58ba587b4$var$base64escape(window.btoa(String.fromCodePoint(...(0, $a39eeb69bf620de6$export$2e2bcd8739ae039).deflate(new TextEncoder().encode(string)))));\n}\nwindow.base64encode = $3e2f0fa58ba587b4$export$4e633de97d65d1c8;\nfunction $3e2f0fa58ba587b4$var$base64escape(string) {\n // https://en.wikipedia.org/wiki/Base64#URL_applications\n return string.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction $3e2f0fa58ba587b4$var$base64unescape(string) {\n return (string + \"===\".slice((string.length + 3) % 4)).replace(/-/g, \"+\").replace(/_/g, \"/\");\n}\nfunction $3e2f0fa58ba587b4$export$9a00dee1beb8f576(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction $3e2f0fa58ba587b4$export$6e5538615c060df7(...args) {\n return args.findLast((arg)=>arg !== undefined);\n}\nfunction $3e2f0fa58ba587b4$export$61fc7d43ac8f84b0(func, delay = 500) {\n let timeout;\n return (...args)=>{\n clearTimeout(timeout);\n timeout = setTimeout(()=>{\n func(...args);\n }, delay);\n };\n}\nfunction $3e2f0fa58ba587b4$export$9cb4719e2e525b7a(x, y) {\n return typeof x === \"object\" && typeof y === \"object\" ? Object.keys(x).length === Object.keys(y).length && Object.keys(x).every((key)=>{\n const xv = x[key];\n const yv = y[key];\n return Object.hasOwn(y, key) && (typeof xv?.equals === \"function\" ? xv.equals(yv) : $3e2f0fa58ba587b4$export$9cb4719e2e525b7a(xv, yv));\n }) : x === y;\n}\nfunction $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1(event, detail = null) {\n document.dispatchEvent(new CustomEvent(event, {\n detail: detail\n }));\n}\nfunction $3e2f0fa58ba587b4$export$c23f9d3341b5fd07(pointA, pointB, maxDiff = 0) {\n return pointA && pointB && pointA.round().subtract(pointB.round()).length <= maxDiff;\n}\nfunction $3e2f0fa58ba587b4$export$836ff99bad0a09da(triangle) {\n const segments = triangle.segments;\n const vertex = segments[0].point;\n const opposite = segments[1].point.subtract(segments[1].point.subtract(segments[2].point).divide(2));\n return vertex.add(opposite.subtract(vertex).multiply(2 / 3));\n}\nfunction $3e2f0fa58ba587b4$export$3cb91a81090b9eee(color) {\n const span = document.createElement(\"span\");\n span.classList.add(\"beam\");\n span.style.backgroundColor = color;\n span.title = color;\n return span;\n}\nfunction $3e2f0fa58ba587b4$export$6d3741128bd5bb7d(colors) {\n if (!colors.length) return [];\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(colors).hex();\n const elements = [];\n if (colors.some((other)=>other !== color)) {\n const maxColorIndex = colors.length - 1;\n colors.forEach((color, index)=>{\n elements.push($3e2f0fa58ba587b4$export$3cb91a81090b9eee(color));\n if (index < maxColorIndex) {\n const plus = document.createElement(\"span\");\n plus.classList.add(\"text\");\n plus.textContent = \"+\";\n elements.push(plus);\n }\n });\n const equals = document.createElement(\"span\");\n equals.classList.add(\"text\");\n equals.textContent = \"=\";\n elements.push(equals);\n }\n elements.push($3e2f0fa58ba587b4$export$3cb91a81090b9eee(color));\n return elements;\n}\nfunction $3e2f0fa58ba587b4$export$79376507b09a66f(point) {\n return (a, b)=>a.subtract(point).length - b.subtract(point).length;\n}\nfunction $3e2f0fa58ba587b4$export$f6292fcace2a1886(name, title) {\n const span = document.createElement(\"span\");\n span.classList.add(\"icon\", \"material-symbols-outlined\");\n span.textContent = name;\n span.title = title ?? $3e2f0fa58ba587b4$export$9a00dee1beb8f576(name);\n return span;\n}\nfunction $3e2f0fa58ba587b4$export$78da85ac75754159(pointA, pointB, length = (length)=>length / 2) {\n const vector = pointA.subtract(pointB);\n vector.length = typeof length === \"function\" ? length(vector.length) : length;\n return pointA.subtract(vector);\n}\nfunction $3e2f0fa58ba587b4$export$bd58da2e19cd17da(point, length, direction) {\n const vector = new (0, $hvNIE.Point)(0, 0);\n vector.length = length;\n vector.angle = $3e2f0fa58ba587b4$export$c43d7a950587702b(direction) * 60;\n return point.add(vector);\n}\nfunction $3e2f0fa58ba587b4$export$35d6177dfa7903b5(direction) {\n return direction + (direction >= 3 ? -3 : 3);\n}\nfunction $3e2f0fa58ba587b4$export$c43d7a950587702b(direction, toPaperJs = true) {\n direction = direction + (toPaperJs ? -1 : 1) * 2;\n if (direction < 0) return direction + 6;\n else if (direction > 5) return direction - 6;\n return direction;\n}\nfunction $3e2f0fa58ba587b4$export$1690e12b840569b9(line, point) {\n const [a, b] = line;\n const c = point;\n return Math.sign((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));\n}\nfunction $3e2f0fa58ba587b4$export$17a5d53cd2e4de6c(beamDirection, reflectorDirection) {\n // Have to convert to PaperJS directions on the way in\n const beamAngle = $3e2f0fa58ba587b4$export$c43d7a950587702b(beamDirection, true) * 60;\n const reflectorAngle = reflectorDirection * 30;\n const reflectedBeamAngle = (reflectorAngle - beamAngle) * 2;\n // And convert back to our normal directions on the way out\n return $3e2f0fa58ba587b4$export$c43d7a950587702b($3e2f0fa58ba587b4$export$1a23559e655dacdd(beamAngle, reflectedBeamAngle) / 60 % 6, false);\n}\nfunction $3e2f0fa58ba587b4$export$43941667eccc070(text) {\n const span = document.createElement(\"span\");\n span.classList.add(\"text\");\n span.textContent = text.toString();\n return span;\n}\nfunction $3e2f0fa58ba587b4$export$8793edee2d425525(value) {\n if (value) return value;\n}\nfunction $3e2f0fa58ba587b4$export$c2255604a80b4506(className, ...elements) {\n elements.forEach((element)=>element.classList.remove(className));\n}\nfunction $3e2f0fa58ba587b4$export$abb49451cc8201c(direction, amount) {\n return $3e2f0fa58ba587b4$export$bac4c4504d574f(direction, amount * -1);\n}\nfunction $3e2f0fa58ba587b4$export$abf0e2545164275f(array, key) {\n const values = array.map((value)=>value[key]);\n return array.filter((value, index)=>!values.includes(value[key], index + 1));\n}\n\n\nconst $f1fc5431671d3192$var$console = window.console = window.console || {\n debug: function() {}\n};\nconst $f1fc5431671d3192$var$consoleDebug = $f1fc5431671d3192$var$console.debug;\nfunction $f1fc5431671d3192$export$1c9f709888824e05(debug) {\n $f1fc5431671d3192$var$console.debug = debug ? $f1fc5431671d3192$var$consoleDebug : function() {};\n}\n// Silence debug logging by default\n$f1fc5431671d3192$export$1c9f709888824e05((0, $3e2f0fa58ba587b4$export$281ad3752a540efe).has(\"debug\") ?? false);\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nclass $ca914ef976dd611b$export$2e382909194b1aab {\n constructor(r, c){\n this.coordinates = [\n r,\n c\n ];\n this.r = r;\n this.c = c;\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static toAxialCoordinates(offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2;\n return new (0, $fe48dca2d228a457$export$c56d3ccff2456440)(q, offset.r);\n }\n}\n\n\nclass $fe48dca2d228a457$export$c56d3ccff2456440 {\n constructor(q, r, s){\n if (!s) s = -q - r;\n this.coordinates = [\n q,\n r,\n s\n ];\n this.q = q;\n this.r = r;\n this.s = s;\n }\n add(other) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.add(this, other);\n }\n equals(other) {\n return this.q === other.q && this.r === other.r && this.s === other.s;\n }\n isNeighbor(other) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.isNeighbor(this, other);\n }\n neighbor(direction) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.neighbor(this, direction);\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static add(a, b) {\n return new $fe48dca2d228a457$export$c56d3ccff2456440(a.q + b.q, a.r + b.r);\n }\n static direction(direction) {\n if (direction === 0) direction = 6;\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return $fe48dca2d228a457$export$c56d3ccff2456440.directions[6 - direction];\n }\n static directions = [\n new $fe48dca2d228a457$export$c56d3ccff2456440(1, 0),\n new $fe48dca2d228a457$export$c56d3ccff2456440(1, -1),\n new $fe48dca2d228a457$export$c56d3ccff2456440(0, -1),\n new $fe48dca2d228a457$export$c56d3ccff2456440(-1, 0),\n new $fe48dca2d228a457$export$c56d3ccff2456440(-1, 1),\n new $fe48dca2d228a457$export$c56d3ccff2456440(0, 1)\n ];\n static isNeighbor(a, b) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.directions.map((direction)=>$fe48dca2d228a457$export$c56d3ccff2456440.add(a, direction)).some((neighbor)=>neighbor.equals(b));\n }\n static neighbor(start, direction) {\n return $fe48dca2d228a457$export$c56d3ccff2456440.add(start, $fe48dca2d228a457$export$c56d3ccff2456440.direction(direction));\n }\n static toOffsetCoordinates(axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2;\n return new (0, $ca914ef976dd611b$export$2e382909194b1aab)(c, axial.r);\n }\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nclass $ca3880ece69ea231$export$654f18991713c8c4 {\n #state = {};\n constructor(state){\n this.setState(state);\n }\n getState() {\n return structuredClone(this.#state);\n }\n setState(state) {\n this.#state = structuredClone(state);\n }\n updateState(updater, dispatchEvent = true) {\n updater(this.#state);\n if (dispatchEvent) (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($ca3880ece69ea231$export$654f18991713c8c4.Events.Update, {\n object: this\n });\n return this.getState();\n }\n static Events = Object.freeze({\n Update: \"state-update\"\n });\n}\n\n\nclass $4b738c6f333de3e1$export$6d08773d2e66f8f2 extends (0, $ca3880ece69ea231$export$654f18991713c8c4) {\n center;\n data;\n group;\n id = $4b738c6f333de3e1$export$6d08773d2e66f8f2.uniqueId++;\n // Whether the item can be clicked on\n locked;\n parent;\n sortOrder = 100;\n type;\n constructor(parent, state, configuration){\n super(state);\n this.type = state?.type || configuration?.type;\n this.data = Object.assign({\n id: this.id,\n type: this.type\n }, configuration?.data || {});\n this.locked = configuration?.locked !== false;\n if (parent) this.center = parent.center;\n this.parent = parent;\n this.group = new (0, $hvNIE.Group)({\n data: this.data,\n locked: this.locked\n });\n }\n equals(otherItem) {\n return otherItem instanceof $4b738c6f333de3e1$export$6d08773d2e66f8f2 && this.id === otherItem.id;\n }\n getColorElements() {\n return [];\n }\n getCompoundPath() {\n return new (0, $hvNIE.CompoundPath)({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({\n insert: false\n }).children.filter((child)=>child.data.collidable !== false)\n });\n }\n getIndex() {\n return this.group.index;\n }\n getLayer() {\n return this.group.parent;\n }\n onTap() {}\n onCollision({ collisionStep: collisionStep }) {\n return collisionStep;\n }\n onDeselected() {}\n onInitialization() {}\n onSelected() {}\n remove() {\n this.group.remove();\n }\n toString() {\n return `[${this.type}:${this.id}]`;\n }\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"beam\",\n \"collision\",\n \"filter\",\n \"mask\",\n \"portal\",\n \"reflector\",\n \"terminus\",\n \"tile\",\n \"wall\"\n ].map((type)=>[\n type,\n (0, $3e2f0fa58ba587b4$export$9a00dee1beb8f576)(type)\n ])));\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0;\n}\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\nclass $8ee30938c07750df$export$b20b719ec758a20f {\n #events = [];\n #options = {\n element: document\n };\n constructor(options = {}){\n this.#options = Object.assign(this.#options, options);\n }\n add(events, options = {}) {\n this.#events = this.#events.concat(events.map((event)=>{\n event = Object.assign({}, this.#options, options, event);\n if (!event.type) throw new Error(\"Event type is required\");\n if (event.context) event.handler = event.handler.bind(event.context);\n event.element.addEventListener(event.type, event.handler, event.options);\n return event;\n }));\n }\n remove() {\n this.#events.forEach((event)=>event.element.removeEventListener(event.type, event.handler));\n this.#events = [];\n }\n}\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nclass $97686966a3fec53f$export$94affb487e701bf2 {\n #cache = {};\n #hasKeys;\n #keys;\n constructor(keys = []){\n this.#keys = keys;\n this.#hasKeys = keys.length !== 0;\n keys.forEach((key)=>{\n this.#cache[key] = new $97686966a3fec53f$export$94affb487e701bf2();\n });\n }\n set(key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) throw new Error(`Invalid key: ${key}`);\n this.#cache[key] = item;\n }\n get(key) {\n return key === undefined ? this.#cache : this.#cache[key];\n }\n keys(key) {\n return Object.keys(this.#get(key));\n }\n length(key) {\n return this.keys(key).length;\n }\n unset(key) {\n delete this.#cache[key];\n }\n values(key) {\n return Object.values(this.#get(key));\n }\n #get(key) {\n const value = this.get(key);\n return value instanceof $97686966a3fec53f$export$94affb487e701bf2 ? value.get() : value;\n }\n}\n\n\n\nclass $4f41d74d72b0a295$export$b0d759d807f751d4 {\n #bounds;\n #cache = new (0, $97686966a3fec53f$export$94affb487e701bf2)(Object.values($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys));\n #element;\n #eventListener = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #offset;\n constructor(element){\n this.#bounds = element.getBoundingClientRect();\n this.#element = element;\n this.#offset = new (0, $hvNIE.Point)(this.#bounds.left, this.#bounds.top);\n this.#eventListener.add([\n {\n type: \"pointercancel\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointermove\",\n handler: this.onPointerMove\n },\n {\n type: \"pointerout\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n },\n {\n type: \"wheel\",\n handler: this.onMouseWheel,\n options: {\n passive: false\n }\n }\n ], {\n element: element\n });\n }\n onMouseWheel(event) {\n event.preventDefault();\n this.#zoom(new (0, $hvNIE.Point)(event.offsetX, event.offsetY), event.deltaY, 1.05);\n }\n onPan(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewToProject($4f41d74d72b0a295$export$b0d759d807f751d4.point(event));\n const pan = this.#getGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pan);\n if (!pan) {\n this.#setGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pan, {\n from: point\n });\n return;\n }\n const center = pan.from.subtract(point).add((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center);\n // Allow a little wiggle room to prevent panning on tap\n if ((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains(\"grab\")) document.body.classList.add(\"grab\");\n // Center on the cursor\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center = center;\n }\n }\n onPinch(events) {\n const pointer0 = events[0];\n const pointer1 = events[1];\n const point0 = $4f41d74d72b0a295$export$b0d759d807f751d4.point(pointer0);\n const point1 = $4f41d74d72b0a295$export$b0d759d807f751d4.point(pointer1);\n const distance = point0.getDistance(point1);\n const pinch = this.#getGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pinch);\n if (!pinch) {\n this.#setGesture($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pinch, {\n distance: distance\n });\n return;\n }\n const center = point0.add(point1).divide(2).subtract(this.#offset);\n const scale = distance / pinch.distance;\n const delta = (pinch.distance - distance) * scale;\n this.#zoom(center, delta, 1.01);\n pinch.distance = distance;\n }\n onPointerDown(event) {\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).set(event.pointerId, event);\n }\n onPointerMove(event) {\n const down = this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) // Ignore events until there is a pointer down event\n return;\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = $4f41d74d72b0a295$export$b0d759d807f751d4.point(event).subtract($4f41d74d72b0a295$export$b0d759d807f751d4.point(down)).length;\n if (diff > 1) {\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).set(event.pointerId, event);\n const events = this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).values();\n if (events.length === 2) this.onPinch(events);\n else this.onPan(event);\n }\n }\n onPointerUp(event) {\n const down = this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) return;\n if (this.#cache.length($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down) === 1 && !this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).get(event.pointerId)) this.onTap(down);\n document.body.classList.remove(\"grab\");\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Down).unset(event.pointerId);\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move).unset(event.pointerId);\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).unset($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pan);\n if (this.#cache.length($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Move) < 2) this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).unset($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Pinch);\n }\n onTap(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewToProject($4f41d74d72b0a295$export$b0d759d807f751d4.point(event).subtract(this.#offset));\n this.#element.dispatchEvent(new CustomEvent($4f41d74d72b0a295$export$b0d759d807f751d4.GestureKeys.Tap, {\n detail: {\n event: event,\n point: point\n }\n }));\n }\n #getGesture(key) {\n return this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).get(key);\n }\n #setGesture(key, value) {\n this.#cache.get($4f41d74d72b0a295$export$b0d759d807f751d4.CacheKeys.Gesture).set(key, value);\n }\n #zoom(point, delta, factor) {\n const zoom = Math.max(Math.min(delta < 0 ? (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom * factor : (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom / factor, $4f41d74d72b0a295$export$b0d759d807f751d4.maxZoom), $4f41d74d72b0a295$export$b0d759d807f751d4.minZoom);\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewToProject(point);\n const touchOffset = touchPoint.subtract((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center);\n // Adjust center towards cursor location\n const zoomOffset = touchPoint.subtract(touchOffset.multiply((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom / zoom)).subtract((0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center);\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.zoom = zoom;\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center.add(zoomOffset);\n }\n static point(event) {\n return new (0, $hvNIE.Point)(event.clientX, event.clientY);\n }\n static CacheKeys = Object.freeze({\n Down: \"down\",\n Move: \"move\",\n Gesture: \"gesture\"\n });\n static GestureKeys = Object.freeze({\n Pan: \"pan\",\n Pinch: \"pinch\",\n Tap: \"tap\"\n });\n static maxZoom = 2;\n static minZoom = 0.5;\n static vibratePattern = 25;\n}\n\n\nconst $890ebaa4ee6ae241$var$modifiersImmutable = document.getElementById(\"modifiers-immutable\");\nconst $890ebaa4ee6ae241$var$modifiersMutable = document.getElementById(\"modifiers-mutable\");\nconst $890ebaa4ee6ae241$var$navigator = window.navigator;\nlet $890ebaa4ee6ae241$var$uniqueId = 0;\nclass $890ebaa4ee6ae241$export$5acd5e6efc9671b7 extends (0, $ca3880ece69ea231$export$654f18991713c8c4) {\n #container;\n #down = false;\n #eventListener = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #mask;\n #selectionTime = 500;\n #timeoutId;\n configuration;\n element;\n disabled = false;\n id = $890ebaa4ee6ae241$var$uniqueId++;\n immutable = false;\n name;\n selected = false;\n tile;\n title;\n type;\n constructor(tile, state){\n super(state);\n this.tile = tile;\n this.type = state.type;\n }\n /**\n * Attach the modifier to the DOM and add listeners.\n */ attach() {\n const li = this.#container = document.createElement(\"li\");\n li.classList.add([\n \"modifier\",\n this.type.toLowerCase()\n ].join(\"-\"));\n if (this.immutable) this.disabled = true;\n const span = this.element = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\", \"fill\");\n li.append(span);\n this.update();\n this.#eventListener.add([\n {\n type: \"deselected\",\n handler: this.onDeselected\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n }\n ], {\n element: li\n });\n this.immutable ? $890ebaa4ee6ae241$var$modifiersImmutable.append(li) : $890ebaa4ee6ae241$var$modifiersMutable.append(li);\n }\n /**\n * Remove listeners and the modifier from the DOM.\n */ detach() {\n if (!this.#container) return;\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.deselect();\n this.#eventListener.remove();\n this.#container.remove();\n this.selected = false;\n this.element = undefined;\n this.#container = undefined;\n }\n dispatchEvent(event, detail) {\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)(event, Object.assign({}, detail || {}, {\n modifier: this,\n tile: this.tile\n }));\n }\n equals(other) {\n return other instanceof $890ebaa4ee6ae241$export$5acd5e6efc9671b7 && this.id === other.id;\n }\n move(tile) {\n this.remove();\n tile.addModifier(this);\n this.tile = tile;\n }\n moveFilter(tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier)=>modifier.type === $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.immutable);\n }\n onDeselected() {\n this.update({\n selected: false\n });\n this.tile.afterModify();\n this.dispatchEvent($890ebaa4ee6ae241$export$5acd5e6efc9671b7.Events.Deselected);\n }\n onPointerDown(event) {\n if (event.button !== 0) // Support toggle on non-primary pointer button\n this.onToggle(event);\n else {\n this.#down = true;\n if (!this.#mask && !this.tile.modifiers.some((modifier)=>[\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.immutable,\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.lock\n ].includes(modifier.type))) this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime);\n }\n }\n onPointerUp(event) {\n clearTimeout(this.#timeoutId);\n if (this.#down && !this.disabled && !this.selected) switch(event.type){\n case \"pointerleave\":\n // Support swiping up on pointer device\n this.onToggle(event);\n break;\n case \"pointerup\":\n this.onTap(event);\n break;\n }\n this.#down = false;\n }\n onSelected() {\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.deselect();\n $890ebaa4ee6ae241$var$navigator.vibrate((0, $4f41d74d72b0a295$export$b0d759d807f751d4).vibratePattern);\n this.update({\n selected: true\n });\n const mask = this.#mask = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onMask: ()=>this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n });\n this.dispatchEvent((0, $b65a2f5625db2a92$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n onTap() {\n this.selected = false;\n }\n onToggle() {\n $890ebaa4ee6ae241$var$navigator.vibrate((0, $4f41d74d72b0a295$export$b0d759d807f751d4).vibratePattern);\n }\n remove() {\n this.detach();\n this.tile.removeModifier(this);\n this.tile = null;\n }\n toString() {\n return [\n this.name,\n this.id\n ].join(\":\");\n }\n update(options) {\n options = Object.assign({\n disabled: this.disabled,\n selected: this.selected,\n name: this.name,\n title: this.title\n }, options || {});\n if (!this.immutable) this.disabled = options.disabled;\n this.name = options.name;\n this.title = options.title;\n this.selected = options.selected;\n if (this.#container) {\n this.#container.classList.toggle(\"disabled\", this.disabled);\n this.#container.classList.toggle(\"selected\", this.selected);\n this.element.textContent = this.name;\n this.element.title = this.title;\n }\n }\n #maskOnTap(puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile;\n this.move(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent($890ebaa4ee6ae241$export$5acd5e6efc9671b7.Events.Moved, {\n fromTile: fromTile\n });\n } else {\n $890ebaa4ee6ae241$export$5acd5e6efc9671b7.deselect();\n puzzle.unmask();\n }\n this.#mask = undefined;\n this.update({\n selected: false\n });\n }\n #moveFilter(tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile);\n }\n static deselect() {\n const selectedModifier = document.querySelector(\".modifiers .selected\");\n if (selectedModifier) selectedModifier.dispatchEvent(new CustomEvent(\"deselected\"));\n }\n static immutable(modifier) {\n return modifier.type === $890ebaa4ee6ae241$export$5acd5e6efc9671b7.Types.immutable;\n }\n static Events = Object.freeze({\n Deselected: \"modifier-deselected\",\n Invoked: \"modifier-invoked\",\n Moved: \"modifier-moved\"\n });\n static Types = Object.freeze(Object.fromEntries([\n \"immutable\",\n \"lock\",\n \"move\",\n \"rotate\",\n \"swap\",\n \"toggle\"\n ].map((type)=>[\n type,\n (0, $3e2f0fa58ba587b4$export$9a00dee1beb8f576)(type)\n ])));\n}\n\n\n\n\n\nclass $6b5ed925b0615466$export$e49a5ad3dd6df925 extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n #mask;\n name = \"drag_pan\";\n title = \"Move\";\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter($6b5ed925b0615466$export$e49a5ad3dd6df925.movable);\n if (this.#mask || !items.length) return;\n const mask = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: ()=>this.tile.beforeModify(),\n onUnmask: ()=>this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n });\n this.#mask = mask;\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)((0, $b65a2f5625db2a92$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n moveFilter(tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.movable);\n }\n moveItems(tile) {\n const items = this.tile.items.filter($6b5ed925b0615466$export$e49a5ad3dd6df925.movable);\n items.forEach((item)=>item.move(tile));\n return {\n moved: [\n $6b5ed925b0615466$export$e49a5ad3dd6df925.data(this.tile, tile, items)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).immutable) || tile.items.filter((item)=>item.type !== (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam).length > 0 && !(tile === this.tile);\n }\n #maskOnTap(puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked, data);\n } else puzzle.unmask();\n this.#mask = undefined;\n }\n static data(fromTile, toTile, items) {\n return {\n fromTile: fromTile,\n toTile: toTile,\n items: items\n };\n }\n static movable(item) {\n return item.movable;\n }\n}\nconst $6b5ed925b0615466$export$1288a4f7eae890b0 = (SuperClass)=>class MovableItem extends SuperClass {\n movable;\n constructor(parent, configuration){\n super(...arguments);\n this.movable = configuration.movable !== false;\n }\n move(tile) {\n this.parent.removeItem(this);\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center);\n this.group.position = this.group.position.subtract(vector);\n // Update tile reference\n this.parent = tile;\n this.parent.addItem(this);\n this.center = this.parent.center;\n this.onMove();\n }\n onMove() {}\n };\n\n\n\n\n\nclass $0b4b4185562e5b04$export$fd55ce593607084a {\n color;\n colors;\n connected;\n direction;\n done;\n insertAbove;\n onAdd;\n onRemove;\n point;\n pathIndex;\n segmentIndex;\n state;\n tile;\n constructor(index, tile, colors, direction, point, pathIndex, segmentIndex, connected, insertAbove, done, state, onAdd, onRemove){\n if (state && !(state instanceof $0b4b4185562e5b04$export$81262d6ca0162a3)) throw new Error(\"Step.state must be instance of StepState\");\n this.colors = colors ? Array.isArray(colors) ? Array.from(colors) : [\n colors\n ] : [];\n if (this.colors.length) this.color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(this.colors).hex();\n this.connected = connected ?? true;\n this.direction = direction;\n this.done = done ?? false;\n this.index = index;\n this.insertAbove = insertAbove;\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.onRemove = onRemove ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.point = point;\n this.pathIndex = pathIndex;\n this.segmentIndex = segmentIndex;\n this.state = state ?? new $0b4b4185562e5b04$export$81262d6ca0162a3();\n this.tile = tile;\n }\n copy(settings) {\n return new $0b4b4185562e5b04$export$fd55ce593607084a(settings.index ?? this.index, settings.tile ?? this.tile, settings.colors ?? settings.color ?? this.colors, settings.direction ?? this.direction, settings.point ?? this.point, settings.pathIndex ?? this.pathIndex, settings.segmentIndex ?? this.segmentIndex, settings.connected ?? this.connected, settings.insertAbove ?? this.insertAbove, settings.done ?? this.done, settings.state ?? new $0b4b4185562e5b04$export$81262d6ca0162a3(this.state), settings.onAdd ?? this.onAdd, settings.onRemove ?? this.onRemove);\n }\n equals(step) {\n return (0, $3e2f0fa58ba587b4$export$9cb4719e2e525b7a)(this, step);\n }\n}\nclass $0b4b4185562e5b04$export$81262d6ca0162a3 {\n #cache = {};\n constructor(){\n const settings = Object.assign({}, ...arguments);\n Object.keys(settings).forEach((key)=>{\n this[key] = settings[key];\n });\n }\n copy(...settings) {\n return new $0b4b4185562e5b04$export$81262d6ca0162a3(...[\n this\n ].concat(settings));\n }\n get(Class) {\n return this.#keys(Class).map((key)=>this[key]).find((value)=>value);\n }\n has(Class) {\n return this.#keys(Class).some((key)=>this[key]);\n }\n #keys(Class) {\n return this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, []));\n }\n static Collision = class StepCollision {\n collision;\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor(collision){\n this.collision = collision;\n }\n };\n static Filter = class StepFilter {\n filter = {};\n };\n static MergeInto = class StepMergeInto {\n mergeInto;\n constructor(beam){\n this.mergeInto = {\n beam: beam\n };\n }\n };\n static MergeWith = class StepMergeWith {\n mergeWith;\n constructor(mergeWith){\n this.mergeWith = mergeWith;\n }\n };\n static Portal = class StepPortal {\n portal;\n constructor(entryPortal, exitPortal){\n this.portal = {\n entryPortal: entryPortal,\n exitPortal: exitPortal\n };\n }\n };\n static Reflector = class StepReflector {\n reflector;\n constructor(item){\n this.reflector = {\n item: item\n };\n }\n };\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection;\n constructor(terminus, opening){\n this.terminusConnection = {\n terminus: terminus,\n opening: opening\n };\n }\n };\n}\n\n\nclass $b9391c61de18417d$export$ec91da630f36d5ea extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2)) {\n constructor(tile, { color: color }){\n super(...arguments);\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(Array.isArray(color) ? color : [\n color\n ]).hex();\n const fillColor = new (0, $hvNIE.Color)(color);\n fillColor.alpha = 0.25;\n // TODO: update to something else? prism?\n const item = new (0, $hvNIE.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor: fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n getColorElements() {\n return [\n (0, $3e2f0fa58ba587b4$export$3cb91a81090b9eee)(this.color)\n ];\n }\n onCollision({ currentStep: currentStep, nextStep: nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(currentStep.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Filter) ? {\n colors: nextStep.colors.concat([\n this.color\n ])\n } : {\n state: new (0, $0b4b4185562e5b04$export$81262d6ca0162a3)({\n insertAbove: this\n }, new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Filter())\n });\n }\n}\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\nclass $94a7df60cff9f28b$export$152db69a76b6b79e extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n clockwise;\n title = \"Rotate\";\n constructor(tile, state, configuration = {}){\n super(...arguments);\n this.clockwise = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(true, state.clockwise, configuration.clockwise);\n this.name = $94a7df60cff9f28b$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"];\n }\n moveFilter(tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.rotatable);\n }\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter((item)=>item.rotatable);\n items.forEach((item)=>item.rotate(this.clockwise));\n this.dispatchEvent((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n onToggle() {\n super.onToggle();\n this.clockwise = !this.clockwise;\n this.updateState((state)=>{\n state.clockwise = this.clockwise;\n });\n this.update({\n name: $94a7df60cff9f28b$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"]\n });\n }\n static Names = Object.freeze({\n left: \"rotate_left\",\n right: \"rotate_right \"\n });\n}\nconst $94a7df60cff9f28b$export$781de49a9284d537 = (SuperClass)=>class RotatableItem extends SuperClass {\n direction;\n rotatable;\n rotation = 0;\n rotationDegrees;\n constructor(parent, state, configuration = {}){\n super(...arguments);\n this.direction = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(state.direction, configuration.direction);\n this.rotatable = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(true, state.rotatable, configuration.rotatable);\n this.rotationDegrees = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(60, state.rotationDegrees, configuration.rotationDegrees);\n this.rotation = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(0, state.rotation, configuration.rotation) % this.getMaxRotation();\n }\n // Get the direction of an item with rotation factored in\n getDirection(direction) {\n direction = direction ?? this.direction;\n return direction === undefined ? direction : (0, $3e2f0fa58ba587b4$export$bac4c4504d574f)(direction, this.rotation);\n }\n getMaxRotation() {\n return 360 / this.rotationDegrees;\n }\n onInitialization() {\n super.onInitialization();\n this.rotateGroup(this.rotation);\n if (this.direction !== undefined) // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction);\n }\n rotateGroup(rotation) {\n if (this.rotatable) this.group.rotate(rotation * this.rotationDegrees, this.center);\n }\n rotate(clockwise) {\n const rotation = clockwise === false ? -1 : 1;\n this.rotation = (rotation + this.rotation) % this.getMaxRotation();\n this.updateState((state)=>{\n state.rotation = this.rotation;\n });\n this.rotateGroup(rotation);\n }\n };\n\n\n\n\n\nclass $9a8fa6fd25778435$export$602eac185826482c extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2))) {\n #directions = {};\n constructor(tile, state){\n // Only allow rotation if direction is defined\n super(tile, state, {\n rotatable: state.direction !== undefined\n });\n this.direction = state.direction;\n const height = tile.parameters.circumradius / 3;\n const width = tile.parameters.circumradius / 5;\n const style = {\n fillColor: \"black\",\n strokeColor: \"white\",\n strokeWidth: 2\n };\n const children = [];\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new (0, $hvNIE.Path).Ellipse({\n center: tile.center,\n radius: [\n width,\n height\n ],\n style: style\n });\n children.push(ellipse);\n const ring = new (0, $hvNIE.Path).Ellipse({\n center: tile.center,\n radius: [\n width - style.strokeWidth * 2,\n height - style.strokeWidth * 2\n ],\n style: style\n });\n children.push(ring);\n if (this.rotatable) {\n const pointer = new (0, $hvNIE.Path)({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new (0, $hvNIE.Point)(0, height)),\n tile.center.subtract(new (0, $hvNIE.Point)(0, height)),\n tile.center.subtract(new (0, $hvNIE.Point)(width * 2.5, 0))\n ],\n style: {\n fillColor: \"black\"\n }\n }).subtract(ellipse);\n children.unshift(pointer);\n }\n this.group.addChildren(children);\n if (this.rotatable) // Properly align items with hexagonal rotation\n this.rotateGroup(1);\n }\n get(direction) {\n return this.#directions[direction];\n }\n onCollision({ beam: beam, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const portalState = currentStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal);\n if (!portalState) {\n const stepIndex = nextStep.index;\n const entryDirection = (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(nextStep.direction);\n const existing = (0, $3e2f0fa58ba587b4$export$6e5538615c060df7)(this.get(entryDirection), {\n stepIndex: stepIndex\n });\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(this.toString(), \"ignoring beam trying to enter through a direction which is already occupied:\", entryDirection);\n return;\n }\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: ()=>this.update(entryDirection, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>this.update(entryDirection),\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal(this))\n });\n } else if (portalState.exitPortal === this) // Handle exit collision\n return nextStep.copy({\n insertAbove: this\n });\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [\n this.id,\n nextStep.index\n ].join(\":\");\n const destinationId = beam.getState().moves?.[stateId];\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item)=>item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.portal && !item.equals(this) && // Portal must not already have a beam occupying the desired direction\n !item.get($9a8fa6fd25778435$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, item)) && (destinationId === undefined || item.id === destinationId) && // Entry portals without defined direction can exit from any other portal.\n (this.getDirection() === undefined || // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined || // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()));\n if (destinations.length === 0) {\n console.debug(this.toString(), \"no valid destinations found\");\n // This will cause the beam to stop\n return currentStep;\n }\n if (destinations.length === 1) // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState);\n else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal)=>portal.parent);\n const mask = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Mask({\n beam: beam,\n id: stateId,\n onMask: ()=>currentStep.tile.beforeModify(),\n onTap: (puzzle, tile)=>{\n const destination = destinations.find((portal)=>portal.parent === tile);\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState));\n beam.updateState((state)=>{\n if (!state.moves) state.moves = {};\n // Store this decision in beam state\n state.moves[stateId] = destination.id;\n });\n puzzle.unmask();\n }\n },\n onUnmask: ()=>currentStep.tile.afterModify(),\n tileFilter: (tile)=>{\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile)=>destinationTile === tile));\n }\n });\n puzzle.updateSelectedTile(currentStep.tile);\n puzzle.mask(mask);\n // This will cause the beam to stop\n return currentStep;\n }\n }\n update(direction, data) {\n this.#directions[direction] = data;\n }\n #getStep(beam, portal, nextStep, portalState) {\n const direction = $9a8fa6fd25778435$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, portal);\n const stepIndex = nextStep.index;\n return nextStep.copy({\n connected: false,\n direction: direction,\n insertAbove: portal,\n onAdd: ()=>portal.update(direction, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n });\n }\n static getExitDirection(step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction;\n }\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\nclass $90288bbda8776a08$export$bea8ebba691c5813 extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n on;\n title = \"Toggle\";\n constructor(tile, { on: on }){\n super(...arguments);\n this.on = on || false;\n this.tile.items.forEach((item)=>{\n item.toggled = this.on;\n });\n }\n attach() {\n this.name = $90288bbda8776a08$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"];\n super.attach();\n }\n moveFilter(tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.toggleable);\n }\n onTap(event) {\n super.onTap(event);\n this.on = !this.on;\n const items = this.tile.items.filter((item)=>item.toggleable);\n items.forEach((item)=>item.toggle(this.on));\n this.update({\n name: $90288bbda8776a08$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"]\n });\n this.dispatchEvent((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n static Names = Object.freeze({\n on: \"toggle_on\",\n off: \"toggle_off \"\n });\n}\nconst $90288bbda8776a08$export$cdb1ce8c4b8a5afe = (SuperClass)=>class ToggleableItem extends SuperClass {\n toggleable;\n toggled;\n constructor(parent, configuration){\n super(...arguments);\n this.toggleable = configuration.toggleable !== false;\n }\n onToggle() {}\n toggle(toggled) {\n this.toggled = toggled;\n this.onToggle();\n }\n };\n\n\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\n\nclass $74097bbf14237549$export$88c9f72b40fcdd85 {\n constructor(index, points, beam, item){\n const items = [\n beam\n ];\n if (item !== undefined) items.push(item);\n this.beam = beam;\n this.index = index;\n // The item that was collided with\n this.item = item;\n this.itemIds = items.map((item)=>item.id);\n this.items = items;\n // The first collision point\n this.point = points[0];\n this.points = points;\n // Check if the collision is with self\n this.withSelf = beam.equals(item);\n }\n copy(settings) {\n return new $74097bbf14237549$export$88c9f72b40fcdd85(settings.index ?? this.index, settings.points ?? this.points, settings.beam ?? this.beam, settings.item ?? this.item);\n }\n equals(other) {\n return other && other.point.equals(this.point) && other.items.every((item)=>this.has(item));\n }\n has(item) {\n return this.itemIds.includes(item.id);\n }\n mirror() {\n return this.copy({\n beam: this.item,\n item: this.beam\n });\n }\n}\nclass $74097bbf14237549$export$20aab196240bbdf2 {\n constructor(beam, step, stepIndex){\n this.beams = [\n beam\n ].concat(step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeWith)?.beams || []);\n this.colors = step.colors.concat(beam.getColors());\n this.stepIndex = stepIndex;\n }\n}\n\n\n\nclass $5625a4a7d65ce9b8$export$693b33588b3dd9d8 extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n done = false;\n path = [];\n sortOrder = 3;\n #cache = new (0, $97686966a3fec53f$export$94affb487e701bf2)(Object.values($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys));\n #direction;\n #path;\n #stepIndex = -1;\n #steps = [];\n constructor(terminus, state, configuration){\n super(...arguments);\n this.group = null;\n this.#direction = configuration.direction;\n this.#path = {\n closed: false,\n data: {\n id: this.id,\n type: this.type\n },\n locked: true,\n strokeJoin: \"round\",\n strokeCap: \"round\",\n strokeWidth: terminus.radius / 12\n };\n }\n addStep(step) {\n const lastStepIndex = this.getLastStepIndex();\n // Can't be done if adding a new step\n this.done = false;\n this.#path.strokeColor = step.color;\n if (this.path.length === 0) {\n const path = new (0, $hvNIE.Path)(this.#path);\n this.path.push(path);\n this.getLayer().insertChild(0, path);\n }\n const currentPath = this.path[this.path.length - 1];\n const previousStep = this.#steps[lastStepIndex];\n // Handles cases that require adding a new path item\n if (!step.connected || previousStep && (step.color !== previousStep.color || step.insertAbove !== previousStep.insertAbove)) {\n console.debug(this.toString(), \"adding new path item for step:\", step, \"previous step:\", previousStep);\n const path = new (0, $hvNIE.Path)(this.#path);\n const points = [\n step.point\n ];\n // If the next step is connected, we will link it with the previous step\n if (step.connected) points.unshift(previousStep.point);\n path.add(...points);\n this.path.push(path);\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path);\n // Reset the segmentIndex\n step.segmentIndex = 0;\n } else {\n currentPath.add(step.point);\n step.segmentIndex = currentPath.segments.length - 1;\n }\n step.pathIndex = this.path.length - 1;\n this.#steps.push(step);\n step.index = this.#stepIndex = this.#steps.length - 1;\n if (!step.tile.items.some((item)=>item.equals(this))) // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this);\n step.onAdd(step);\n console.debug(this.toString(), \"added step\", step);\n this.#onUpdate(this.#stepIndex);\n return step;\n }\n getCollision() {\n return this.getStep()?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision);\n }\n getColor() {\n return this.getStep()?.color || this.getOpening().color;\n }\n getColors() {\n return Array.from(this.getStep()?.colors || this.getOpening().colors);\n }\n getColorElements(tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step)=>step.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeWith));\n return step ? (0, $3e2f0fa58ba587b4$export$6d3741128bd5bb7d)(step.color) : [];\n }\n getCompoundPath() {\n return new (0, $hvNIE.CompoundPath)({\n children: this.path.map((item)=>item.clone({\n insert: false\n }))\n });\n }\n getIndex() {\n return this.path[this.path.length - 1].index;\n }\n getLastStepIndex() {\n return this.length() - 1;\n }\n getLayer() {\n return this.parent.getLayer();\n }\n getMergeWith(beam) {\n return this.#cache.get($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys.MergeWith).get(beam.id);\n }\n getOpening() {\n return this.parent.getOpening(this.#direction);\n }\n getState() {\n return this.parent.getState().openings[this.#direction];\n }\n getStep(stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()];\n }\n getSteps(tile) {\n return tile ? this.#steps.filter((step)=>step.tile === tile) : this.#steps;\n }\n isComplete() {\n return this.isOn() && this.done;\n }\n isConnected() {\n const step = this.getStep();\n return step?.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection) || // Consider beams which have merged into connected beams to also be connected\n step?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto)?.beam.isConnected();\n }\n isOn() {\n const opening = this.getOpening();\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected;\n }\n isPending() {\n return this.isOn() && !this.done;\n }\n length() {\n return this.#steps.length;\n }\n onBeamUpdated(event) {\n const beam = event.detail.beam;\n if (beam.isPending()) // Wait for beam to finish before evaluating\n return;\n const beamLastStep = beam.getStep();\n if (this.isComplete()) {\n const lastStep = this.getStep();\n // Check for invalid collisions\n const collision = lastStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision);\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision))) {\n console.debug(this.toString(), \"re-evaluating collision with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(lastStep.index - 1, 0);\n return;\n }\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto);\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), \"re-evaluating merge into\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0);\n return;\n }\n }\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam);\n if (mergeWith && !beamLastStep?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), \"re-evaluating merge with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0);\n }\n }\n onCollision({ beam: beam, collision: collision, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const isSelf = beam.equals(this);\n console.debug(this.toString(), \"evaluating collision with\", isSelf ? \"self\" : beam.toString());\n if (!beam.isOn()) {\n console.debug(this.toString(), \"ignoring collision with inactive beam\", beam.toString());\n return;\n }\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), \"ignoring collision with sibling beam\", beam.toString());\n return;\n }\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), \"ignoring collision with self while re-evaluating history\");\n return;\n }\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step)=>(0, $3e2f0fa58ba587b4$export$c23f9d3341b5fd07)(collision.point, step.point));\n if (stepIndex < 0) // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(`Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`);\n const step = this.#steps[stepIndex];\n if (step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), \"ignoring collision with merged beam\", beam.toString());\n return;\n }\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), \"ignoring collision with connected beam in parent terminus\", beam.toString());\n return;\n }\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector) ?? currentStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector);\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(step.point, 1, (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(step.direction));\n const nextStepPoint = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(currentStep.point, 1, (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(currentStep.direction));\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), \"ignoring collision with beam on opposite side of reflector\", beam.toString());\n return;\n }\n }\n const isSameDirection = step.direction === nextStep.direction;\n if (currentStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal)?.exitPortal && !isSameDirection) {\n console.debug(this.toString(), \"ignoring collision with beam using same portal with different exit direction\", beam.toString());\n return;\n }\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), \"has collided with\", isSelf ? \"self\" : this.toString(), collision);\n if (!isSelf) // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision.mirror()))\n });\n else if (!isSameDirection) // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay());\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n });\n }\n console.debug(this.toString(), \"merging with\", beam.toString());\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex);\n const mergeWith = new (0, $74097bbf14237549$export$20aab196240bbdf2)(beam, step, stepIndex);\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: ()=>{\n this.#cache.get($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys.MergeWith).set(beam.id, mergeWith);\n },\n onRemove: ()=>{\n this.#cache.get($5625a4a7d65ce9b8$export$693b33588b3dd9d8.CacheKeys.MergeWith).unset(beam.id);\n },\n state: step.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeWith(mergeWith))\n }));\n console.debug(beam.toString(), \"merging into\", this.toString());\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).MergeInto(this))\n });\n }\n onModifierInvoked(event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), \"beam has been toggled off\");\n // Also reset any state changes from user move decisions\n this.updateState((state)=>{\n delete state.moves;\n });\n this.remove();\n }\n return;\n }\n const tiles = event.detail.tiles || [\n event.detail.tile\n ];\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step)=>tiles.some((tile)=>tile.equals(step.tile)));\n if (stepIndex >= 0) {\n console.debug(this.toString(), \"re-evaluating due to modifier being invoked in matching tile\", stepIndex);\n // Re-evaluate beginning at the step before the matched one\n this.done = false;\n this.#stepIndex = Math.max(stepIndex - 1, 0);\n return;\n }\n if (this.isComplete()) {\n const lastStep = this.getStep();\n if (lastStep.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Portal)?.entryPortal) // Check for valid exit portal\n this.done = false;\n }\n }\n remove(stepIndex = 0) {\n this.#updateHistory(stepIndex);\n }\n selected(selected = true) {\n this.path.forEach((path)=>{\n path.selected = selected;\n });\n }\n startDirection() {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6;\n }\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */ step(puzzle) {\n if (!this.isPending()) return;\n console.debug(this.toString(), \"currentStepIndex\", this.#stepIndex);\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent;\n this.addStep(new (0, $0b4b4185562e5b04$export$fd55ce593607084a)(0, tile, this.getColor(), this.startDirection(), tile.center));\n }\n const currentStepIndex = this.#stepIndex;\n const currentStep = this.#steps[currentStepIndex];\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction;\n const nextStepPoint = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(currentStep.point, currentStep.tile.parameters.inradius, direction);\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile((0, $3e2f0fa58ba587b4$export$78da85ac75754159)(currentStep.point, nextStepPoint));\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), \"stopping due to out of bounds\");\n const collision = new (0, $74097bbf14237549$export$88c9f72b40fcdd85)(0, [\n currentStep.point\n ], this);\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new (0, $0b4b4185562e5b04$export$81262d6ca0162a3)(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision))\n });\n }\n const nextStepIndex = currentStepIndex + 1;\n const existingNextStep = this.#steps[nextStepIndex];\n const lastPathIndex = this.path.length - 1;\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1;\n let nextStep = new (0, $0b4b4185562e5b04$export$fd55ce593607084a)(nextStepIndex, tile, currentStep.color, direction, nextStepPoint, existingNextStep?.pathIndex || lastPathIndex, existingNextStep?.segmentIndex || lastSegmentIndex);\n const items = (0, $3e2f0fa58ba587b4$export$abf0e2545164275f)(tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items), \"id\");\n console.debug(this.toString(), \"collision items:\", items);\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle).map((collision, index)=>new (0, $74097bbf14237549$export$88c9f72b40fcdd85)(index, collision.points, this, collision.item));\n if (collisions.length) console.debug(this.toString(), \"collisions:\", collisions);\n let collisionStep;\n for(let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++){\n const collision = collisions[collisionIndex];\n console.debug(this.toString(), \"resolving collision:\", collision);\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision))\n });\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision: collision,\n collisions: collisions,\n collisionStep: collisionStep,\n currentStep: currentStep,\n nextStep: nextStep,\n existingNextStep: existingNextStep,\n puzzle: puzzle\n });\n if (collisionStep instanceof (0, $0b4b4185562e5b04$export$fd55ce593607084a)) break;\n }\n if (collisionStep) nextStep = collisionStep;\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++;\n const lastStepIndex = this.getLastStepIndex();\n console.debug(this.toString(), \"new step is same as existing. new step index:\", this.#stepIndex, \"last step index:\", lastStepIndex);\n if (this.#stepIndex === lastStepIndex) // To ensure we mark as done\n this.#onUpdate(this.#stepIndex);\n return existingNextStep;\n } else {\n console.debug(this.toString(), `is revising history at step index: ${nextStepIndex}`, \"existing step:\", existingNextStep, \"new step:\", nextStep);\n this.#updateHistory(nextStepIndex);\n }\n }\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), \"next step point is same as current step point, stopping.\", nextStep);\n return this.updateStep(currentStepIndex, nextStep.copy({\n done: true\n }));\n }\n return this.addStep(nextStep);\n }\n toString() {\n return `[${this.type}:${this.id}:${(0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports)))(this.getColor()).name()}]`;\n }\n update(stepIndex, settings = {}, timeout) {\n if (typeof settings === \"number\") {\n timeout = settings;\n settings = {};\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout);\n return timeout === undefined ? update() : setTimeout(update, timeout);\n }\n updateState(updater, dispatchEvent = true) {\n return this.parent.updateState((state)=>updater(state.openings[this.#direction]), dispatchEvent);\n }\n updateStep(stepIndex, settings) {\n const step = this.getStep(stepIndex);\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings);\n this.#steps[stepIndex] = updatedStep;\n updatedStep.onAdd(updatedStep);\n console.debug(this.toString(), \"updated step at index\", stepIndex, \"from\", step, \"to\", updatedStep);\n this.#onUpdate(stepIndex);\n return updatedStep;\n }\n }\n #getCollisions(items, currentStep, nextStep, puzzle) {\n const segments = [\n currentStep.point,\n nextStep.point\n ];\n const path = new (0, $hvNIE.Path)({\n segments: segments\n });\n const firstPoint = segments[0];\n return items.map((item)=>{\n const points = [];\n const intersections = path.getIntersections(item.getCompoundPath(), // Ignore first point from self which will always collide\n (curveLocation)=>!(item === this && curveLocation.point.equals(firstPoint)));\n points.push(...new Set(intersections.map((intersection)=>intersection.point)));\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam && item !== this) points.push(...item.getSteps().map((step)=>step.point).filter((point)=>segments.some((segment)=>(0, $3e2f0fa58ba587b4$export$c23f9d3341b5fd07)(point, segment))));\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort((0, $3e2f0fa58ba587b4$export$79376507b09a66f)(firstPoint));\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint);\n points.forEach((point)=>puzzle.drawDebugPoint(point, {\n fillColor: \"black\"\n }));\n }\n return {\n points: points,\n item: item\n };\n }).filter((result)=>result.points.length).sort((a, b)=>{\n // Sort items returned by proximity to starting point\n const distance = (0, $3e2f0fa58ba587b4$export$79376507b09a66f)(firstPoint)(a.points[0], b.points[0]);\n if (distance === 0) // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder;\n return distance;\n });\n }\n #getItemIndex(step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0;\n }\n #getUpdatedStep(step, settings) {\n if (typeof settings === \"function\") settings = settings(step);\n return settings instanceof (0, $0b4b4185562e5b04$export$fd55ce593607084a) ? settings : step.copy(settings);\n }\n #update(stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex);\n this.addStep(this.#getUpdatedStep(step, settings));\n } else this.updateStep(stepIndex, settings);\n }\n #onUpdate(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n stepIndex ??= lastStepIndex;\n const step = this.getStep(stepIndex);\n if (stepIndex === lastStepIndex) // Update beam status if last step was updated\n this.done = step?.done ?? false;\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($5625a4a7d65ce9b8$export$693b33588b3dd9d8.Events.Update, {\n beam: this,\n state: step?.state,\n step: step,\n stepIndex: stepIndex\n });\n }\n #updateHistory(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n const step = this.#steps[stepIndex];\n console.debug(this.toString(), \"updateHistory\", \"stepIndex:\", stepIndex, \"lastStepIndex:\", lastStepIndex, \"step:\", step);\n if (step) {\n const currentPath = this.path[step.pathIndex];\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex);\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1);\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item)=>item.remove());\n const deletedSteps = this.#steps.splice(stepIndex);\n console.debug(this.toString(), \"removed steps: \", deletedSteps);\n const tiles = [\n ...new Set(deletedSteps.map((step)=>step.tile))\n ];\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile)=>this.getSteps(tile).length === 0).forEach((tile)=>tile.removeItem(this));\n deletedSteps.forEach((step)=>step.onRemove(step));\n this.done = false;\n this.#stepIndex = stepIndex - 1;\n this.#onUpdate(this.#stepIndex);\n }\n return step;\n }\n static CacheKeys = Object.freeze({\n MergeWith: \"mergeWith\"\n });\n static Events = Object.freeze({\n Collision: \"beam-collision\",\n Connection: \"beam-connection\",\n Merge: \"beam-merge\",\n Update: \"beam-update\"\n });\n}\n\n\n\n\nclass $7a376349f5a360a3$export$3ad31a823e05e6fb extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $90288bbda8776a08$export$cdb1ce8c4b8a5afe)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2)))) {\n sortOrder = 2;\n #ui;\n constructor(tile, state){\n super(...arguments);\n const colors = state.openings.filter((opening)=>opening?.color).flatMap((opening)=>Array.isArray(opening.color) ? opening.color : [\n opening.color\n ]);\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(colors.length ? colors : Array.isArray(state.color) ? state.color : [\n state.color\n ]).hex();\n const openings = state.openings.map((state, direction)=>state ? new $7a376349f5a360a3$export$3ad31a823e05e6fb.#Opening(state.color || color, direction, state.connected, state.on) : state).filter((opening)=>opening);\n this.#ui = $7a376349f5a360a3$export$3ad31a823e05e6fb.ui(tile, color, openings);\n this.group.addChildren([\n ...this.#ui.openings,\n this.#ui.terminus\n ]);\n this.color = color;\n this.openings = openings;\n this.radius = this.#ui.radius;\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening)=>new (0, $5625a4a7d65ce9b8$export$693b33588b3dd9d8)(this, state.openings[opening.direction], opening));\n this.update();\n }\n getColorElements() {\n return (0, $3e2f0fa58ba587b4$export$6d3741128bd5bb7d)(this.openings.map((opening)=>opening.color));\n }\n getOpening(direction) {\n return this.openings.find((opening)=>opening.direction === direction);\n }\n onMove() {\n this.beams.forEach((beam)=>beam.remove());\n }\n onCollision({ beam: beam, collisionStep: collisionStep, currentStep: currentStep, existingNextStep: existingNextStep, nextStep: nextStep }) {\n console.debug(this.toString(), \"collision\", beam.toString());\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), \"ignoring starting terminus collision\");\n return;\n }\n const directionFrom = (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(currentStep.direction);\n // Take rotation of terminus into account\n const opening = this.openings.find((opening)=>this.getDirection(opening.direction) === directionFrom);\n if (opening && opening.color === nextStep.color && (!opening.on || // When re-evaluating history of an already connected opening\n opening.connected && existingNextStep?.state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(this))) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), \"terminus connection\", this.toString(), opening);\n return nextStep.copy({\n done: true,\n onAdd: ()=>{\n nextStep.onAdd();\n this.onConnection(opening.direction);\n },\n onRemove: ()=>{\n nextStep.onRemove();\n this.onDisconnection(opening.direction);\n },\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).TerminusConnection(this, opening))\n });\n }\n // Otherwise, treat this as a collision\n return collisionStep;\n }\n onConnection(direction) {\n const opening = this.getOpening(direction);\n if (opening.connected) // Already connected\n return;\n opening.connect();\n this.update();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($7a376349f5a360a3$export$3ad31a823e05e6fb.Events.Connection, {\n terminus: this,\n opening: opening\n });\n }\n onDisconnection(direction) {\n const opening = this.getOpening(direction);\n if (!opening.connected) // Already disconnected\n return;\n opening.disconnect();\n this.update();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($7a376349f5a360a3$export$3ad31a823e05e6fb.Events.Disconnection, {\n terminus: this,\n opening: opening\n });\n }\n onToggle() {\n this.updateState((state)=>{\n this.openings.filter((opening)=>!opening.connected).forEach((opening)=>{\n opening.toggle();\n state.openings[opening.direction].on = opening.on;\n });\n });\n this.update();\n }\n update() {\n this.beams.forEach((beam)=>{\n const opening = beam.getOpening();\n const item = this.#ui.openings.find((item)=>item.data.direction === opening.direction);\n item.opacity = opening.on ? 1 : $7a376349f5a360a3$export$3ad31a823e05e6fb.#openingOffOpacity;\n });\n }\n static #openingOffOpacity = 0.3;\n static ui(tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2;\n const terminus = new (0, $hvNIE.Path).RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n });\n const openings = configuration.map((opening)=>{\n const direction = opening.direction;\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[(0, $3e2f0fa58ba587b4$export$abb49451cc8201c)(direction, 1)].point;\n const p2 = terminus.segments[(0, $3e2f0fa58ba587b4$export$bac4c4504d574f)(direction, 2)].point;\n const vector = p2.subtract(p1);\n vector.angle += 120;\n const p3 = p1.subtract(vector);\n return new (0, $hvNIE.Path)({\n closed: true,\n data: {\n collidable: false,\n direction: direction\n },\n fillColor: opening.color,\n opacity: opening.on ? 1 : $7a376349f5a360a3$export$3ad31a823e05e6fb.#openingOffOpacity,\n segments: [\n p1,\n p2,\n p3\n ]\n });\n });\n return {\n openings: openings,\n radius: radius,\n terminus: terminus\n };\n }\n static #Opening = class {\n constructor(color, direction, connected, on){\n this.colors = Array.isArray(color) ? color : [\n color\n ];\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(this.colors).hex();\n this.direction = direction;\n this.connected = connected === true;\n this.on = on === true;\n }\n connect() {\n this.connected = this.on = true;\n }\n disconnect() {\n this.connected = this.on = false;\n }\n toggle() {\n this.on = !this.on;\n }\n };\n static Events = Object.freeze({\n Connection: \"terminus-connection\",\n Disconnection: \"terminus-disconnection\"\n });\n}\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\n\n\nclass $833b17827b418a5b$export$edf083caefbff926 extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2))) {\n #item;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 30\n });\n this.color = state.color || \"black\";\n this.#item = $833b17827b418a5b$export$edf083caefbff926.item(tile, this.color);\n this.group.addChild(this.#item);\n }\n midLine() {\n // Two points which form a line through the mid-point of the reflector\n return [\n (0, $3e2f0fa58ba587b4$export$78da85ac75754159)(this.#item.segments[3].point, this.#item.segments[0].point),\n (0, $3e2f0fa58ba587b4$export$78da85ac75754159)(this.#item.segments[1].point, this.#item.segments[2].point)\n ];\n }\n getSide(point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return (0, $3e2f0fa58ba587b4$export$1690e12b840569b9)(this.midLine(), point);\n }\n isSameSide(pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB);\n }\n onCollision({ beam: beam, collision: collision, collisions: collisions, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep }) {\n const directionFrom = (0, $3e2f0fa58ba587b4$export$35d6177dfa7903b5)(currentStep.direction);\n const directionTo = (0, $3e2f0fa58ba587b4$export$17a5d53cd2e4de6c)(directionFrom, this.rotation);\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), \"stopping due to collision with non-reflective side of reflector\");\n return collisionStep;\n }\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), \"stopping due to reflection back at self\");\n if (collisions.some((collision)=>collision.item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam)) // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return;\n else // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision(collision.copy({\n points: [\n nextStep.point\n ]\n })))\n });\n }\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector)) return nextStep.copy({\n state: nextStep.state.copy(new (0, $0b4b4185562e5b04$export$81262d6ca0162a3).Reflector(this))\n });\n const point = (0, $3e2f0fa58ba587b4$export$bd58da2e19cd17da)(currentStep.point, nextStep.tile.parameters.inradius, directionTo);\n return nextStep.copy({\n direction: directionTo,\n point: point\n });\n }\n static item(tile, color) {\n const length = tile.parameters.circumradius;\n const width = tile.parameters.circumradius / 12;\n const topLeft = tile.center.subtract(new (0, $hvNIE.Point)(width / 2, length / 2));\n const size = new (0, $hvNIE.Size)(width, length);\n return new (0, $hvNIE.Path).Rectangle({\n data: {\n size: size\n },\n fillColor: color,\n point: topLeft,\n size: size\n });\n }\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\nclass $62983545fa7e5cd3$export$cb4338d67ffa8a1d extends (0, $6b5ed925b0615466$export$1288a4f7eae890b0)((0, $94a7df60cff9f28b$export$781de49a9284d537)((0, $4b738c6f333de3e1$export$6d08773d2e66f8f2))) {\n sortOrder = 1;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 60\n });\n const walls = $62983545fa7e5cd3$export$cb4338d67ffa8a1d.item(tile, state);\n this.group.addChildren(walls);\n }\n static item(tile, configuration) {\n const radius = tile.parameters.circumradius;\n const width = radius / 12;\n const fillColor = tile.styles.default.strokeColor;\n return configuration.directions.map((direction)=>{\n const firstSegment = tile.hexagon.segments[direction].point;\n const nextDirection = (0, $3e2f0fa58ba587b4$export$bac4c4504d574f)(direction, 1);\n const lastSegment = tile.hexagon.segments[nextDirection].point;\n return new (0, $hvNIE.Path)({\n closed: true,\n fillColor: fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt((direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width),\n tile.hexagon.getLocationAt((nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width),\n lastSegment\n ]\n });\n });\n }\n}\n\n\n\nfunction $c097e682a6d7ac01$export$a69a8f92cd2ea310(parent, configuration) {\n let item;\n switch(configuration.type){\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.filter:\n item = new (0, $b9391c61de18417d$export$ec91da630f36d5ea)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.portal:\n item = new (0, $9a8fa6fd25778435$export$602eac185826482c)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.terminus:\n item = new (0, $7a376349f5a360a3$export$3ad31a823e05e6fb)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.reflector:\n item = new (0, $833b17827b418a5b$export$edf083caefbff926)(parent, configuration);\n break;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.wall:\n item = new (0, $62983545fa7e5cd3$export$cb4338d67ffa8a1d)(parent, configuration);\n break;\n default:\n console.error(\"Ignoring item with unknown type:\", configuration.type);\n break;\n }\n if (item) item.onInitialization();\n return item;\n}\n\n\n\n\nclass $1f91e29af141027d$export$4b0ab9e4fad38dea extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"block\";\n title = \"Immutable\";\n}\n\n\n\nclass $7b23092ccd74af51$export$5b9db7ce80343746 extends (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"lock\";\n title = \"Locked\";\n}\n\n\n\n\n\n\n\n\n\nclass $7e06163ac6e6af1b$export$bdb5f0a1b77546f4 extends (0, $6b5ed925b0615466$export$e49a5ad3dd6df925) {\n name = \"swap_horiz\";\n title = \"Swap\";\n moveItems(tile) {\n const toItems = tile.items.filter((0, $6b5ed925b0615466$export$e49a5ad3dd6df925).movable);\n const fromItems = this.tile.items.filter((0, $6b5ed925b0615466$export$e49a5ad3dd6df925).movable);\n fromItems.forEach((item)=>item.move(tile));\n toItems.forEach((item)=>item.move(this.tile));\n return {\n moved: [\n (0, $6b5ed925b0615466$export$e49a5ad3dd6df925).data(this.tile, tile, fromItems),\n (0, $6b5ed925b0615466$export$e49a5ad3dd6df925).data(tile, this.tile, toItems)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some((0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).immutable) || !tile.items.filter((item)=>item.type !== (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam).length;\n }\n}\n\n\nfunction $cc224f8bd3ed022c$export$1d55952676fae128(tile, configuration) {\n let modifier;\n switch(configuration.type){\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.immutable:\n modifier = new (0, $1f91e29af141027d$export$4b0ab9e4fad38dea)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.lock:\n modifier = new (0, $7b23092ccd74af51$export$5b9db7ce80343746)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.move:\n modifier = new (0, $6b5ed925b0615466$export$e49a5ad3dd6df925)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.rotate:\n modifier = new (0, $94a7df60cff9f28b$export$152db69a76b6b79e)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.swap:\n modifier = new (0, $7e06163ac6e6af1b$export$bdb5f0a1b77546f4)(tile, configuration);\n break;\n case (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Types.toggle:\n modifier = new (0, $90288bbda8776a08$export$bea8ebba691c5813)(tile, configuration);\n break;\n default:\n console.error(\"Ignoring modifier with unknown type:\", configuration.type);\n break;\n }\n return modifier;\n}\n\n\nclass $644ce6e6cc7a5abb$export$235cb65c20ad2b7 extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n selected = false;\n #ui;\n constructor(coordinates, layout, parameters, state){\n super(null, state, {\n locked: false\n });\n this.#ui = $644ce6e6cc7a5abb$export$235cb65c20ad2b7.ui(layout, parameters, state, {\n coordinates: coordinates,\n type: this.type\n });\n this.center = this.#ui.center;\n this.coordinates = coordinates;\n this.hexagon = this.#ui.hexagon;\n this.parameters = parameters;\n this.styles = this.#ui.styles;\n this.group.addChildren([\n this.#ui.hexagon,\n this.#ui.indicator\n ]);\n // These need to be last, since they reference this\n this.items = (state.items || []).map((state)=>(0, $c097e682a6d7ac01$export$a69a8f92cd2ea310)(this, state)).filter((item)=>item !== undefined);\n this.modifiers = (state.modifiers || []).map((state)=>(0, $cc224f8bd3ed022c$export$1d55952676fae128)(this, state)).filter((modifier)=>modifier !== undefined);\n this.update();\n }\n addItem(item) {\n this.items.unshift(item);\n this.update();\n }\n addModifier(modifier) {\n this.modifiers.unshift(modifier);\n this.update();\n }\n afterModify() {\n this.setStyle(this.selected ? \"selected\" : \"default\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: false\n }));\n }\n beforeModify() {\n this.group.bringToFront();\n this.setStyle(\"edit\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: true\n }));\n }\n getState() {\n const state = {\n type: this.type\n };\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item)=>item.type !== (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam).map((item)=>item.getState());\n if (items.length) state.items = items;\n const modifiers = this.modifiers.map((modifier)=>modifier.getState());\n if (modifiers.length) state.modifiers = modifiers;\n return state;\n }\n onTap(event) {\n console.debug(this.coordinates.offset.toString(), this);\n this.items.forEach((item)=>item.onTap(event));\n }\n onDeselected(selectedTile) {\n this.selected = false;\n this.#ui.hexagon.style = this.styles.default;\n this.items.forEach((item)=>item.onDeselected());\n this.modifiers.forEach((modifier)=>modifier.detach());\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($644ce6e6cc7a5abb$export$235cb65c20ad2b7.Events.Deselected, {\n selectedTile: selectedTile,\n deselectedTile: this\n });\n }\n onSelected(deselectedTile) {\n this.selected = true;\n this.group.bringToFront();\n this.#ui.hexagon.style = this.styles.selected;\n this.items.forEach((item)=>item.onSelected());\n this.modifiers.forEach((modifier)=>modifier.attach());\n }\n removeItem(item) {\n const index = this.items.indexOf(item);\n if (index >= 0) {\n this.items.splice(index, 1);\n this.update();\n }\n }\n removeModifier(modifier) {\n const index = this.modifiers.indexOf(modifier);\n if (index >= 0) {\n this.modifiers.splice(index, 1);\n this.update();\n }\n }\n setStyle(style) {\n this.hexagon.set(this.styles[style]);\n }\n teardown() {\n this.modifiers.forEach((modifier)=>modifier.detach());\n }\n toString() {\n return this.coordinates.offset.toString();\n }\n update() {\n super.update();\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0;\n }\n static parameters(height) {\n const circumradius = height / 2;\n const width = Math.sqrt(3) * circumradius;\n const inradius = width / 2;\n const offsetY = height * (3 / 4);\n return {\n circumradius: circumradius,\n height: height,\n inradius: inradius,\n offsetY: offsetY,\n width: width\n };\n }\n static ui(layout, parameters, configuration, data) {\n const center = new (0, $hvNIE.Point)(layout.startingOffsetX + parameters.inradius + layout.column * parameters.width, layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY);\n const dashWidth = parameters.circumradius / 10;\n const styles = Object.assign({}, $644ce6e6cc7a5abb$export$235cb65c20ad2b7.Styles, {\n edit: Object.assign({\n dashArray: [\n dashWidth,\n dashWidth\n ]\n }, $644ce6e6cc7a5abb$export$235cb65c20ad2b7.Styles.edit)\n }, configuration.style || {});\n const hexagon = new (0, $hvNIE.Path).RegularPolygon({\n center: center,\n closed: true,\n data: data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n });\n const indicator = new (0, $hvNIE.Path).RegularPolygon({\n center: (0, $3e2f0fa58ba587b4$export$78da85ac75754159)(hexagon.segments[1].point, center, (length)=>length / 3),\n data: {\n collidable: false\n },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: {\n fillColor: \"#ccc\"\n }\n });\n return {\n center: center,\n hexagon: hexagon,\n indicator: indicator,\n styles: styles\n };\n }\n static Events = Object.freeze({\n Deselected: \"tile-deselected\",\n Selected: \"tile-selected\"\n });\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new (0, $hvNIE.Color)(\"white\"),\n strokeColor: new (0, $hvNIE.Color)(\"#666\"),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new (0, $hvNIE.Color)(\"black\"),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new (0, $hvNIE.Color)(\"black\"),\n strokeWidth: 2\n }\n });\n}\n\n\n\n\nclass $941a4b5ec82b485b$export$c84671f46d6a1ca extends (0, $ca3880ece69ea231$export$654f18991713c8c4) {\n #tilesByAxial = [];\n #tilesByOffset = [];\n items = [];\n layers = {};\n tiles = [];\n tileSize = 120;\n constructor(state){\n super(state);\n this.type = state.type || $941a4b5ec82b485b$export$c84671f46d6a1ca.Types.oddR;\n const center = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center;\n const parameters = (0, $644ce6e6cc7a5abb$export$235cb65c20ad2b7).parameters(this.tileSize);\n const tiles = state.tiles;\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width;\n const startingOffsetY = center.y - height / 2;\n this.layers.tiles = new (0, $hvNIE.Layer)();\n this.layers.items = new (0, $hvNIE.Layer)();\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index)=>{\n const length = row.length;\n // Favor offset rows, since they will be wider\n if (length > current.length || length === current.length && this.#isOffsetRow(index)) return {\n index: index,\n length: length\n };\n return current;\n }, {\n index: 0,\n length: 0\n });\n const width = widestRow.length * parameters.width + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0);\n const startingOffsetX = center.x - width / 2;\n for(let r = 0; r < tiles.length; r++){\n const row = tiles[r];\n const rowByAxial = new Array(row.length).fill(null);\n const rowByOffset = new Array(row.length).fill(null);\n const rowOffset = Math.floor(r / 2);\n for(let c = 0; c < row.length; c++){\n const axial = new (0, $fe48dca2d228a457$export$c56d3ccff2456440)(c - rowOffset, r);\n const offset = new (0, $ca914ef976dd611b$export$2e382909194b1aab)(r, c);\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY: startingOffsetY\n };\n const state = row[c];\n if (!state) continue;\n const tile = new (0, $644ce6e6cc7a5abb$export$235cb65c20ad2b7)({\n axial: axial,\n offset: offset\n }, layout, parameters, state);\n this.layers.tiles.addChild(tile.group);\n if (tile.items.length) {\n this.items.push(...tile.items);\n this.layers.items.addChildren(tile.items.map((item)=>item.group));\n }\n this.tiles.push(tile);\n rowByAxial[axial.q] = tile;\n rowByOffset[offset.c] = tile;\n }\n this.#tilesByAxial.push(rowByAxial);\n this.#tilesByOffset.push(rowByOffset);\n }\n }\n getTileByAxial(axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q];\n }\n getTileByOffset(offset) {\n return this.#tilesByOffset[offset.r][offset.c];\n }\n getState() {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row)=>row.map((tile)=>tile?.getState() || null))\n });\n }\n getNeighboringTile(axial, direction) {\n return this.getTileByAxial((0, $fe48dca2d228a457$export$c56d3ccff2456440).neighbor(axial, (0, $3e2f0fa58ba587b4$export$c43d7a950587702b)(direction)));\n }\n teardown() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n }\n #isOffsetRow(index) {\n return index % 2 === 0 ? this.type === $941a4b5ec82b485b$export$c84671f46d6a1ca.Types.evenR : this.type === $941a4b5ec82b485b$export$c84671f46d6a1ca.Types.oddR;\n }\n static Types = Object.freeze({\n evenR: \"even-r\",\n oddR: \"odd-r\"\n });\n}\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nclass $4029f0d6ba5141b4$export$991dcf7284de63d extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n constructor(tile, style){\n super(null, style, {\n locked: false,\n type: (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.mask\n });\n const data = {\n type: this.type\n };\n const item = new (0, $hvNIE.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n data: data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({\n fillColor: \"black\"\n }, style)\n });\n this.center = tile.center;\n this.group.addChild(item);\n }\n}\n\n\n\n\n\n\nvar $hvNIE = parcelRequire(\"hvNIE\");\nclass $729c2b05fa2dedeb$export$88c9f72b40fcdd85 extends (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2) {\n constructor(state){\n super(null, state, {\n type: (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.collision\n });\n const { center: center, color: color } = state;\n this.center = center;\n this.color = color;\n const item = new (0, $hvNIE.Path).Circle({\n center: center,\n closed: true,\n radius: 4,\n style: {\n fillColor: \"white\",\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n}\n\n\n\n\nvar $b8496c2f99989bf3$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $33ecc08e46992363$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n clockwise: false,\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $1800abae92fd773b$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n clockwise: false,\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $fb98baf0217f8e0c$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $54446647548b3535$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n },\n {\n clockwise: false,\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 2,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $0a8c7ddf411d961b$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n {\n color: \"red\",\n type: \"Beam\"\n },\n null,\n {\n color: \"blue\",\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n {\n color: \"blue\",\n type: \"Beam\"\n },\n null,\n {\n color: \"red\",\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 2,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $06dc5eb78f3da6e9$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n {\n type: \"Beam\"\n },\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n {\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n {\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 3,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n null,\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n type: \"Beam\"\n },\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 3,\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 3,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n {\n on: true,\n type: \"Beam\"\n },\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 0,\n type: \"Connections\"\n },\n {\n amount: 6,\n type: \"Moves\"\n }\n ],\n version: 1\n};\n\n\nvar $5c557170bffef65c$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"blue\",\n openings: [\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: [\n \"red\",\n \"blue\"\n ],\n openings: [\n null,\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n type: \"Filter\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n type: \"Filter\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n null,\n {\n items: [\n {\n color: [\n \"red\",\n \"blue\"\n ],\n openings: [\n null,\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n {\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Swap\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 2,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $5fbf0d3064c6ff0d$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $95874837c77011b6$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Move\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n null,\n null,\n {\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n null,\n null,\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $a14b496340b3be04$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 5,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n {\n color: \"blue\",\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n null,\n null,\n {\n color: \"blue\",\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n direction: 5,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 5,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ],\n type: \"even-r\"\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ],\n version: 1\n};\n\n\nconst $e7b83e5b200e5307$var$layout = [\n [\n \"o\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"x\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"x\",\n \"x\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"x\",\n \"x\",\n \"x\",\n \"x\"\n ],\n [\n \"o\",\n \"x\",\n \"x\",\n \"x\"\n ]\n];\nvar $e7b83e5b200e5307$export$2e2bcd8739ae039 = {\n layout: {\n tiles: $e7b83e5b200e5307$var$layout.map((column)=>column.map((item)=>item === \"x\" ? {\n type: \"Tile\"\n } : null))\n },\n solution: [\n {\n amount: 100,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $a81a4847a1fd3a73$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n {\n color: [\n \"red\",\n \"blue\"\n ],\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n null,\n {\n color: \"green\",\n type: \"Beam\"\n },\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n openings: [\n {\n color: \"red\",\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Rotate\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n openings: [\n {\n color: \"blue\",\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n modifiers: [\n {\n type: \"Lock\"\n },\n {\n type: \"Toggle\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n direction: 0,\n type: \"Portal\"\n }\n ],\n modifiers: [\n {\n type: \"Immutable\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 1,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $ea2d16dbcb2ea257$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n type: \"Reflector\"\n }\n ],\n modifiers: [\n {\n type: \"Rotate\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n items: [\n {\n color: \"green\",\n openings: [\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 999,\n type: \"Connections\"\n }\n ]\n};\n\n\nvar $9e10eb87d728cd7a$export$2e2bcd8739ae039 = {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"red\",\n openings: [\n null,\n null,\n null,\n null,\n null,\n {\n on: true,\n type: \"Beam\"\n }\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ],\n [\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n },\n {\n type: \"Tile\"\n }\n ],\n [\n null,\n {\n items: [\n {\n rotation: 4,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n rotation: 2,\n type: \"Reflector\"\n }\n ],\n type: \"Tile\"\n },\n {\n items: [\n {\n color: \"blue\",\n openings: [\n {\n on: true,\n type: \"Beam\"\n },\n null,\n null,\n null,\n null,\n null\n ],\n type: \"Terminus\"\n }\n ],\n type: \"Tile\"\n }\n ]\n ]\n },\n solution: [\n {\n amount: 100,\n type: \"Connections\"\n }\n ]\n};\n\n\n// Ensure puzzle configuration is valid JSON\nconst $df74fd5b33098157$var$configuration = Object.fromEntries(Object.entries({\n \"001\": (0, $b8496c2f99989bf3$export$2e2bcd8739ae039),\n \"002\": (0, $33ecc08e46992363$export$2e2bcd8739ae039),\n \"003\": (0, $1800abae92fd773b$export$2e2bcd8739ae039),\n \"004\": (0, $fb98baf0217f8e0c$export$2e2bcd8739ae039),\n \"005\": (0, $54446647548b3535$export$2e2bcd8739ae039),\n \"006\": (0, $0a8c7ddf411d961b$export$2e2bcd8739ae039),\n \"007\": (0, $06dc5eb78f3da6e9$export$2e2bcd8739ae039),\n \"008\": (0, $5c557170bffef65c$export$2e2bcd8739ae039),\n \"009\": (0, $5fbf0d3064c6ff0d$export$2e2bcd8739ae039),\n \"010\": (0, $95874837c77011b6$export$2e2bcd8739ae039),\n \"011\": (0, $a14b496340b3be04$export$2e2bcd8739ae039),\n test_infinite_loop: (0, $9e10eb87d728cd7a$export$2e2bcd8739ae039),\n test_layout: (0, $e7b83e5b200e5307$export$2e2bcd8739ae039),\n test_portal: (0, $a81a4847a1fd3a73$export$2e2bcd8739ae039),\n test_reflector: (0, $ea2d16dbcb2ea257$export$2e2bcd8739ae039)\n}).map(([k, v])=>[\n k,\n JSON.parse(JSON.stringify(v))\n ]));\nfunction $df74fd5b33098157$var$traverse(ids, id, amount) {\n const index = ids.indexOf(id);\n return ids[index < 0 ? index : index + amount];\n}\nclass $df74fd5b33098157$var$PuzzleGroup {\n ids;\n constructor(ids){\n this.firstId = ids[0];\n this.ids = ids;\n this.lastId = ids[ids.length - 1];\n }\n get(id) {\n if (this.has(id)) // Note: deep cloning configuration to prevent mutation\n return structuredClone($df74fd5b33098157$var$configuration[id]);\n }\n has(id) {\n return this.ids.includes(id);\n }\n nextId(id) {\n return $df74fd5b33098157$var$traverse(this.ids, id, 1);\n }\n previousId(id) {\n return $df74fd5b33098157$var$traverse(this.ids, id, -1);\n }\n}\nconst $df74fd5b33098157$export$f68871ba002ca835 = new $df74fd5b33098157$var$PuzzleGroup(Object.keys($df74fd5b33098157$var$configuration).sort());\n$df74fd5b33098157$export$f68871ba002ca835.hidden = new $df74fd5b33098157$var$PuzzleGroup($df74fd5b33098157$export$f68871ba002ca835.ids.filter((id)=>id.startsWith(\"test_\")));\n$df74fd5b33098157$export$f68871ba002ca835.titles = Object.fromEntries($df74fd5b33098157$export$f68871ba002ca835.ids.map((id)=>[\n id,\n $df74fd5b33098157$var$configuration[id].title || id\n ]));\n$df74fd5b33098157$export$f68871ba002ca835.visible = new $df74fd5b33098157$var$PuzzleGroup($df74fd5b33098157$export$f68871ba002ca835.ids.filter((id)=>!$df74fd5b33098157$export$f68871ba002ca835.hidden.has(id)));\n\n\n\nconst $0ca0e02f0a4bc377$var$history = window.history;\nconst $0ca0e02f0a4bc377$var$localStorage = window.localStorage;\nclass $0ca0e02f0a4bc377$export$7254cc27399e90bd {\n #current;\n #deltas;\n #id;\n #index;\n #original;\n #selectedTile;\n #version;\n constructor(id, original, deltas, deltasIndex, selectedTile, version){\n this.#id = id;\n this.#original = original;\n this.#deltas = deltas || [];\n this.#index = deltasIndex || this.#lastIndex();\n this.#selectedTile = selectedTile;\n this.#version = version ?? original.version;\n // Update current state\n this.#current = structuredClone(original);\n this.#deltas.filter((delta, index)=>index <= this.#index).forEach((delta)=>this.apply(delta));\n this.#updateCache(id);\n }\n apply(delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === \"string\") delta = JSON.parse(delta);\n console.debug(\"StateManager: applying delta\", delta);\n return (0, $3e2f0fa58ba587b4$export$1bb10639a2cd4297).patch(this.#current, delta);\n }\n canRedo() {\n return this.#index < this.#lastIndex();\n }\n canUndo() {\n return this.#index >= 0;\n }\n encode() {\n return (0, $3e2f0fa58ba587b4$export$4e633de97d65d1c8)(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: (0, $df74fd5b33098157$export$f68871ba002ca835).has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }));\n }\n getCurrent() {\n return structuredClone(this.#current);\n }\n getId() {\n return this.#id;\n }\n getTitle() {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : \"\");\n }\n getSelectedTile() {\n return this.#selectedTile;\n }\n moves() {\n return this.#index + 1;\n }\n length() {\n return this.#deltas.length;\n }\n redo() {\n const nextIndex = this.#index + 1;\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= nextIndex).forEach((delta)=>this.apply(delta));\n this.#index = nextIndex;\n this.#updateCache();\n }\n }\n reset() {\n this.#current = structuredClone(this.#original);\n this.#deltas = [];\n this.#index = this.#lastIndex();\n this.#selectedTile = undefined;\n $0ca0e02f0a4bc377$export$7254cc27399e90bd.clearCache(this.getId());\n this.#updateCache();\n }\n setSelectedTile(tile) {\n const id = tile?.coordinates.offset.toString();\n if (this.#selectedTile !== id) {\n this.#selectedTile = id;\n this.#updateCache();\n }\n }\n undo() {\n const previousIndex = this.#index - 1;\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= previousIndex).forEach((delta)=>this.apply(delta));\n this.#index = previousIndex;\n this.#updateCache();\n }\n }\n update(newState) {\n const delta = (0, $3e2f0fa58ba587b4$export$1bb10639a2cd4297).diff(this.#current, newState);\n console.debug(\"delta\", delta);\n if (delta === undefined) // Nothing to do\n return;\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1);\n this.apply(delta);\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta));\n this.#index = this.#lastIndex();\n this.#updateCache();\n }\n #key(key) {\n return $0ca0e02f0a4bc377$export$7254cc27399e90bd.key(key, this.getId());\n }\n #lastIndex() {\n return this.#deltas.length - 1;\n }\n #updateCache() {\n const id = this.getId();\n const state = this.encode();\n (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash = [\n \"\",\n id,\n state\n ].join(\"/\");\n $0ca0e02f0a4bc377$var$history.pushState({\n id: id,\n state: state\n }, \"\", (0, $3e2f0fa58ba587b4$export$128fa18b7194ef));\n $0ca0e02f0a4bc377$var$localStorage.setItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id, id);\n $0ca0e02f0a4bc377$var$localStorage.setItem(this.#key($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.state), state);\n }\n static clearCache(id) {\n if (!id) {\n // Clear everything\n (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash = \"\";\n $0ca0e02f0a4bc377$var$history.pushState({}, \"\", (0, $3e2f0fa58ba587b4$export$128fa18b7194ef));\n id = $0ca0e02f0a4bc377$var$localStorage.getItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id);\n $0ca0e02f0a4bc377$var$localStorage.clear();\n // Keep current puzzle ID\n $0ca0e02f0a4bc377$var$localStorage.setItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id, id);\n } else {\n // Clear a single puzzle\n (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash = `/${id}`;\n $0ca0e02f0a4bc377$var$history.pushState({\n id: id\n }, \"\", (0, $3e2f0fa58ba587b4$export$128fa18b7194ef));\n $0ca0e02f0a4bc377$var$localStorage.removeItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.key($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.state, id));\n }\n }\n static fromEncoded(state) {\n state = JSON.parse((0, $3e2f0fa58ba587b4$export$afb15ede80c42aab)(state));\n state.original = state.original || (0, $df74fd5b33098157$export$f68871ba002ca835).get(state.id);\n state.original.version ??= 0;\n return new $0ca0e02f0a4bc377$export$7254cc27399e90bd(state.id, state.original, state.deltas, state.deltasIndex, state.selectedTile, state.version);\n }\n static fromId(id) {\n return new $0ca0e02f0a4bc377$export$7254cc27399e90bd(id, (0, $df74fd5b33098157$export$f68871ba002ca835).get(id));\n }\n static resolve(id) {\n let state;\n // Allow cache to be cleared via URL param\n if ((0, $3e2f0fa58ba587b4$export$281ad3752a540efe).has($0ca0e02f0a4bc377$export$7254cc27399e90bd.ParamKeys.clearCache)) $0ca0e02f0a4bc377$export$7254cc27399e90bd.clearCache((0, $3e2f0fa58ba587b4$export$281ad3752a540efe).get($0ca0e02f0a4bc377$export$7254cc27399e90bd.ParamKeys.clearCache));\n const pathSegments = (0, $3e2f0fa58ba587b4$export$128fa18b7194ef).hash.substring(1).split(\"/\").filter((path)=>path !== \"\");\n if (!id) // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path)=>!(0, $df74fd5b33098157$export$f68871ba002ca835).has(path)).some((segment, index)=>{\n try {\n state = $0ca0e02f0a4bc377$export$7254cc27399e90bd.fromEncoded(segment);\n id = state.getId();\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e);\n }\n return state !== undefined;\n });\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || $0ca0e02f0a4bc377$var$localStorage.getItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.id) || (0, $df74fd5b33098157$export$f68871ba002ca835).visible.firstId;\n const localState = $0ca0e02f0a4bc377$var$localStorage.getItem($0ca0e02f0a4bc377$export$7254cc27399e90bd.key($0ca0e02f0a4bc377$export$7254cc27399e90bd.CacheKeys.state, id));\n if (localState) try {\n state = $0ca0e02f0a4bc377$export$7254cc27399e90bd.fromEncoded(localState);\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e);\n }\n }\n if (state) {\n const cachedVersion = state.#version;\n const originalVersion = state.#original.version;\n if (cachedVersion !== originalVersion) {\n console.debug(`Invalidating cache for ID ${id} due to version mismatch. ` + `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`);\n state = undefined;\n $0ca0e02f0a4bc377$export$7254cc27399e90bd.clearCache(id);\n }\n }\n if (!state) // Fall back to loading state from Puzzles cache by ID\n state = $0ca0e02f0a4bc377$export$7254cc27399e90bd.fromId(id);\n if (!state) throw new Error(`Unable to resolve state for ID '${id}'`);\n return state;\n }\n static key(key, id) {\n return `${key}:${id}`;\n }\n static CacheKeys = Object.freeze({\n center: \"center\",\n id: \"id\",\n state: \"state\",\n zoom: \"zoom\"\n });\n static ParamKeys = Object.freeze({\n clearCache: \"clearCache\"\n });\n}\n\n\n\n\n\n\n\n\n\nclass $8010a1f4ac1afb69$export$a337a674d761bdc2 {\n #conditions = [];\n constructor(state){\n state.forEach((condition)=>this.#conditionFactory(condition));\n }\n teardown() {\n this.#conditions.forEach((condition)=>condition.teardown());\n $8010a1f4ac1afb69$export$a337a674d761bdc2.element.replaceChildren();\n }\n isSolved() {\n return this.#conditions.every((condition)=>condition.isMet());\n }\n #conditionFactory(condition) {\n switch(condition.type){\n case $8010a1f4ac1afb69$var$SolutionCondition.Types.connections:\n this.#conditions.push(new $8010a1f4ac1afb69$var$Connections(condition));\n break;\n case $8010a1f4ac1afb69$var$SolutionCondition.Types.moves:\n this.#conditions.push(new $8010a1f4ac1afb69$var$Moves(condition));\n break;\n default:\n console.warn(\"Ignoring condition with unknown type:\", condition.type);\n break;\n }\n }\n static element = document.getElementById(\"solution\");\n}\nclass $8010a1f4ac1afb69$var$SolutionCondition {\n constructor(state, elements){\n this.state = state;\n const li = document.createElement(\"li\");\n li.append(...elements);\n $8010a1f4ac1afb69$export$a337a674d761bdc2.element.append(li);\n }\n isMet() {}\n teardown() {}\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"connections\",\n \"moves\"\n ].map((type)=>[\n type,\n (0, $3e2f0fa58ba587b4$export$9a00dee1beb8f576)(type)\n ])));\n}\nclass $8010a1f4ac1afb69$var$Connections extends $8010a1f4ac1afb69$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #connections = [];\n constructor(state){\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $3e2f0fa58ba587b4$export$43941667eccc070)(\"/\"),\n required,\n (0, $3e2f0fa58ba587b4$export$f6292fcace2a1886)(\"link\", \"Connections\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $7a376349f5a360a3$export$3ad31a823e05e6fb).Events.Connection,\n handler: this.update\n },\n {\n type: (0, $7a376349f5a360a3$export$3ad31a823e05e6fb).Events.Disconnection,\n handler: this.update\n }\n ]);\n }\n isMet() {\n return this.#connections.length === this.state.amount;\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Connections.update\", event);\n const terminus = event.detail.terminus;\n const opening = event.detail.opening;\n const connectionId = `${terminus.id}:${opening.direction}`;\n const connectionIndex = this.#connections.findIndex((connection)=>connection === connectionId);\n if (opening.connected && connectionIndex < 0) this.#connections.push(connectionId);\n else if (!opening.connected && connectionIndex >= 0) this.#connections.splice(connectionIndex, 1);\n this.#completed.textContent = this.#connections.length.toString();\n }\n}\nclass $8010a1f4ac1afb69$var$Moves extends $8010a1f4ac1afb69$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #moves = 0;\n constructor(state){\n state.operator ??= $8010a1f4ac1afb69$var$Moves.Operators.equalTo;\n if (!Object.values($8010a1f4ac1afb69$var$Moves.Operators).includes(state.operator)) throw new Error(`Invalid moves operator: ${state.operator}`);\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $3e2f0fa58ba587b4$export$43941667eccc070)(state.operator),\n required,\n (0, $3e2f0fa58ba587b4$export$f6292fcace2a1886)(\"stacks\", \"Moves\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $b65a2f5625db2a92$export$a9753b1ffc289935).Events.Updated,\n handler: this.update\n }\n ]);\n }\n isMet() {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch(this.state.operator){\n case $8010a1f4ac1afb69$var$Moves.Operators.equalTo:\n return this.#moves === this.state.amount;\n case $8010a1f4ac1afb69$var$Moves.Operators.greaterThan:\n return this.#moves > this.state.amount;\n case $8010a1f4ac1afb69$var$Moves.Operators.lessThan:\n return this.#moves < this.state.amount;\n }\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Moves.update\", event);\n this.#moves = event.detail.state.moves();\n this.#completed.textContent = this.#moves.toString();\n }\n static Operators = Object.freeze({\n equalTo: \"=\",\n greaterThan: \">\",\n lessThan: \"<\"\n });\n}\n\n\n\nconst $b65a2f5625db2a92$var$elements = Object.freeze({\n main: document.getElementById(\"main\"),\n message: document.getElementById(\"message\"),\n next: document.getElementById(\"next\"),\n previous: document.getElementById(\"previous\"),\n puzzle: document.getElementById(\"puzzle\"),\n puzzleId: document.getElementById(\"puzzle-id\"),\n redo: document.getElementById(\"redo\"),\n reset: document.getElementById(\"reset\"),\n undo: document.getElementById(\"undo\"),\n title: document.querySelector(\"title\")\n});\nclass $b65a2f5625db2a92$export$a9753b1ffc289935 {\n connections = [];\n debug = false;\n error = false;\n layers = {};\n message;\n selectedTile;\n solved = false;\n #beams;\n #beamsUpdateDelay = 30;\n #collisions = {};\n #eventListeners = new (0, $8ee30938c07750df$export$b20b719ec758a20f)({\n context: this\n });\n #interact;\n #isUpdatingBeams = false;\n #mask;\n #maskQueue = [];\n #solution;\n #state;\n #termini;\n #tiles = [];\n constructor(){\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).settings.insertItems = false;\n // noinspection JSCheckFunctionSignatures\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).setup($b65a2f5625db2a92$var$elements.puzzle);\n this.#resize();\n this.layers.mask = new (0, $hvNIE.Layer)();\n this.layers.collisions = new (0, $hvNIE.Layer)();\n this.layers.debug = new (0, $hvNIE.Layer)();\n this.#eventListeners.add([\n {\n type: (0, $5625a4a7d65ce9b8$export$693b33588b3dd9d8).Events.Update,\n handler: this.#onBeamUpdate\n },\n {\n type: \"change\",\n element: $b65a2f5625db2a92$var$elements.puzzleId,\n handler: this.#onSelect\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.next,\n handler: this.#next\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.previous,\n handler: this.#previous\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.redo,\n handler: this.#redo\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.reset,\n handler: this.#reset\n },\n {\n type: \"click\",\n element: $b65a2f5625db2a92$var$elements.undo,\n handler: this.#undo\n },\n {\n type: \"keyup\",\n handler: this.#onKeyup\n },\n {\n type: (0, $890ebaa4ee6ae241$export$5acd5e6efc9671b7).Events.Invoked,\n handler: this.#onModifierInvoked\n },\n {\n type: $b65a2f5625db2a92$export$a9753b1ffc289935.Events.Mask,\n handler: this.#onMask\n },\n {\n type: \"resize\",\n element: window,\n handler: (0, $3e2f0fa58ba587b4$export$61fc7d43ac8f84b0)(this.#resize)\n },\n {\n type: (0, $ca3880ece69ea231$export$654f18991713c8c4).Events.Update,\n handler: this.#onStateUpdate\n },\n {\n type: \"tap\",\n element: $b65a2f5625db2a92$var$elements.puzzle,\n handler: this.#onTap\n }\n ]);\n this.#interact = new (0, $4f41d74d72b0a295$export$b0d759d807f751d4)($b65a2f5625db2a92$var$elements.puzzle);\n this.#updateDropdown();\n this.select();\n }\n centerOnTile(offset) {\n const tile = this.layout.getTileByOffset(offset);\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.center = tile.center;\n }\n clearDebugPoints() {\n this.layers.debug.clear();\n }\n drawDebugPoint(point, style = {}) {\n const circle = new (0, $hvNIE.Path).Circle(Object.assign({\n radius: 3,\n fillColor: \"red\",\n strokeColor: \"white\",\n strokeWidth: 1,\n center: point\n }, style));\n this.layers.debug.addChild(circle);\n }\n getBeamsUpdateDelay() {\n return this.#beamsUpdateDelay;\n }\n getItems(tile) {\n return (tile ? this.#tiles.filter((t)=>t === tile) : this.#tiles).flatMap((tile)=>tile.items);\n }\n getTile(point) {\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.hitTest(point.ceil(), {\n fill: true,\n match: (result)=>result.item.data.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n });\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result;\n }\n mask(mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask);\n throw new Error(`Duplicate mask detected: ${mask.id}`);\n }\n this.#maskQueue.push(mask);\n return;\n }\n this.#mask = mask;\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter).map((tile)=>new (0, $4029f0d6ba5141b4$export$991dcf7284de63d)(tile, typeof mask.configuration.style === \"function\" ? mask.configuration.style(tile) : mask.configuration.style));\n this.layers.mask.addChildren(tiles.map((tile)=>tile.group));\n if (mask.message) $b65a2f5625db2a92$var$elements.message.textContent = mask.message;\n mask.onMask(this);\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Mask);\n }\n select(id) {\n if (id !== undefined && id === this.#state?.getId()) // This ID is already selected\n return;\n try {\n this.#state = (0, $0ca0e02f0a4bc377$export$7254cc27399e90bd).resolve(id);\n } catch (e) {\n this.#onError(e, \"Could not load puzzle.\");\n }\n this.#reload();\n }\n unmask() {\n this.layers.mask.removeChildren();\n this.#updateMessage(this.selectedTile);\n this.#mask.onUnmask(this);\n this.#mask = undefined;\n document.body.classList.remove($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Mask);\n const mask = this.#maskQueue.pop();\n if (mask) // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(()=>this.mask(mask), 0);\n }\n update() {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true;\n this.#updateBeams();\n }\n }\n updateSelectedTile(tile) {\n const previouslySelectedTile = this.selectedTile;\n this.selectedTile = tile;\n this.#state.setSelectedTile(tile);\n this.#updateMessage(tile);\n if (previouslySelectedTile && previouslySelectedTile !== tile) previouslySelectedTile.onDeselected(tile);\n if (tile && tile !== previouslySelectedTile) tile.onSelected(previouslySelectedTile);\n return previouslySelectedTile;\n }\n updateState() {\n this.#state.update(Object.assign(this.#state.getCurrent(), {\n layout: this.layout.getState()\n }));\n this.#updateActions();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #addLayers() {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer)=>(0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.addLayer(layer));\n }\n #next() {\n const id = (0, $df74fd5b33098157$export$f68871ba002ca835).visible.nextId(this.#state.getId());\n if (id) this.select(id);\n }\n #onBeamUpdate(event) {\n const beam = event.detail.beam;\n const state = event.detail.state;\n if (state?.has((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision)) {\n const collision = state.get((0, $0b4b4185562e5b04$export$81262d6ca0162a3).Collision);\n const collisionId = $b65a2f5625db2a92$export$a9753b1ffc289935.Collision.id(collision.point);\n const existing = this.#collisions[collisionId];\n if (existing) existing.addBeam(beam);\n else this.#collisions[collisionId] = new $b65a2f5625db2a92$export$a9753b1ffc289935.Collision(this.layers.collisions, [\n beam\n ], collision.point);\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration;\n if (mask?.beam?.equals(beam)) this.unmask();\n }\n Object.values(this.#collisions).forEach((collision)=>collision.update());\n this.#beams.filter((otherBeam)=>otherBeam !== beam).forEach((beam)=>beam.onBeamUpdated(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onError(error, message, cause) {\n this.error = true;\n // Support exclusion of error\n if (typeof error === \"string\") {\n message = error;\n cause = message;\n error = undefined;\n }\n if (error) console.error(error);\n cause = cause ?? error?.cause;\n if (cause) console.error(\"cause:\", cause);\n message = message ?? error?.message ?? \"The puzzle has encountered an error, please consider reporting.\";\n $b65a2f5625db2a92$var$elements.message.textContent = message;\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Error);\n }\n #onKeyup(event) {\n if (this.debug && event.key === \"s\") this.update();\n }\n #onMask(event) {\n console.debug(\"Mask event\", event);\n this.mask(event.detail.mask);\n }\n #onModifierInvoked(event) {\n const tile = event.detail.tile;\n this.#beams// Update beams in the tile being modified first\n .sort((beam)=>tile.items.some((item)=>item === beam) ? -1 : 0).forEach((beam)=>beam.onModifierInvoked(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onSelect(event) {\n this.select(event.target.value);\n }\n #onSolved() {\n if (this.solved) return;\n this.solved = true;\n this.updateSelectedTile(undefined);\n this.mask($b65a2f5625db2a92$export$a9753b1ffc289935.#solvedMask);\n const span = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\");\n span.textContent = \"celebration\";\n span.title = \"Solved!\";\n $b65a2f5625db2a92$var$elements.message.replaceChildren(span);\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Solved);\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Solved);\n }\n #onStateUpdate() {\n this.updateState();\n }\n #onTap(event) {\n let tile;\n if (this.solved || this.error) return;\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.hitTest(event.detail.point);\n switch(result?.item.data.type){\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.mask:\n return;\n case (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial);\n break;\n }\n // There is an active mask\n if (this.#mask) this.#mask.onTap(this, tile);\n else {\n const previouslySelectedTile = this.updateSelectedTile(tile);\n if (tile && tile === previouslySelectedTile) tile.onTap(event);\n }\n }\n #previous() {\n const id = (0, $df74fd5b33098157$export$f68871ba002ca835).visible.previousId(this.#state.getId());\n if (id) this.select(id);\n }\n #redo() {\n this.#state.redo();\n this.#reload();\n }\n #reload() {\n this.error = false;\n if (this.#state) this.#teardown();\n this.#setup();\n (0, $3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1)($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #removeLayers() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).project.clear();\n }\n #reset() {\n this.#state.reset();\n this.#reload();\n }\n #resize() {\n const { width: width, height: height } = $b65a2f5625db2a92$var$elements.main.getBoundingClientRect();\n $b65a2f5625db2a92$var$elements.puzzle.style.height = height + \"px\";\n $b65a2f5625db2a92$var$elements.puzzle.style.width = width + \"px\";\n (0, (/*@__PURE__*/$parcel$interopDefault($hvNIE))).view.viewSize = new (0, $hvNIE.Size)(width, height);\n }\n #setup() {\n // Reset the item IDs, so they are unique per-puzzle\n (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).uniqueId = 0;\n const { layout: layout, message: message, solution: solution } = this.#state.getCurrent();\n this.layout = new (0, $941a4b5ec82b485b$export$c84671f46d6a1ca)(layout);\n this.message = message;\n this.#solution = new (0, $8010a1f4ac1afb69$export$a337a674d761bdc2)(solution);\n this.#tiles = this.layout.tiles;\n this.#termini = this.layout.items.filter((item)=>item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.terminus);\n this.#beams = this.#termini.flatMap((terminus)=>terminus.beams);\n this.#addLayers();\n document.body.classList.add($b65a2f5625db2a92$export$a9753b1ffc289935.Events.Loaded);\n const selectedTileId = this.#state.getSelectedTile();\n const selectedTile = selectedTileId ? this.layout.getTileByOffset(new (0, $ca914ef976dd611b$export$2e382909194b1aab)(...selectedTileId.split(\",\"))) : undefined;\n this.updateSelectedTile(selectedTile);\n this.update();\n this.#updateActions();\n }\n #teardown() {\n document.body.classList.remove(...Object.values($b65a2f5625db2a92$export$a9753b1ffc289935.Events));\n this.#removeLayers();\n this.#tiles.forEach((tile)=>tile.teardown());\n this.#tiles = [];\n this.#solution?.teardown();\n this.#solution = undefined;\n this.solved = false;\n this.layout?.teardown();\n this.layout = undefined;\n this.selectedTile = undefined;\n this.#beams = [];\n this.#collisions = {};\n this.#isUpdatingBeams = false;\n this.#mask = undefined;\n this.#termini = [];\n }\n #undo() {\n this.#state.undo();\n this.#reload();\n }\n #updateActions() {\n const id = this.#state.getId();\n const title = this.#state.getTitle();\n // Update browser title\n $b65a2f5625db2a92$var$elements.title.textContent = `Beaming: Puzzle ${title}`;\n (0, $3e2f0fa58ba587b4$export$c2255604a80b4506)(\"disabled\", ...Array.from(document.querySelectorAll(\"#actions li\")));\n const disable = [];\n if (!this.#state.canUndo()) disable.push($b65a2f5625db2a92$var$elements.undo);\n if (!this.#state.canRedo()) disable.push($b65a2f5625db2a92$var$elements.redo);\n if (!(0, $df74fd5b33098157$export$f68871ba002ca835).visible.has(id)) {\n // Custom puzzle\n $b65a2f5625db2a92$var$elements.puzzleId.value = \"\";\n disable.push($b65a2f5625db2a92$var$elements.previous, $b65a2f5625db2a92$var$elements.next);\n } else {\n $b65a2f5625db2a92$var$elements.puzzleId.value = id;\n if (id === (0, $df74fd5b33098157$export$f68871ba002ca835).visible.firstId) disable.push($b65a2f5625db2a92$var$elements.previous);\n else if (id === (0, $df74fd5b33098157$export$f68871ba002ca835).visible.lastId) disable.push($b65a2f5625db2a92$var$elements.next);\n }\n (0, $3e2f0fa58ba587b4$export$d2cf6cd1dc7067d3)(\"disabled\", ...disable);\n }\n #updateDropdown() {\n $b65a2f5625db2a92$var$elements.puzzleId.replaceChildren();\n for (const id of (0, $df74fd5b33098157$export$f68871ba002ca835).visible.ids){\n const option = document.createElement(\"option\");\n option.value = id;\n option.innerText = (0, $df74fd5b33098157$export$f68871ba002ca835).titles[id];\n $b65a2f5625db2a92$var$elements.puzzleId.append(option);\n }\n }\n #updateBeams() {\n const beams = this.#beams.filter((beam)=>beam.isPending());\n if (!beams.length) {\n this.#isUpdatingBeams = false;\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(()=>{\n if (this.#solution.isSolved()) this.#onSolved();\n }, 0);\n return;\n }\n if (this.debug) this.layers.debug.clear();\n beams.forEach((beam)=>beam.step(this));\n // Ensure the UI has a chance to update between loops\n setTimeout(()=>this.#updateBeams(), this.#beamsUpdateDelay);\n }\n #updateMessage(tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items.map((item)=>item.getColorElements(tile)).find((colorElements)=>colorElements.length > 0) || [];\n $b65a2f5625db2a92$var$elements.message.replaceChildren(...colorElements);\n } else $b65a2f5625db2a92$var$elements.message.textContent = this.message || \"Select a tile\";\n }\n static Collision = class {\n constructor(layer, beams, point, item){\n this.id = $b65a2f5625db2a92$export$a9753b1ffc289935.Collision.id(point);\n this.layer = layer;\n this.beams = beams;\n this.point = point;\n this.item = item;\n }\n addBeam(beam) {\n if (!this.beams.some((otherBeam)=>otherBeam.id === beam.id)) this.beams.push(beam);\n return this.beams;\n }\n addItem(color) {\n this.item = new (0, $729c2b05fa2dedeb$export$88c9f72b40fcdd85)({\n center: this.point,\n color: color\n });\n this.layer.addChild(this.item.group);\n }\n equals(other) {\n return (0, $3e2f0fa58ba587b4$export$c23f9d3341b5fd07)(this.point, other?.point);\n }\n getColor() {\n return this.beams.length ? (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(this.beams.map((beam)=>beam.getColor())).hex() : undefined;\n }\n removeItem() {\n if (this.item) {\n this.item.remove();\n this.item = undefined;\n }\n }\n update() {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam)=>this.equals(beam.getCollision()));\n const color = this.getColor();\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) this.removeItem();\n // Add missing collision items\n if (this.beams.length && !this.item) this.addItem(color);\n }\n static id(point) {\n const rounded = point.round();\n return [\n rounded.x,\n rounded.y\n ].join(\",\");\n }\n };\n static Events = Object.freeze({\n Error: \"puzzle-error\",\n Loaded: \"puzzle-loaded\",\n Mask: \"puzzle-mask\",\n Solved: \"puzzle-solved\",\n Updated: \"puzzle-updated\"\n });\n static Mask = class {\n constructor(configuration = {}){\n configuration.style ??= {};\n this.configuration = configuration;\n this.id = configuration.id;\n this.message = configuration.message;\n this.tileFilter = configuration.tileFilter ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525)(true);\n this.onMask = configuration.onMask ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.onTap = configuration.onTap ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n this.onUnmask = configuration.onUnmask ?? (0, $3e2f0fa58ba587b4$export$8793edee2d425525);\n }\n equals(other) {\n return this.id === other.id;\n }\n };\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item)=>item.type === (0, $4b738c6f333de3e1$export$6d08773d2e66f8f2).Types.beam && item.isConnected();\n static #solvedMask = new $b65a2f5625db2a92$export$a9753b1ffc289935.Mask({\n style: (tile)=>{\n const beams = tile.items.filter($b65a2f5625db2a92$export$a9753b1ffc289935.#connectedBeams);\n const colors = beams.flatMap((beam)=>beam.getSteps(tile).flatMap((step)=>step.color));\n return {\n fillColor: (0, (/*@__PURE__*/$parcel$interopDefault($389f2dcfbe95c865$exports))).average(colors).hex()\n };\n },\n tileFilter: (tile)=>tile.items.some($b65a2f5625db2a92$export$a9753b1ffc289935.#connectedBeams)\n });\n}\n\n\n\nconst $250751c5950a3842$var$script = document.createElement(\"script\");\n$250751c5950a3842$var$script.setAttribute(\"src\", \"https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS\");\ndocument.head.append($250751c5950a3842$var$script);\nconst $250751c5950a3842$var$dataLayer = window.dataLayer = window.dataLayer || [];\nfunction $250751c5950a3842$var$gtag() {\n $250751c5950a3842$var$dataLayer.push(arguments);\n}\n$250751c5950a3842$var$gtag(\"js\", new Date());\n$250751c5950a3842$var$gtag(\"config\", \"G-HXLD6EE5NS\");\n\n\nconst $e22b5ab31fbd25da$var$doorbellOptions = window.doorbellOptions = {\n appKey: \"o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC\",\n container: document.getElementById(\"feedback-container\"),\n hideButton: true,\n properties: {}\n};\nconst $e22b5ab31fbd25da$var$script = document.createElement(\"script\");\n$e22b5ab31fbd25da$var$script.setAttribute(\"src\", \"https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0\");\ndocument.head.append($e22b5ab31fbd25da$var$script);\ndocument.addEventListener(\"puzzle-updated\", (event)=>{\n $e22b5ab31fbd25da$var$doorbellOptions.properties.puzzleId = event.detail.state.getId();\n});\n\n\nconst $2fd5a75c703b0f49$var$puzzle = new (0, $b65a2f5625db2a92$export$a9753b1ffc289935)();\nconst $2fd5a75c703b0f49$var$beaming = {\n debug: $f1fc5431671d3192$export$1c9f709888824e05,\n puzzle: $2fd5a75c703b0f49$var$puzzle\n};\n// Used by functional tests\n$2fd5a75c703b0f49$var$beaming.centerOnTile = function(r, c) {\n return $2fd5a75c703b0f49$var$puzzle.centerOnTile(new (0, $ca914ef976dd611b$export$2e382909194b1aab)(r, c));\n};\n$2fd5a75c703b0f49$var$beaming.clearDebugPoints = $2fd5a75c703b0f49$var$puzzle.clearDebugPoints.bind($2fd5a75c703b0f49$var$puzzle);\n$2fd5a75c703b0f49$var$beaming.drawDebugPoint = function(x, y, style) {\n return $2fd5a75c703b0f49$var$puzzle.drawDebugPoint(new (0, $hvNIE.Point)(x, y), style);\n};\n// Export\nwindow.beaming = $2fd5a75c703b0f49$var$beaming;\n\n})();\n//# sourceMappingURL=index.bb48da16.js.map\n","/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.17\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tminDistance = this.minDistance,\n\t\t\tmaxDistance = this.maxDistance,\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(minDistance, maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0],\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]* 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","\"use strict\";","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // operators --> modify existing Colors\n\n\n\n\n\n\n\n\n\n\n // interpolators\n\n\n\n\n\n\n\n\n\n\n\n\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n\n // scale\n chroma.scales = scales;\n\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n\n var chroma_js = chroma;\n\n return chroma_js;\n\n}));\n","import { Layout } from './layout'\nimport chroma from 'chroma-js'\nimport paper, { Layer, Path, Size } from 'paper'\nimport { addClass, debounce, emitEvent, fuzzyEquals, noop, removeClass } from './util'\nimport { Item } from './item'\nimport { Mask } from './items/mask'\nimport { Modifier } from './modifier'\nimport { Beam } from './items/beam'\nimport { Collision as CollisionItem } from './items/collision'\nimport { Stateful } from './stateful'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { State } from './state'\nimport { Puzzles } from '../puzzles'\nimport { StepState } from './step'\nimport { EventListeners } from './eventListeners'\nimport { Solution } from './solution'\nimport { Interact } from './interact'\n\nconst elements = Object.freeze({\n main: document.getElementById('main'),\n message: document.getElementById('message'),\n next: document.getElementById('next'),\n previous: document.getElementById('previous'),\n puzzle: document.getElementById('puzzle'),\n puzzleId: document.getElementById('puzzle-id'),\n redo: document.getElementById('redo'),\n reset: document.getElementById('reset'),\n undo: document.getElementById('undo'),\n title: document.querySelector('title')\n})\n\n// There are various spots below that utilize setTimeout in order to process events in order and to prevent\n// long-running computations from blocking UI updates.\n// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop\nexport class Puzzle {\n connections = []\n debug = false\n error = false\n layers = {}\n message\n selectedTile\n solved = false\n\n #beams\n #beamsUpdateDelay = 30\n #collisions = {}\n #eventListeners = new EventListeners({ context: this })\n #interact\n #isUpdatingBeams = false\n #mask\n #maskQueue = []\n #solution\n #state\n #termini\n #tiles = []\n\n constructor () {\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n paper.settings.insertItems = false\n // noinspection JSCheckFunctionSignatures\n paper.setup(elements.puzzle)\n\n this.#resize()\n\n this.layers.mask = new Layer()\n this.layers.collisions = new Layer()\n this.layers.debug = new Layer()\n\n this.#eventListeners.add([\n { type: Beam.Events.Update, handler: this.#onBeamUpdate },\n { type: 'change', element: elements.puzzleId, handler: this.#onSelect },\n { type: 'click', element: elements.next, handler: this.#next },\n { type: 'click', element: elements.previous, handler: this.#previous },\n { type: 'click', element: elements.redo, handler: this.#redo },\n { type: 'click', element: elements.reset, handler: this.#reset },\n { type: 'click', element: elements.undo, handler: this.#undo },\n { type: 'keyup', handler: this.#onKeyup },\n { type: Modifier.Events.Invoked, handler: this.#onModifierInvoked },\n { type: Puzzle.Events.Mask, handler: this.#onMask },\n { type: 'resize', element: window, handler: debounce(this.#resize) },\n { type: Stateful.Events.Update, handler: this.#onStateUpdate },\n { type: 'tap', element: elements.puzzle, handler: this.#onTap }\n ])\n\n this.#interact = new Interact(elements.puzzle)\n this.#updateDropdown()\n\n this.select()\n }\n\n centerOnTile (offset) {\n const tile = this.layout.getTileByOffset(offset)\n paper.view.center = tile.center\n }\n\n clearDebugPoints () {\n this.layers.debug.clear()\n }\n\n drawDebugPoint (point, style = {}) {\n const circle = new Path.Circle(Object.assign({\n radius: 3,\n fillColor: 'red',\n strokeColor: 'white',\n strokeWidth: 1,\n center: point\n }, style))\n this.layers.debug.addChild(circle)\n }\n\n getBeamsUpdateDelay () {\n return this.#beamsUpdateDelay\n }\n\n getItems (tile) {\n return (tile ? this.#tiles.filter((t) => t === tile) : this.#tiles).flatMap((tile) => tile.items)\n }\n\n getTile (point) {\n const result = paper.project.hitTest(point.ceil(), {\n fill: true,\n match: (result) => result.item.data.type === Item.Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n })\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result\n }\n\n mask (mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask)\n throw new Error(`Duplicate mask detected: ${mask.id}`)\n }\n\n this.#maskQueue.push(mask)\n return\n }\n\n this.#mask = mask\n\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter)\n .map((tile) => new Mask(\n tile,\n typeof mask.configuration.style === 'function'\n ? mask.configuration.style(tile)\n : mask.configuration.style\n ))\n\n this.layers.mask.addChildren(tiles.map((tile) => tile.group))\n\n if (mask.message) {\n elements.message.textContent = mask.message\n }\n\n mask.onMask(this)\n\n document.body.classList.add(Puzzle.Events.Mask)\n }\n\n select (id) {\n if (id !== undefined && id === this.#state?.getId()) {\n // This ID is already selected\n return\n }\n\n try {\n this.#state = State.resolve(id)\n } catch (e) {\n this.#onError(e, 'Could not load puzzle.')\n }\n\n this.#reload()\n }\n\n unmask () {\n this.layers.mask.removeChildren()\n this.#updateMessage(this.selectedTile)\n this.#mask.onUnmask(this)\n this.#mask = undefined\n\n document.body.classList.remove(Puzzle.Events.Mask)\n\n const mask = this.#maskQueue.pop()\n if (mask) {\n // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(() => this.mask(mask), 0)\n }\n }\n\n update () {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true\n this.#updateBeams()\n }\n }\n\n updateSelectedTile (tile) {\n const previouslySelectedTile = this.selectedTile\n\n this.selectedTile = tile\n this.#state.setSelectedTile(tile)\n this.#updateMessage(tile)\n\n if (previouslySelectedTile && previouslySelectedTile !== tile) {\n previouslySelectedTile.onDeselected(tile)\n }\n\n if (tile && tile !== previouslySelectedTile) {\n tile.onSelected(previouslySelectedTile)\n }\n\n return previouslySelectedTile\n }\n\n updateState () {\n this.#state.update(Object.assign(this.#state.getCurrent(), { layout: this.layout.getState() }))\n this.#updateActions()\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #addLayers () {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer) => paper.project.addLayer(layer))\n }\n\n #next () {\n const id = Puzzles.visible.nextId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #onBeamUpdate (event) {\n const beam = event.detail.beam\n const state = event.detail.state\n\n if (state?.has(StepState.Collision)) {\n const collision = state.get(StepState.Collision)\n const collisionId = Puzzle.Collision.id(collision.point)\n const existing = this.#collisions[collisionId]\n\n if (existing) {\n existing.addBeam(beam)\n } else {\n this.#collisions[collisionId] = new Puzzle.Collision(this.layers.collisions, [beam], collision.point)\n }\n\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration\n if (mask?.beam?.equals(beam)) {\n this.unmask()\n }\n }\n\n Object.values(this.#collisions).forEach((collision) => collision.update())\n\n this.#beams\n .filter((otherBeam) => otherBeam !== beam)\n .forEach((beam) => beam.onBeamUpdated(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onError (error, message, cause) {\n this.error = true\n\n // Support exclusion of error\n if (typeof error === 'string') {\n message = error\n cause = message\n error = undefined\n }\n\n if (error) {\n console.error(error)\n }\n\n cause = cause ?? error?.cause\n if (cause) {\n console.error('cause:', cause)\n }\n\n message = message ?? error?.message ?? 'The puzzle has encountered an error, please consider reporting.'\n elements.message.textContent = message\n document.body.classList.add(Puzzle.Events.Error)\n }\n\n #onKeyup (event) {\n if (this.debug && event.key === 's') {\n this.update()\n }\n }\n\n #onMask (event) {\n console.debug('Mask event', event)\n this.mask(event.detail.mask)\n }\n\n #onModifierInvoked (event) {\n const tile = event.detail.tile\n\n this.#beams\n // Update beams in the tile being modified first\n .sort((beam) => tile.items.some((item) => item === beam) ? -1 : 0)\n .forEach((beam) => beam.onModifierInvoked(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onSelect (event) {\n this.select(event.target.value)\n }\n\n #onSolved () {\n if (this.solved) {\n return\n }\n\n this.solved = true\n\n this.updateSelectedTile(undefined)\n this.mask(Puzzle.#solvedMask)\n\n const span = document.createElement('span')\n span.classList.add('material-symbols-outlined')\n span.textContent = 'celebration'\n span.title = 'Solved!'\n\n elements.message.replaceChildren(span)\n\n document.body.classList.add(Puzzle.Events.Solved)\n emitEvent(Puzzle.Events.Solved)\n }\n\n #onStateUpdate () {\n this.updateState()\n }\n\n #onTap (event) {\n let tile\n\n if (this.solved || this.error) {\n return\n }\n\n const result = paper.project.hitTest(event.detail.point)\n\n switch (result?.item.data.type) {\n case Item.Types.mask:\n return\n case Item.Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial)\n break\n }\n\n // There is an active mask\n if (this.#mask) {\n this.#mask.onTap(this, tile)\n } else {\n const previouslySelectedTile = this.updateSelectedTile(tile)\n\n if (tile && tile === previouslySelectedTile) {\n tile.onTap(event)\n }\n }\n }\n\n #previous () {\n const id = Puzzles.visible.previousId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #redo () {\n this.#state.redo()\n this.#reload()\n }\n\n #reload () {\n this.error = false\n\n if (this.#state) {\n this.#teardown()\n }\n\n this.#setup()\n\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #removeLayers () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n paper.project.clear()\n }\n\n #reset () {\n this.#state.reset()\n this.#reload()\n }\n\n #resize () {\n const { width, height } = elements.main.getBoundingClientRect()\n elements.puzzle.style.height = height + 'px'\n elements.puzzle.style.width = width + 'px'\n paper.view.viewSize = new Size(width, height)\n }\n\n #setup () {\n // Reset the item IDs, so they are unique per-puzzle\n Item.uniqueId = 0\n\n const { layout, message, solution } = this.#state.getCurrent()\n\n this.layout = new Layout(layout)\n this.message = message\n this.#solution = new Solution(solution)\n\n this.#tiles = this.layout.tiles\n this.#termini = this.layout.items.filter((item) => item.type === Item.Types.terminus)\n this.#beams = this.#termini.flatMap((terminus) => terminus.beams)\n\n this.#addLayers()\n\n document.body.classList.add(Puzzle.Events.Loaded)\n\n const selectedTileId = this.#state.getSelectedTile()\n const selectedTile = selectedTileId\n ? this.layout.getTileByOffset(new OffsetCoordinates(...selectedTileId.split(',')))\n : undefined\n\n this.updateSelectedTile(selectedTile)\n this.update()\n this.#updateActions()\n }\n\n #teardown () {\n document.body.classList.remove(...Object.values(Puzzle.Events))\n\n this.#removeLayers()\n\n this.#tiles.forEach((tile) => tile.teardown())\n this.#tiles = []\n this.#solution?.teardown()\n this.#solution = undefined\n this.solved = false\n this.layout?.teardown()\n this.layout = undefined\n this.selectedTile = undefined\n this.#beams = []\n this.#collisions = {}\n this.#isUpdatingBeams = false\n this.#mask = undefined\n this.#termini = []\n }\n\n #undo () {\n this.#state.undo()\n this.#reload()\n }\n\n #updateActions () {\n const id = this.#state.getId()\n const title = this.#state.getTitle()\n\n // Update browser title\n elements.title.textContent = `Beaming: Puzzle ${title}`\n\n removeClass('disabled', ...Array.from(document.querySelectorAll('#actions li')))\n\n const disable = []\n\n if (!this.#state.canUndo()) {\n disable.push(elements.undo)\n }\n\n if (!this.#state.canRedo()) {\n disable.push(elements.redo)\n }\n\n if (!Puzzles.visible.has(id)) {\n // Custom puzzle\n elements.puzzleId.value = ''\n disable.push(elements.previous, elements.next)\n } else {\n elements.puzzleId.value = id\n\n if (id === Puzzles.visible.firstId) {\n disable.push(elements.previous)\n } else if (id === Puzzles.visible.lastId) {\n disable.push(elements.next)\n }\n }\n\n addClass('disabled', ...disable)\n }\n\n #updateDropdown () {\n elements.puzzleId.replaceChildren()\n for (const id of Puzzles.visible.ids) {\n const option = document.createElement('option')\n option.value = id\n option.innerText = Puzzles.titles[id]\n elements.puzzleId.append(option)\n }\n }\n\n #updateBeams () {\n const beams = this.#beams.filter((beam) => beam.isPending())\n\n if (!beams.length) {\n this.#isUpdatingBeams = false\n\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(() => {\n if (this.#solution.isSolved()) {\n this.#onSolved()\n }\n }, 0)\n return\n }\n\n if (this.debug) {\n this.layers.debug.clear()\n }\n\n beams.forEach((beam) => beam.step(this))\n\n // Ensure the UI has a chance to update between loops\n setTimeout(() => this.#updateBeams(), this.#beamsUpdateDelay)\n }\n\n #updateMessage (tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items\n .map((item) => item.getColorElements(tile))\n .find((colorElements) => colorElements.length > 0) || []\n elements.message.replaceChildren(...colorElements)\n } else {\n elements.message.textContent = this.message || 'Select a tile'\n }\n }\n\n static Collision = class {\n constructor (layer, beams, point, item = undefined) {\n this.id = Puzzle.Collision.id(point)\n this.layer = layer\n this.beams = beams\n this.point = point\n this.item = item\n }\n\n addBeam (beam) {\n if (!this.beams.some((otherBeam) => otherBeam.id === beam.id)) {\n this.beams.push(beam)\n }\n\n return this.beams\n }\n\n addItem (color) {\n this.item = new CollisionItem({ center: this.point, color })\n this.layer.addChild(this.item.group)\n }\n\n equals (other) {\n return fuzzyEquals(this.point, other?.point)\n }\n\n getColor () {\n return this.beams.length\n ? chroma.average(this.beams.map((beam) => beam.getColor())).hex()\n : undefined\n }\n\n removeItem () {\n if (this.item) {\n this.item.remove()\n this.item = undefined\n }\n }\n\n update () {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam) => this.equals(beam.getCollision()))\n\n const color = this.getColor()\n\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) {\n this.removeItem()\n }\n\n // Add missing collision items\n if (this.beams.length && !this.item) {\n this.addItem(color)\n }\n }\n\n static id (point) {\n const rounded = point.round()\n return [rounded.x, rounded.y].join(',')\n }\n }\n\n static Events = Object.freeze({\n Error: 'puzzle-error',\n Loaded: 'puzzle-loaded',\n Mask: 'puzzle-mask',\n Solved: 'puzzle-solved',\n Updated: 'puzzle-updated'\n })\n\n static Mask = class {\n constructor (configuration = {}) {\n configuration.style ??= {}\n this.configuration = configuration\n\n this.id = configuration.id\n this.message = configuration.message\n this.tileFilter = configuration.tileFilter ?? noop(true)\n this.onMask = configuration.onMask ?? noop\n this.onTap = configuration.onTap ?? noop\n this.onUnmask = configuration.onUnmask ?? noop\n }\n\n equals (other) {\n return this.id === other.id\n }\n }\n\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item) => item.type === Item.Types.beam && item.isConnected()\n\n static #solvedMask = new Puzzle.Mask({\n style: (tile) => {\n const beams = tile.items.filter(Puzzle.#connectedBeams)\n const colors = beams.flatMap((beam) => beam.getSteps(tile).flatMap((step) => step.color))\n return { fillColor: chroma.average(colors).hex() }\n },\n tileFilter: (tile) => tile.items.some(Puzzle.#connectedBeams)\n })\n}\n","import paper, { Layer } from 'paper'\nimport { CubeCoordinates } from './coordinates/cube'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { Tile } from './items/tile'\nimport { getConvertedDirection } from './util'\nimport { Stateful } from './stateful'\n\nexport class Layout extends Stateful {\n #tilesByAxial = []\n #tilesByOffset = []\n\n items = []\n layers = {}\n tiles = []\n tileSize = 120\n\n constructor (state) {\n super(state)\n\n this.type = state.type || Layout.Types.oddR\n\n const center = paper.view.center\n const parameters = Tile.parameters(this.tileSize)\n const tiles = state.tiles\n\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width\n const startingOffsetY = center.y - (height / 2)\n\n this.layers.tiles = new Layer()\n this.layers.items = new Layer()\n\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index) => {\n const length = row.length\n\n // Favor offset rows, since they will be wider\n if (length > current.length || (length === current.length && this.#isOffsetRow(index))) {\n return { index, length }\n }\n\n return current\n }, { index: 0, length: 0 })\n\n const width = (widestRow.length * parameters.width) + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0)\n const startingOffsetX = center.x - (width / 2)\n\n for (let r = 0; r < tiles.length; r++) {\n const row = tiles[r]\n const rowByAxial = new Array(row.length).fill(null)\n const rowByOffset = new Array(row.length).fill(null)\n const rowOffset = Math.floor(r / 2)\n\n for (let c = 0; c < row.length; c++) {\n const axial = new CubeCoordinates(c - rowOffset, r)\n const offset = new OffsetCoordinates(r, c)\n\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY\n }\n\n const state = row[c]\n if (!state) {\n continue\n }\n\n const tile = new Tile({ axial, offset }, layout, parameters, state)\n\n this.layers.tiles.addChild(tile.group)\n\n if (tile.items.length) {\n this.items.push(...tile.items)\n this.layers.items.addChildren(tile.items.map((item) => item.group))\n }\n\n this.tiles.push(tile)\n\n rowByAxial[axial.q] = tile\n rowByOffset[offset.c] = tile\n }\n\n this.#tilesByAxial.push(rowByAxial)\n this.#tilesByOffset.push(rowByOffset)\n }\n }\n\n getTileByAxial (axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q]\n }\n\n getTileByOffset (offset) {\n return this.#tilesByOffset[offset.r][offset.c]\n }\n\n getState () {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row) => row.map((tile) => tile?.getState() || null))\n })\n }\n\n getNeighboringTile (axial, direction) {\n return this.getTileByAxial(CubeCoordinates.neighbor(axial, getConvertedDirection(direction)))\n }\n\n teardown () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n }\n\n #isOffsetRow (index) {\n return index % 2 === 0 ? this.type === Layout.Types.evenR : this.type === Layout.Types.oddR\n }\n\n static Types = Object.freeze({\n evenR: 'even-r',\n oddR: 'odd-r'\n })\n}\n","import { OffsetCoordinates } from './offset'\n\n/**\n * @see https://www.redblobgames.com/grids/hexagons/#coordinates\n */\nexport class CubeCoordinates {\n constructor (q, r, s) {\n if (!s) s = -q - r\n this.coordinates = [q, r, s]\n this.q = q\n this.r = r\n this.s = s\n }\n\n add (other) {\n return CubeCoordinates.add(this, other)\n }\n\n equals (other) {\n return this.q === other.q && this.r === other.r && this.s === other.s\n }\n\n isNeighbor (other) {\n return CubeCoordinates.isNeighbor(this, other)\n }\n\n neighbor (direction) {\n return CubeCoordinates.neighbor(this, direction)\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static add (a, b) {\n return new CubeCoordinates(a.q + b.q, a.r + b.r)\n }\n\n static direction (direction) {\n if (direction === 0) direction = 6\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return CubeCoordinates.directions[6 - direction]\n }\n\n static directions = [\n new CubeCoordinates(1, 0),\n new CubeCoordinates(1, -1),\n new CubeCoordinates(0, -1),\n new CubeCoordinates(-1, 0),\n new CubeCoordinates(-1, 1),\n new CubeCoordinates(0, 1)\n ]\n\n static isNeighbor (a, b) {\n return CubeCoordinates.directions\n .map((direction) => CubeCoordinates.add(a, direction))\n .some((neighbor) => neighbor.equals(b))\n }\n\n static neighbor (start, direction) {\n return CubeCoordinates.add(start, CubeCoordinates.direction(direction))\n }\n\n static toOffsetCoordinates (axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2\n return new OffsetCoordinates(c, axial.r)\n }\n}\n","import { CubeCoordinates } from './cube'\n\nexport class OffsetCoordinates {\n constructor (r, c) {\n this.coordinates = [r, c]\n this.r = r\n this.c = c\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static toAxialCoordinates (offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2\n return new CubeCoordinates(q, offset.r)\n }\n}\n","import { Color, Path, Point } from 'paper'\nimport { Item } from '../item'\nimport { itemFactory } from '../itemFactory'\nimport { emitEvent, getPointBetween } from '../util'\nimport { modifierFactory } from '../modifierFactory'\n\nexport class Tile extends Item {\n selected = false\n\n #ui\n\n constructor (coordinates, layout, parameters, state) {\n super(null, state, { locked: false })\n\n this.#ui = Tile.ui(layout, parameters, state, { coordinates, type: this.type })\n\n this.center = this.#ui.center\n this.coordinates = coordinates\n this.hexagon = this.#ui.hexagon\n this.parameters = parameters\n this.styles = this.#ui.styles\n\n this.group.addChildren([this.#ui.hexagon, this.#ui.indicator])\n\n // These need to be last, since they reference this\n this.items = (state.items || [])\n .map((state) => itemFactory(this, state))\n .filter((item) => item !== undefined)\n\n this.modifiers = (state.modifiers || [])\n .map((state) => modifierFactory(this, state))\n .filter((modifier) => modifier !== undefined)\n\n this.update()\n }\n\n addItem (item) {\n this.items.unshift(item)\n this.update()\n }\n\n addModifier (modifier) {\n this.modifiers.unshift(modifier)\n this.update()\n }\n\n afterModify () {\n this.setStyle(this.selected ? 'selected' : 'default')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: false }))\n }\n\n beforeModify () {\n this.group.bringToFront()\n this.setStyle('edit')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: true }))\n }\n\n getState () {\n const state = { type: this.type }\n\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item) => item.type !== Item.Types.beam).map((item) => item.getState())\n if (items.length) {\n state.items = items\n }\n\n const modifiers = this.modifiers.map((modifier) => modifier.getState())\n if (modifiers.length) {\n state.modifiers = modifiers\n }\n\n return state\n }\n\n onTap (event) {\n console.debug(this.coordinates.offset.toString(), this)\n this.items.forEach((item) => item.onTap(event))\n }\n\n onDeselected (selectedTile) {\n this.selected = false\n this.#ui.hexagon.style = this.styles.default\n this.items.forEach((item) => item.onDeselected())\n this.modifiers.forEach((modifier) => modifier.detach())\n\n emitEvent(Tile.Events.Deselected, { selectedTile, deselectedTile: this })\n }\n\n onSelected (deselectedTile) {\n this.selected = true\n this.group.bringToFront()\n this.#ui.hexagon.style = this.styles.selected\n this.items.forEach((item) => item.onSelected())\n this.modifiers.forEach((modifier) => modifier.attach())\n }\n\n removeItem (item) {\n const index = this.items.indexOf(item)\n if (index >= 0) {\n this.items.splice(index, 1)\n this.update()\n }\n }\n\n removeModifier (modifier) {\n const index = this.modifiers.indexOf(modifier)\n if (index >= 0) {\n this.modifiers.splice(index, 1)\n this.update()\n }\n }\n\n setStyle (style) {\n this.hexagon.set(this.styles[style])\n }\n\n teardown () {\n this.modifiers.forEach((modifier) => modifier.detach())\n }\n\n toString () {\n return this.coordinates.offset.toString()\n }\n\n update () {\n super.update()\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0\n }\n\n static parameters (height) {\n const circumradius = height / 2\n const width = Math.sqrt(3) * circumradius\n const inradius = width / 2\n const offsetY = height * (3 / 4)\n\n return {\n circumradius,\n height,\n inradius,\n offsetY,\n width\n }\n }\n\n static ui (layout, parameters, configuration, data) {\n const center = new Point(\n layout.startingOffsetX + parameters.inradius + layout.column * parameters.width,\n layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY\n )\n\n const dashWidth = parameters.circumradius / 10\n\n const styles = Object.assign(\n {},\n Tile.Styles,\n {\n edit: Object.assign({ dashArray: [dashWidth, dashWidth] }, Tile.Styles.edit)\n },\n configuration.style || {}\n )\n\n const hexagon = new Path.RegularPolygon({\n center,\n closed: true,\n data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n })\n\n const indicator = new Path.RegularPolygon({\n center: getPointBetween(hexagon.segments[1].point, center, (length) => length / 3),\n data: { collidable: false },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: { fillColor: '#ccc' }\n })\n\n return { center, hexagon, indicator, styles }\n }\n\n static Events = Object.freeze({\n Deselected: 'tile-deselected',\n Selected: 'tile-selected'\n })\n\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new Color('white'),\n strokeColor: new Color('#666'),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new Color('black'),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new Color('black'),\n strokeWidth: 2\n }\n })\n}\n","import { capitalize } from './util'\nimport { CompoundPath, Group } from 'paper'\nimport { Stateful } from './stateful'\n\nexport class Item extends Stateful {\n center\n data\n group\n id = Item.uniqueId++\n // Whether the item can be clicked on\n locked\n parent\n sortOrder = 100\n type\n\n constructor (parent, state, configuration) {\n super(state)\n\n this.type = state?.type || configuration?.type\n this.data = Object.assign({ id: this.id, type: this.type }, configuration?.data || {})\n this.locked = configuration?.locked !== false\n\n if (parent) {\n this.center = parent.center\n }\n\n this.parent = parent\n this.group = new Group({ data: this.data, locked: this.locked })\n }\n\n equals (otherItem) {\n return otherItem instanceof Item && this.id === otherItem.id\n }\n\n getColorElements () {\n return []\n }\n\n getCompoundPath () {\n return new CompoundPath({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({ insert: false }).children\n .filter((child) => child.data.collidable !== false)\n })\n }\n\n getIndex () {\n return this.group.index\n }\n\n getLayer () {\n return this.group.parent\n }\n\n onTap () {}\n\n onCollision ({ collisionStep }) {\n return collisionStep\n }\n\n onDeselected () { }\n\n onInitialization () {}\n\n onSelected () {}\n\n remove () {\n this.group.remove()\n }\n\n toString () {\n return `[${this.type}:${this.id}]`\n }\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'beam',\n 'collision',\n 'filter',\n 'mask',\n 'portal',\n 'reflector',\n 'terminus',\n 'tile',\n 'wall'\n ].map((type) => [type, capitalize(type)])))\n\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0\n}\n","import { emitEvent } from './util'\n\nexport class Stateful {\n #state = {}\n\n constructor (state) {\n this.setState(state)\n }\n\n getState () {\n return structuredClone(this.#state)\n }\n\n setState (state) {\n this.#state = structuredClone(state)\n }\n\n updateState (updater, dispatchEvent = true) {\n updater(this.#state)\n\n if (dispatchEvent) {\n emitEvent(Stateful.Events.Update, { object: this })\n }\n\n return this.getState()\n }\n\n static Events = Object.freeze({\n Update: 'state-update'\n })\n}\n","import { Filter } from './items/filter'\nimport { Portal } from './items/portal'\nimport { Terminus } from './items/terminus'\nimport { Reflector } from './items/reflector'\nimport { Wall } from './items/wall'\nimport { Item } from './item'\n\nexport function itemFactory (parent, configuration) {\n let item\n\n switch (configuration.type) {\n case Item.Types.filter:\n item = new Filter(parent, configuration)\n break\n case Item.Types.portal:\n item = new Portal(parent, configuration)\n break\n case Item.Types.terminus:\n item = new Terminus(parent, configuration)\n break\n case Item.Types.reflector:\n item = new Reflector(parent, configuration)\n break\n case Item.Types.wall:\n item = new Wall(parent, configuration)\n break\n default:\n console.error('Ignoring item with unknown type:', configuration.type)\n break\n }\n\n if (item) {\n item.onInitialization()\n }\n\n return item\n}\n","import chroma from 'chroma-js'\nimport { Item } from '../item'\nimport { Color, Path } from 'paper'\nimport { movable } from '../modifiers/move'\nimport { getColorElement } from '../util'\nimport { StepState } from '../step'\n\nexport class Filter extends movable(Item) {\n constructor (tile, { color }) {\n super(...arguments)\n\n this.color = chroma.average(Array.isArray(color) ? color : [color]).hex()\n\n const fillColor = new Color(color)\n fillColor.alpha = 0.25\n\n // TODO: update to something else? prism?\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n\n getColorElements () {\n return [getColorElement(this.color)]\n }\n\n onCollision ({ currentStep, nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(\n currentStep.state.has(StepState.Filter)\n ? { colors: nextStep.colors.concat([this.color]) }\n : { state: new StepState({ insertAbove: this }, new StepState.Filter()) }\n )\n }\n}\n","import { Modifier } from '../modifier'\nimport { Puzzle } from '../puzzle'\nimport { emitEvent } from '../util'\nimport { Item } from '../item'\n\nexport class Move extends Modifier {\n #mask\n\n name = 'drag_pan'\n title = 'Move'\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter(Move.movable)\n if (this.#mask || !items.length) {\n return\n }\n\n const mask = new Puzzle.Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: () => this.tile.beforeModify(),\n onUnmask: () => this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n })\n\n this.#mask = mask\n\n emitEvent(Puzzle.Events.Mask, { mask })\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.movable)\n }\n\n moveItems (tile) {\n const items = this.tile.items.filter(Move.movable)\n items.forEach((item) => item.move(tile))\n return {\n moved: [Move.data(this.tile, tile, items)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some(Modifier.immutable) ||\n (tile.items.filter((item) => item.type !== Item.Types.beam).length > 0 && !(tile === this.tile))\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Invoked, data)\n } else {\n puzzle.unmask()\n }\n\n this.#mask = undefined\n }\n\n static data (fromTile, toTile, items) {\n return { fromTile, toTile, items }\n }\n\n static movable (item) {\n return item.movable\n }\n}\n\n/**\n * Move an item from one tile to another.\n * @param SuperClass\n * @returns {{new(*, *): MovableItem, movable: boolean, prototype: MovableItem}}\n */\nexport const movable = (SuperClass) => class MovableItem extends SuperClass {\n movable\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.movable = configuration.movable !== false\n }\n\n move (tile) {\n this.parent.removeItem(this)\n\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center)\n this.group.position = this.group.position.subtract(vector)\n\n // Update tile reference\n this.parent = tile\n this.parent.addItem(this)\n this.center = this.parent.center\n\n this.onMove()\n }\n\n onMove () {}\n}\n","import { capitalize, emitEvent } from './util'\nimport { Puzzle } from './puzzle'\nimport { Stateful } from './stateful'\nimport { EventListeners } from './eventListeners'\nimport { Interact } from './interact'\n\nconst modifiersImmutable = document.getElementById('modifiers-immutable')\nconst modifiersMutable = document.getElementById('modifiers-mutable')\nconst navigator = window.navigator\n\nlet uniqueId = 0\n\nexport class Modifier extends Stateful {\n #container\n #down = false\n #eventListener = new EventListeners({ context: this })\n #mask\n #selectionTime = 500\n #timeoutId\n\n configuration\n element\n disabled = false\n id = uniqueId++\n immutable = false\n name\n selected = false\n tile\n title\n type\n\n constructor (tile, state) {\n super(state)\n\n this.tile = tile\n this.type = state.type\n }\n\n /**\n * Attach the modifier to the DOM and add listeners.\n */\n attach () {\n const li = this.#container = document.createElement('li')\n\n li.classList.add(['modifier', this.type.toLowerCase()].join('-'))\n\n if (this.immutable) {\n this.disabled = true\n }\n\n const span = this.element = document.createElement('span')\n\n span.classList.add('material-symbols-outlined', 'fill')\n\n li.append(span)\n\n this.update()\n\n this.#eventListener.add([\n { type: 'deselected', handler: this.onDeselected },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp }\n ], { element: li })\n\n this.immutable ? modifiersImmutable.append(li) : modifiersMutable.append(li)\n }\n\n /**\n * Remove listeners and the modifier from the DOM.\n */\n detach () {\n if (!this.#container) {\n return\n }\n\n Modifier.deselect()\n\n this.#eventListener.remove()\n this.#container.remove()\n\n this.selected = false\n this.element = undefined\n this.#container = undefined\n }\n\n dispatchEvent (event, detail) {\n emitEvent(event, Object.assign({}, detail || {}, { modifier: this, tile: this.tile }))\n }\n\n equals (other) {\n return other instanceof Modifier && this.id === other.id\n }\n\n move (tile) {\n this.remove()\n tile.addModifier(this)\n this.tile = tile\n }\n\n moveFilter (tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier) => modifier.type === Modifier.Types.immutable)\n }\n\n onDeselected () {\n this.update({ selected: false })\n this.tile.afterModify()\n this.dispatchEvent(Modifier.Events.Deselected)\n }\n\n onPointerDown (event) {\n if (event.button !== 0) {\n // Support toggle on non-primary pointer button\n this.onToggle(event)\n } else {\n this.#down = true\n if (\n !this.#mask &&\n !this.tile.modifiers.some((modifier) => [Modifier.Types.immutable, Modifier.Types.lock].includes(modifier.type))\n ) {\n this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime)\n }\n }\n }\n\n onPointerUp (event) {\n clearTimeout(this.#timeoutId)\n\n if (this.#down && !this.disabled && !this.selected) {\n switch (event.type) {\n case 'pointerleave': {\n // Support swiping up on pointer device\n this.onToggle(event)\n break\n }\n case 'pointerup': {\n this.onTap(event)\n break\n }\n }\n }\n\n this.#down = false\n }\n\n onSelected () {\n Modifier.deselect()\n\n navigator.vibrate(Interact.vibratePattern)\n\n this.update({ selected: true })\n\n const mask = this.#mask = new Puzzle.Mask({\n id: this.toString(),\n onMask: () => this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n })\n\n this.dispatchEvent(Puzzle.Events.Mask, { mask })\n }\n\n onTap () {\n this.selected = false\n }\n\n onToggle () {\n navigator.vibrate(Interact.vibratePattern)\n }\n\n remove () {\n this.detach()\n this.tile.removeModifier(this)\n this.tile = null\n }\n\n toString () {\n return [this.name, this.id].join(':')\n }\n\n update (options) {\n options = Object.assign(\n { disabled: this.disabled, selected: this.selected, name: this.name, title: this.title },\n options || {}\n )\n\n if (!this.immutable) {\n this.disabled = options.disabled\n }\n\n this.name = options.name\n this.title = options.title\n this.selected = options.selected\n\n if (this.#container) {\n this.#container.classList.toggle('disabled', this.disabled)\n this.#container.classList.toggle('selected', this.selected)\n this.element.textContent = this.name\n this.element.title = this.title\n }\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile\n\n this.move(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Moved, { fromTile })\n } else {\n Modifier.deselect()\n puzzle.unmask()\n }\n\n this.#mask = undefined\n this.update({ selected: false })\n }\n\n #moveFilter (tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile)\n }\n\n static deselect () {\n const selectedModifier = document.querySelector('.modifiers .selected')\n if (selectedModifier) {\n selectedModifier.dispatchEvent(new CustomEvent('deselected'))\n }\n }\n\n static immutable (modifier) {\n return modifier.type === Modifier.Types.immutable\n }\n\n static Events = Object.freeze({\n Deselected: 'modifier-deselected',\n Invoked: 'modifier-invoked',\n Moved: 'modifier-moved'\n })\n\n static Types = Object.freeze(Object.fromEntries([\n 'immutable',\n 'lock',\n 'move',\n 'rotate',\n 'swap',\n 'toggle'\n ].map((type) => [type, capitalize(type)])))\n}\n","export class EventListeners {\n #events = []\n #options = { element: document }\n\n constructor (options = {}) {\n this.#options = Object.assign(this.#options, options)\n }\n\n add (events, options = {}) {\n this.#events = this.#events.concat(events.map((event) => {\n event = Object.assign({}, this.#options, options, event)\n if (!event.type) {\n throw new Error('Event type is required')\n }\n if (event.context) {\n event.handler = event.handler.bind(event.context)\n }\n event.element.addEventListener(event.type, event.handler, event.options)\n return event\n }))\n }\n\n remove () {\n this.#events.forEach((event) => event.element.removeEventListener(event.type, event.handler))\n this.#events = []\n }\n}\n","import paper, { Point } from 'paper'\nimport { Cache } from './cache'\nimport { EventListeners } from './eventListeners'\n\nexport class Interact {\n #bounds\n #cache = new Cache(Object.values(Interact.CacheKeys))\n #element\n #eventListener = new EventListeners({ context: this })\n #offset\n\n constructor (element) {\n this.#bounds = element.getBoundingClientRect()\n this.#element = element\n this.#offset = new Point(this.#bounds.left, this.#bounds.top)\n this.#eventListener.add([\n { type: 'pointercancel', handler: this.onPointerUp },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointermove', handler: this.onPointerMove },\n { type: 'pointerout', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp },\n { type: 'wheel', handler: this.onMouseWheel, options: { passive: false } }\n ], { element })\n }\n\n onMouseWheel (event) {\n event.preventDefault()\n this.#zoom(new Point(event.offsetX, event.offsetY), event.deltaY, 1.05)\n }\n\n onPan (event) {\n const point = paper.view.viewToProject(Interact.point(event))\n const pan = this.#getGesture(Interact.GestureKeys.Pan)\n\n if (!pan) {\n this.#setGesture(Interact.GestureKeys.Pan, { from: point })\n return\n }\n\n const center = pan.from.subtract(point).add(paper.view.center)\n\n // Allow a little wiggle room to prevent panning on tap\n if (paper.view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains('grab')) {\n document.body.classList.add('grab')\n }\n\n // Center on the cursor\n paper.view.center = center\n }\n }\n\n onPinch (events) {\n const pointer0 = events[0]\n const pointer1 = events[1]\n\n const point0 = Interact.point(pointer0)\n const point1 = Interact.point(pointer1)\n const distance = point0.getDistance(point1)\n\n const pinch = this.#getGesture(Interact.GestureKeys.Pinch)\n if (!pinch) {\n this.#setGesture(Interact.GestureKeys.Pinch, { distance })\n return\n }\n\n const center = point0.add(point1).divide(2).subtract(this.#offset)\n const scale = distance / pinch.distance\n const delta = (pinch.distance - distance) * scale\n\n this.#zoom(center, delta, 1.01)\n\n pinch.distance = distance\n }\n\n onPointerDown (event) {\n this.#cache.get(Interact.CacheKeys.Down).set(event.pointerId, event)\n }\n\n onPointerMove (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n // Ignore events until there is a pointer down event\n return\n }\n\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = Interact.point(event).subtract(Interact.point(down)).length\n if (diff > 1) {\n this.#cache.get(Interact.CacheKeys.Move).set(event.pointerId, event)\n\n const events = this.#cache.get(Interact.CacheKeys.Move).values()\n if (events.length === 2) {\n this.onPinch(events)\n } else {\n this.onPan(event)\n }\n }\n }\n\n onPointerUp (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n return\n }\n\n if (\n this.#cache.length(Interact.CacheKeys.Down) === 1 &&\n !this.#cache.get(Interact.CacheKeys.Move).get(event.pointerId)\n ) {\n this.onTap(down)\n }\n\n document.body.classList.remove('grab')\n\n this.#cache.get(Interact.CacheKeys.Down).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Move).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pan)\n\n if (this.#cache.length(Interact.CacheKeys.Move) < 2) {\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pinch)\n }\n }\n\n onTap (event) {\n const point = paper.view.viewToProject(Interact.point(event).subtract(this.#offset))\n this.#element.dispatchEvent(new CustomEvent(Interact.GestureKeys.Tap, { detail: { event, point } }))\n }\n\n #getGesture (key) {\n return this.#cache.get(Interact.CacheKeys.Gesture).get(key)\n }\n\n #setGesture (key, value) {\n this.#cache.get(Interact.CacheKeys.Gesture).set(key, value)\n }\n\n #zoom (point, delta, factor) {\n const zoom = Math.max(\n Math.min(\n delta < 0 ? paper.view.zoom * factor : paper.view.zoom / factor,\n Interact.maxZoom\n ),\n Interact.minZoom\n )\n\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = paper.view.viewToProject(point)\n const touchOffset = touchPoint.subtract(paper.view.center)\n\n // Adjust center towards cursor location\n const zoomOffset = touchPoint\n .subtract(touchOffset.multiply(paper.view.zoom / zoom))\n .subtract(paper.view.center)\n\n paper.view.zoom = zoom\n paper.view.center = paper.view.center.add(zoomOffset)\n }\n\n static point (event) {\n return new Point(event.clientX, event.clientY)\n }\n\n static CacheKeys = Object.freeze({\n Down: 'down',\n Move: 'move',\n Gesture: 'gesture'\n })\n\n static GestureKeys = Object.freeze({\n Pan: 'pan',\n Pinch: 'pinch',\n Tap: 'tap'\n })\n\n static maxZoom = 2\n static minZoom = 0.5\n static vibratePattern = 25\n}\n","export class Cache {\n #cache = {}\n #hasKeys\n #keys\n\n constructor (keys = []) {\n this.#keys = keys\n this.#hasKeys = keys.length !== 0\n\n keys.forEach((key) => { this.#cache[key] = new Cache() })\n }\n\n set (key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) {\n throw new Error(`Invalid key: ${key}`)\n }\n\n this.#cache[key] = item\n }\n\n get (key) {\n return key === undefined ? this.#cache : this.#cache[key]\n }\n\n keys (key) {\n return Object.keys(this.#get(key))\n }\n\n length (key) {\n return this.keys(key).length\n }\n\n unset (key) {\n delete this.#cache[key]\n }\n\n values (key) {\n return Object.values(this.#get(key))\n }\n\n #get (key) {\n const value = this.get(key)\n return value instanceof Cache ? value.get() : value\n }\n}\n","import chroma from 'chroma-js'\nimport { deepEqual, noop } from './util'\n\nexport class Step {\n color\n colors\n connected\n direction\n done\n insertAbove\n onAdd\n onRemove\n point\n pathIndex\n segmentIndex\n state\n tile\n\n constructor (\n index,\n tile,\n colors,\n direction,\n point,\n pathIndex,\n segmentIndex,\n connected,\n insertAbove,\n done,\n state,\n onAdd,\n onRemove\n ) {\n if (state && !(state instanceof StepState)) {\n throw new Error('Step.state must be instance of StepState')\n }\n\n this.colors = colors ? (Array.isArray(colors) ? Array.from(colors) : [colors]) : []\n\n if (this.colors.length) {\n this.color = chroma.average(this.colors).hex()\n }\n\n this.connected = connected ?? true\n this.direction = direction\n this.done = done ?? false\n this.index = index\n this.insertAbove = insertAbove\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? noop\n this.onRemove = onRemove ?? noop\n this.point = point\n this.pathIndex = pathIndex\n this.segmentIndex = segmentIndex\n this.state = state ?? new StepState()\n this.tile = tile\n }\n\n copy (settings) {\n return new Step(\n settings.index ?? this.index,\n settings.tile ?? this.tile,\n settings.colors ?? settings.color ?? this.colors,\n settings.direction ?? this.direction,\n settings.point ?? this.point,\n settings.pathIndex ?? this.pathIndex,\n settings.segmentIndex ?? this.segmentIndex,\n settings.connected ?? this.connected,\n settings.insertAbove ?? this.insertAbove,\n settings.done ?? this.done,\n settings.state ?? new StepState(this.state),\n settings.onAdd ?? this.onAdd,\n settings.onRemove ?? this.onRemove\n )\n }\n\n equals (step) {\n return deepEqual(this, step)\n }\n}\n\nexport class StepState {\n #cache = {}\n\n constructor () {\n const settings = Object.assign({}, ...arguments)\n Object.keys(settings).forEach((key) => { this[key] = settings[key] })\n }\n\n copy (...settings) {\n return new StepState(...([this].concat(settings)))\n }\n\n get (Class) {\n return this.#keys(Class).map((key) => this[key]).find((value) => value)\n }\n\n has (Class) {\n return this.#keys(Class).some((key) => this[key])\n }\n\n #keys (Class) {\n return (this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, [])))\n }\n\n static Collision = class StepCollision {\n collision\n\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor (collision) {\n this.collision = collision\n }\n }\n\n static Filter = class StepFilter {\n filter = {}\n }\n\n static MergeInto = class StepMergeInto {\n mergeInto\n\n constructor (beam) {\n this.mergeInto = { beam }\n }\n }\n\n static MergeWith = class StepMergeWith {\n mergeWith\n\n constructor (mergeWith) {\n this.mergeWith = mergeWith\n }\n }\n\n static Portal = class StepPortal {\n portal\n\n constructor (entryPortal, exitPortal) {\n this.portal = { entryPortal, exitPortal }\n }\n }\n\n static Reflector = class StepReflector {\n reflector\n\n constructor (item) {\n this.reflector = { item }\n }\n }\n\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection\n\n constructor (terminus, opening) {\n this.terminusConnection = { terminus, opening }\n }\n }\n}\n","import { movable } from '../modifiers/move'\nimport { Item } from '../item'\nimport { Path, Point } from 'paper'\nimport { rotatable } from '../modifiers/rotate'\nimport { StepState } from '../step'\nimport { Puzzle } from '../puzzle'\nimport { coalesce, getOppositeDirection } from '../util'\n\nexport class Portal extends movable(rotatable(Item)) {\n #directions = {}\n\n constructor (tile, state) {\n // Only allow rotation if direction is defined\n super(tile, state, { rotatable: state.direction !== undefined })\n\n this.direction = state.direction\n\n const height = tile.parameters.circumradius / 3\n const width = tile.parameters.circumradius / 5\n\n const style = {\n fillColor: 'black',\n strokeColor: 'white',\n strokeWidth: 2\n }\n\n const children = []\n\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new Path.Ellipse({\n center: tile.center,\n radius: [width, height],\n style\n })\n\n children.push(ellipse)\n\n const ring = new Path.Ellipse({\n center: tile.center,\n radius: [width - style.strokeWidth * 2, height - style.strokeWidth * 2],\n style\n })\n\n children.push(ring)\n\n if (this.rotatable) {\n const pointer = new Path({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new Point(0, height)),\n tile.center.subtract(new Point(0, height)),\n tile.center.subtract(new Point(width * 2.5, 0))\n ],\n style: {\n fillColor: 'black'\n }\n }).subtract(ellipse)\n\n children.unshift(pointer)\n }\n\n this.group.addChildren(children)\n\n if (this.rotatable) {\n // Properly align items with hexagonal rotation\n this.rotateGroup(1)\n }\n }\n\n get (direction) {\n return this.#directions[direction]\n }\n\n onCollision ({ beam, currentStep, nextStep, puzzle }) {\n const portalState = currentStep.state.get(StepState.Portal)\n if (!portalState) {\n const stepIndex = nextStep.index\n const entryDirection = getOppositeDirection(nextStep.direction)\n const existing = coalesce(this.get(entryDirection), { stepIndex })\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(\n this.toString(),\n 'ignoring beam trying to enter through a direction which is already occupied:',\n entryDirection\n )\n return\n }\n\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: () => this.update(entryDirection, { stepIndex }),\n onRemove: () => this.update(entryDirection),\n state: nextStep.state.copy(new StepState.Portal(this))\n })\n } else if (portalState.exitPortal === this) {\n // Handle exit collision\n return nextStep.copy({ insertAbove: this })\n }\n\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [this.id, nextStep.index].join(':')\n const destinationId = beam.getState().moves?.[stateId]\n\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item) =>\n item.type === Item.Types.portal &&\n !item.equals(this) &&\n // Portal must not already have a beam occupying the desired direction\n !item.get(Portal.getExitDirection(nextStep, portalState.entryPortal, item)) &&\n (destinationId === undefined || item.id === destinationId) &&\n (\n // Entry portals without defined direction can exit from any other portal.\n this.getDirection() === undefined ||\n // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined ||\n // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()\n )\n )\n\n if (destinations.length === 0) {\n console.debug(this.toString(), 'no valid destinations found')\n // This will cause the beam to stop\n return currentStep\n }\n\n if (destinations.length === 1) {\n // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState)\n } else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal) => portal.parent)\n const mask = new Puzzle.Mask(\n {\n beam,\n id: stateId,\n onMask: () => currentStep.tile.beforeModify(),\n onTap: (puzzle, tile) => {\n const destination = destinations.find((portal) => portal.parent === tile)\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState))\n beam.updateState((state) => {\n if (!state.moves) {\n state.moves = {}\n }\n // Store this decision in beam state\n state.moves[stateId] = destination.id\n })\n puzzle.unmask()\n }\n },\n onUnmask: () => currentStep.tile.afterModify(),\n tileFilter: (tile) => {\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile) => destinationTile === tile))\n }\n }\n )\n\n puzzle.updateSelectedTile(currentStep.tile)\n puzzle.mask(mask)\n\n // This will cause the beam to stop\n return currentStep\n }\n }\n\n update (direction, data) {\n this.#directions[direction] = data\n }\n\n #getStep (beam, portal, nextStep, portalState) {\n const direction = Portal.getExitDirection(nextStep, portalState.entryPortal, portal)\n const stepIndex = nextStep.index\n return nextStep.copy({\n connected: false,\n direction,\n insertAbove: portal,\n onAdd: () => portal.update(direction, { stepIndex }),\n onRemove: () => portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new StepState.Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n })\n }\n\n static getExitDirection (step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction\n }\n}\n","import { Modifier } from '../modifier'\nimport { addDirection, coalesce } from '../util'\n\nexport class Rotate extends Modifier {\n clockwise\n title = 'Rotate'\n\n constructor (tile, state, configuration = {}) {\n super(...arguments)\n\n this.clockwise = coalesce(true, state.clockwise, configuration.clockwise)\n this.name = Rotate.Names[this.clockwise ? 'right' : 'left']\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.rotatable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter((item) => item.rotatable)\n items.forEach((item) => item.rotate(this.clockwise))\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n onToggle () {\n super.onToggle()\n\n this.clockwise = !this.clockwise\n this.updateState((state) => { state.clockwise = this.clockwise })\n this.update({ name: Rotate.Names[this.clockwise ? 'right' : 'left'] })\n }\n\n static Names = Object.freeze({ left: 'rotate_left', right: 'rotate_right ' })\n}\n\n/**\n * A mixin for Item which provides rotate behaviors.\n */\nexport const rotatable = (SuperClass) => class RotatableItem extends SuperClass {\n direction\n\n rotatable\n rotation = 0\n rotationDegrees\n\n constructor (parent, state, configuration = {}) {\n super(...arguments)\n\n this.direction = coalesce(state.direction, configuration.direction)\n this.rotatable = coalesce(true, state.rotatable, configuration.rotatable)\n this.rotationDegrees = coalesce(60, state.rotationDegrees, configuration.rotationDegrees)\n this.rotation = coalesce(0, state.rotation, configuration.rotation) % this.getMaxRotation()\n }\n\n // Get the direction of an item with rotation factored in\n getDirection (direction) {\n direction = direction ?? this.direction\n return direction === undefined\n ? direction\n : addDirection(direction, this.rotation)\n }\n\n getMaxRotation () {\n return (360 / this.rotationDegrees)\n }\n\n onInitialization () {\n super.onInitialization()\n\n this.rotateGroup(this.rotation)\n\n if (this.direction !== undefined) {\n // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction)\n }\n }\n\n rotateGroup (rotation) {\n if (this.rotatable) {\n this.group.rotate(rotation * this.rotationDegrees, this.center)\n }\n }\n\n rotate (clockwise) {\n const rotation = clockwise === false ? -1 : 1\n\n this.rotation = (rotation + this.rotation) % this.getMaxRotation()\n\n this.updateState((state) => { state.rotation = this.rotation })\n this.rotateGroup(rotation)\n }\n}\n","import chroma from 'chroma-js'\nimport { Path } from 'paper'\nimport { toggleable } from '../modifiers/toggle'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getColorElements, emitEvent, getOppositeDirection, addDirection, subtractDirection } from '../util'\nimport { Beam } from './beam'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Terminus extends movable(rotatable(toggleable(Item))) {\n sortOrder = 2\n\n #ui\n\n constructor (tile, state) {\n super(...arguments)\n\n const colors = state.openings.filter((opening) => opening?.color)\n .flatMap((opening) => Array.isArray(opening.color) ? opening.color : [opening.color])\n const color = chroma.average(\n colors.length ? colors : (Array.isArray(state.color) ? state.color : [state.color])\n ).hex()\n\n const openings = state.openings.map((state, direction) =>\n state\n ? new Terminus.#Opening(\n state.color || color,\n direction,\n state.connected,\n state.on\n )\n : state\n ).filter((opening) => opening)\n\n this.#ui = Terminus.ui(tile, color, openings)\n\n this.group.addChildren([...this.#ui.openings, this.#ui.terminus])\n\n this.color = color\n this.openings = openings\n this.radius = this.#ui.radius\n\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening) => new Beam(this, state.openings[opening.direction], opening))\n\n this.update()\n }\n\n getColorElements () {\n return getColorElements(this.openings.map((opening) => opening.color))\n }\n\n getOpening (direction) {\n return this.openings.find((opening) => opening.direction === direction)\n }\n\n onMove () {\n this.beams.forEach((beam) => beam.remove())\n }\n\n onCollision ({ beam, collisionStep, currentStep, existingNextStep, nextStep }) {\n console.debug(this.toString(), 'collision', beam.toString())\n\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), 'ignoring starting terminus collision')\n return\n }\n\n const directionFrom = getOppositeDirection(currentStep.direction)\n\n // Take rotation of terminus into account\n const opening = this.openings.find((opening) => this.getDirection(opening.direction) === directionFrom)\n if (\n opening && opening.color === nextStep.color && (\n !opening.on ||\n // When re-evaluating history of an already connected opening\n (opening.connected && existingNextStep?.state.get(StepState.TerminusConnection)?.terminus.equals(this))\n )\n ) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), 'terminus connection', this.toString(), opening)\n return nextStep.copy({\n done: true,\n onAdd: () => {\n nextStep.onAdd()\n this.onConnection(opening.direction)\n },\n onRemove: () => {\n nextStep.onRemove()\n this.onDisconnection(opening.direction)\n },\n state: nextStep.state.copy(new StepState.TerminusConnection(this, opening))\n })\n }\n\n // Otherwise, treat this as a collision\n return collisionStep\n }\n\n onConnection (direction) {\n const opening = this.getOpening(direction)\n\n if (opening.connected) {\n // Already connected\n return\n }\n\n opening.connect()\n this.update()\n\n emitEvent(Terminus.Events.Connection, { terminus: this, opening })\n }\n\n onDisconnection (direction) {\n const opening = this.getOpening(direction)\n\n if (!opening.connected) {\n // Already disconnected\n return\n }\n\n opening.disconnect()\n this.update()\n\n emitEvent(Terminus.Events.Disconnection, { terminus: this, opening })\n }\n\n onToggle () {\n this.updateState((state) => {\n this.openings.filter((opening) => !opening.connected).forEach((opening) => {\n opening.toggle()\n state.openings[opening.direction].on = opening.on\n })\n })\n this.update()\n }\n\n update () {\n this.beams.forEach((beam) => {\n const opening = beam.getOpening()\n const item = this.#ui.openings.find((item) => item.data.direction === opening.direction)\n item.opacity = opening.on ? 1 : Terminus.#openingOffOpacity\n })\n }\n\n static #openingOffOpacity = 0.3\n\n static ui (tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2\n\n const terminus = new Path.RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n })\n\n const openings = configuration.map((opening) => {\n const direction = opening.direction\n\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[subtractDirection(direction, 1)].point\n const p2 = terminus.segments[addDirection(direction, 2)].point\n\n const vector = p2.subtract(p1)\n\n vector.angle += 120\n\n const p3 = p1.subtract(vector)\n\n return new Path({\n closed: true,\n data: { collidable: false, direction },\n fillColor: opening.color,\n opacity: opening.on ? 1 : Terminus.#openingOffOpacity,\n segments: [p1, p2, p3]\n })\n })\n\n return { openings, radius, terminus }\n }\n\n static #Opening = class {\n constructor (color, direction, connected, on) {\n this.colors = Array.isArray(color) ? color : [color]\n this.color = chroma.average(this.colors).hex()\n this.direction = direction\n this.connected = connected === true\n this.on = on === true\n }\n\n connect () {\n this.connected = this.on = true\n }\n\n disconnect () {\n this.connected = this.on = false\n }\n\n toggle () {\n this.on = !this.on\n }\n }\n\n static Events = Object.freeze({\n Connection: 'terminus-connection',\n Disconnection: 'terminus-disconnection'\n })\n}\n","import { Modifier } from '../modifier'\n\nexport class Toggle extends Modifier {\n on\n title = 'Toggle'\n\n constructor (tile, { on }) {\n super(...arguments)\n\n this.on = on || false\n\n this.tile.items.forEach((item) => {\n item.toggled = this.on\n })\n }\n\n attach () {\n this.name = Toggle.Names[this.on ? 'on' : 'off']\n super.attach()\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.toggleable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n this.on = !this.on\n\n const items = this.tile.items.filter((item) => item.toggleable)\n items.forEach((item) => item.toggle(this.on))\n\n this.update({ name: Toggle.Names[this.on ? 'on' : 'off'] })\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n static Names = Object.freeze({ on: 'toggle_on', off: 'toggle_off ' })\n}\n\n/**\n * A mixin for Item which provides toggle behaviors.\n *\n * @param SuperClass\n * @returns {{new(*, *): ToggleableItem, toggled: *, prototype: ToggleableItem}}\n * @constructor\n */\nexport const toggleable = (SuperClass) => class ToggleableItem extends SuperClass {\n toggleable\n toggled\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.toggleable = configuration.toggleable !== false\n }\n\n onToggle () {}\n\n toggle (toggled) {\n this.toggled = toggled\n this.onToggle()\n }\n}\n","import chroma from 'chroma-js'\nimport { CompoundPath, Path } from 'paper'\nimport { Item } from '../item'\nimport {\n getColorElements,\n emitEvent,\n fuzzyEquals,\n getPointBetween,\n getDistance,\n getOppositeDirection,\n uniqueBy, getPointFrom\n} from '../util'\nimport { Step, StepState } from '../step'\nimport { Collision, CollisionMergeWith } from '../collision'\nimport { Cache } from '../cache'\n\nexport class Beam extends Item {\n done = false\n path = []\n sortOrder = 3\n\n #cache = new Cache(Object.values(Beam.CacheKeys))\n #direction\n #path\n #stepIndex = -1\n #steps = []\n\n constructor (terminus, state, configuration) {\n super(...arguments)\n\n this.group = null\n this.#direction = configuration.direction\n\n this.#path = {\n closed: false,\n data: { id: this.id, type: this.type },\n locked: true,\n strokeJoin: 'round',\n strokeCap: 'round',\n strokeWidth: terminus.radius / 12\n }\n }\n\n addStep (step) {\n const lastStepIndex = this.getLastStepIndex()\n\n // Can't be done if adding a new step\n this.done = false\n\n this.#path.strokeColor = step.color\n\n if (this.path.length === 0) {\n const path = new Path(this.#path)\n this.path.push(path)\n this.getLayer().insertChild(0, path)\n }\n\n const currentPath = this.path[this.path.length - 1]\n const previousStep = this.#steps[lastStepIndex]\n\n // Handles cases that require adding a new path item\n if (\n !step.connected || (\n previousStep && (\n step.color !== previousStep.color ||\n step.insertAbove !== previousStep.insertAbove\n )\n )\n ) {\n console.debug(this.toString(), 'adding new path item for step:', step, 'previous step:', previousStep)\n\n const path = new Path(this.#path)\n const points = [step.point]\n\n // If the next step is connected, we will link it with the previous step\n if (step.connected) {\n points.unshift(previousStep.point)\n }\n\n path.add(...points)\n this.path.push(path)\n\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path)\n\n // Reset the segmentIndex\n step.segmentIndex = 0\n } else {\n currentPath.add(step.point)\n step.segmentIndex = currentPath.segments.length - 1\n }\n\n step.pathIndex = this.path.length - 1\n\n this.#steps.push(step)\n\n step.index = this.#stepIndex = this.#steps.length - 1\n\n if (!step.tile.items.some((item) => item.equals(this))) {\n // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this)\n }\n\n step.onAdd(step)\n\n console.debug(this.toString(), 'added step', step)\n\n this.#onUpdate(this.#stepIndex)\n\n return step\n }\n\n getCollision () {\n return this.getStep()?.state.get(StepState.Collision)\n }\n\n getColor () {\n return this.getStep()?.color || this.getOpening().color\n }\n\n getColors () {\n return Array.from(this.getStep()?.colors || this.getOpening().colors)\n }\n\n getColorElements (tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step) => step.state.has(StepState.MergeWith))\n return step ? getColorElements(step.color) : []\n }\n\n getCompoundPath () {\n return new CompoundPath({ children: this.path.map((item) => item.clone({ insert: false })) })\n }\n\n getIndex () {\n return this.path[this.path.length - 1].index\n }\n\n getLastStepIndex () {\n return this.length() - 1\n }\n\n getLayer () {\n return this.parent.getLayer()\n }\n\n getMergeWith (beam) {\n return this.#cache.get(Beam.CacheKeys.MergeWith).get(beam.id)\n }\n\n getOpening () {\n return this.parent.getOpening(this.#direction)\n }\n\n getState () {\n return this.parent.getState().openings[this.#direction]\n }\n\n getStep (stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()]\n }\n\n getSteps (tile) {\n return tile ? this.#steps.filter((step) => step.tile === tile) : this.#steps\n }\n\n isComplete () {\n return this.isOn() && this.done\n }\n\n isConnected () {\n const step = this.getStep()\n return step?.state.has(StepState.TerminusConnection) ||\n // Consider beams which have merged into connected beams to also be connected\n step?.state.get(StepState.MergeInto)?.beam.isConnected()\n }\n\n isOn () {\n const opening = this.getOpening()\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected\n }\n\n isPending () {\n return this.isOn() && !this.done\n }\n\n length () {\n return this.#steps.length\n }\n\n onBeamUpdated (event) {\n const beam = event.detail.beam\n\n if (beam.isPending()) {\n // Wait for beam to finish before evaluating\n return\n }\n\n const beamLastStep = beam.getStep()\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n // Check for invalid collisions\n const collision = lastStep.state.get(StepState.Collision)\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get(StepState.Collision))) {\n console.debug(this.toString(), 're-evaluating collision with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(lastStep.index - 1, 0)\n return\n }\n\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get(StepState.MergeInto)\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), 're-evaluating merge into', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0)\n return\n }\n }\n\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam)\n if (mergeWith && !beamLastStep?.state.get(StepState.MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), 're-evaluating merge with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0)\n }\n }\n\n onCollision ({ beam, collision, collisionStep, currentStep, nextStep, puzzle }) {\n const isSelf = beam.equals(this)\n\n console.debug(this.toString(), 'evaluating collision with', (isSelf ? 'self' : beam.toString()))\n\n if (!beam.isOn()) {\n console.debug(this.toString(), 'ignoring collision with inactive beam', beam.toString())\n return\n }\n\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), 'ignoring collision with sibling beam', beam.toString())\n return\n }\n\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), 'ignoring collision with self while re-evaluating history')\n return\n }\n\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step) => fuzzyEquals(collision.point, step.point))\n if (stepIndex < 0) {\n // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(\n `Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`)\n }\n\n const step = this.#steps[stepIndex]\n\n if (step.state.get(StepState.MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), 'ignoring collision with merged beam', beam.toString())\n return\n }\n\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get(StepState.TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), 'ignoring collision with connected beam in parent terminus', beam.toString())\n return\n }\n\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get(StepState.Reflector) ?? currentStep.state.get(StepState.Reflector)\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = getPointFrom(step.point, 1, getOppositeDirection(step.direction))\n const nextStepPoint = getPointFrom(currentStep.point, 1, getOppositeDirection(currentStep.direction))\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), 'ignoring collision with beam on opposite side of reflector', beam.toString())\n return\n }\n }\n\n const isSameDirection = step.direction === nextStep.direction\n if (currentStep.state.get(StepState.Portal)?.exitPortal && !isSameDirection) {\n console.debug(\n this.toString(),\n 'ignoring collision with beam using same portal with different exit direction',\n beam.toString()\n )\n return\n }\n\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), 'has collided with', (isSelf ? 'self' : this.toString()), collision)\n\n if (!isSelf) {\n // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new StepState.Collision(collision.mirror()))\n })\n } else if (!isSameDirection) {\n // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay())\n }\n\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n })\n }\n\n console.debug(this.toString(), 'merging with', beam.toString())\n\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex)\n\n const mergeWith = new CollisionMergeWith(beam, step, stepIndex)\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).set(beam.id, mergeWith)\n },\n onRemove: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).unset(beam.id)\n },\n state: step.state.copy(new StepState.MergeWith(mergeWith))\n }))\n\n console.debug(beam.toString(), 'merging into', this.toString())\n\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new StepState.MergeInto(this))\n })\n }\n\n onModifierInvoked (event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), 'beam has been toggled off')\n // Also reset any state changes from user move decisions\n this.updateState((state) => { delete state.moves })\n this.remove()\n }\n return\n }\n\n const tiles = event.detail.tiles || [event.detail.tile]\n\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step) => tiles.some((tile) => tile.equals(step.tile)))\n if (stepIndex >= 0) {\n console.debug(this.toString(), 're-evaluating due to modifier being invoked in matching tile', stepIndex)\n // Re-evaluate beginning at the step before the matched one\n this.done = false\n this.#stepIndex = Math.max(stepIndex - 1, 0)\n return\n }\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n if (lastStep.state.get(StepState.Portal)?.entryPortal) {\n // Check for valid exit portal\n this.done = false\n }\n }\n }\n\n remove (stepIndex = 0) {\n this.#updateHistory(stepIndex)\n }\n\n selected (selected = true) {\n this.path.forEach((path) => { path.selected = selected })\n }\n\n startDirection () {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6\n }\n\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */\n step (puzzle) {\n if (!this.isPending()) {\n return\n }\n\n console.debug(this.toString(), 'currentStepIndex', this.#stepIndex)\n\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent\n this.addStep(new Step(0, tile, this.getColor(), this.startDirection(), tile.center))\n }\n\n const currentStepIndex = this.#stepIndex\n const currentStep = this.#steps[currentStepIndex]\n\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction\n const nextStepPoint = getPointFrom(currentStep.point, currentStep.tile.parameters.inradius, direction)\n\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile(getPointBetween(currentStep.point, nextStepPoint))\n\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), 'stopping due to out of bounds')\n\n const collision = new Collision(0, [currentStep.point], this)\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new StepState(new StepState.Collision(collision))\n })\n }\n\n const nextStepIndex = currentStepIndex + 1\n const existingNextStep = this.#steps[nextStepIndex]\n const lastPathIndex = this.path.length - 1\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1\n\n let nextStep = new Step(\n nextStepIndex,\n tile,\n currentStep.color,\n direction,\n nextStepPoint,\n existingNextStep?.pathIndex || lastPathIndex,\n existingNextStep?.segmentIndex || lastSegmentIndex\n )\n\n const items = uniqueBy(\n tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items),\n 'id'\n )\n\n console.debug(this.toString(), 'collision items:', items)\n\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle)\n .map((collision, index) => new Collision(index, collision.points, this, collision.item))\n\n if (collisions.length) {\n console.debug(this.toString(), 'collisions:', collisions)\n }\n\n let collisionStep\n for (let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++) {\n const collision = collisions[collisionIndex]\n\n console.debug(this.toString(), 'resolving collision:', collision)\n\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new StepState.Collision(collision))\n })\n\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision,\n collisions,\n collisionStep,\n currentStep,\n nextStep,\n existingNextStep,\n puzzle\n })\n\n if (collisionStep instanceof Step) {\n break\n }\n }\n\n if (collisionStep) {\n nextStep = collisionStep\n }\n\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++\n\n const lastStepIndex = this.getLastStepIndex()\n console.debug(\n this.toString(),\n 'new step is same as existing. new step index:',\n this.#stepIndex,\n 'last step index:',\n lastStepIndex\n )\n\n if (this.#stepIndex === lastStepIndex) {\n // To ensure we mark as done\n this.#onUpdate(this.#stepIndex)\n }\n\n return existingNextStep\n } else {\n console.debug(\n this.toString(),\n `is revising history at step index: ${nextStepIndex}`,\n 'existing step:',\n existingNextStep,\n 'new step:',\n nextStep\n )\n this.#updateHistory(nextStepIndex)\n }\n }\n\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), 'next step point is same as current step point, stopping.', nextStep)\n return this.updateStep(currentStepIndex, nextStep.copy({ done: true }))\n }\n\n return this.addStep(nextStep)\n }\n\n toString () {\n return `[${this.type}:${this.id}:${chroma(this.getColor()).name()}]`\n }\n\n update (stepIndex, settings = {}, timeout) {\n if (typeof settings === 'number') {\n timeout = settings\n settings = {}\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout)\n return timeout === undefined ? update() : setTimeout(update, timeout)\n }\n\n updateState (updater, dispatchEvent = true) {\n return this.parent.updateState((state) => updater(state.openings[this.#direction]), dispatchEvent)\n }\n\n updateStep (stepIndex, settings) {\n const step = this.getStep(stepIndex)\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings)\n this.#steps[stepIndex] = updatedStep\n updatedStep.onAdd(updatedStep)\n\n console.debug(this.toString(), 'updated step at index', stepIndex, 'from', step, 'to', updatedStep)\n this.#onUpdate(stepIndex)\n return updatedStep\n }\n }\n\n #getCollisions (items, currentStep, nextStep, puzzle) {\n const segments = [currentStep.point, nextStep.point]\n const path = new Path({ segments })\n const firstPoint = segments[0]\n return items\n .map((item) => {\n const points = []\n const intersections = path.getIntersections(\n item.getCompoundPath(),\n // Ignore first point from self which will always collide\n (curveLocation) => !(item === this && curveLocation.point.equals(firstPoint))\n )\n\n points.push(...new Set(intersections.map((intersection) => intersection.point)))\n\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === Item.Types.beam && item !== this) {\n points.push(\n ...item.getSteps().map((step) => step.point)\n .filter((point) => segments.some((segment) => fuzzyEquals(point, segment)))\n )\n }\n\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort(getDistance(firstPoint))\n\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint)\n points.forEach((point) => puzzle.drawDebugPoint(point, { fillColor: 'black' }))\n }\n\n return { points, item }\n })\n .filter((result) => result.points.length)\n .sort((a, b) => {\n // Sort items returned by proximity to starting point\n const distance = getDistance(firstPoint)(a.points[0], b.points[0])\n if (distance === 0) {\n // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder\n }\n\n return distance\n })\n }\n\n #getItemIndex (step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0\n }\n\n #getUpdatedStep (step, settings) {\n if (typeof settings === 'function') {\n settings = settings(step)\n }\n\n return settings instanceof Step ? settings : step.copy(settings)\n }\n\n #update (stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex)\n this.addStep(this.#getUpdatedStep(step, settings))\n } else {\n this.updateStep(stepIndex, settings)\n }\n }\n\n #onUpdate (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n stepIndex ??= lastStepIndex\n\n const step = this.getStep(stepIndex)\n\n if (stepIndex === lastStepIndex) {\n // Update beam status if last step was updated\n this.done = step?.done ?? false\n }\n\n emitEvent(Beam.Events.Update, { beam: this, state: step?.state, step, stepIndex })\n }\n\n #updateHistory (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n const step = this.#steps[stepIndex]\n\n console.debug(\n this.toString(),\n 'updateHistory',\n 'stepIndex:',\n stepIndex,\n 'lastStepIndex:',\n lastStepIndex,\n 'step:',\n step\n )\n\n if (step) {\n const currentPath = this.path[step.pathIndex]\n\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex)\n\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1)\n\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item) => item.remove())\n\n const deletedSteps = this.#steps.splice(stepIndex)\n\n console.debug(this.toString(), 'removed steps: ', deletedSteps)\n\n const tiles = [...new Set(deletedSteps.map((step) => step.tile))]\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile) => this.getSteps(tile).length === 0).forEach((tile) => tile.removeItem(this))\n\n deletedSteps.forEach((step) => step.onRemove(step))\n\n this.done = false\n this.#stepIndex = (stepIndex - 1)\n\n this.#onUpdate(this.#stepIndex)\n }\n\n return step\n }\n\n static CacheKeys = Object.freeze({\n MergeWith: 'mergeWith'\n })\n\n static Events = Object.freeze({\n Collision: 'beam-collision',\n Connection: 'beam-connection',\n Merge: 'beam-merge',\n Update: 'beam-update'\n })\n}\n","import { StepState } from './step'\n\nexport class Collision {\n constructor (index, points, beam, item) {\n const items = [beam]\n\n if (item !== undefined) {\n items.push(item)\n }\n\n this.beam = beam\n this.index = index\n\n // The item that was collided with\n this.item = item\n this.itemIds = items.map((item) => item.id)\n this.items = items\n\n // The first collision point\n this.point = points[0]\n this.points = points\n\n // Check if the collision is with self\n this.withSelf = beam.equals(item)\n }\n\n copy (settings) {\n return new Collision(\n settings.index ?? this.index,\n settings.points ?? this.points,\n settings.beam ?? this.beam,\n settings.item ?? this.item\n )\n }\n\n equals (other) {\n return other && other.point.equals(this.point) &&\n other.items.every((item) => this.has(item))\n }\n\n has (item) {\n return this.itemIds.includes(item.id)\n }\n\n mirror () {\n return this.copy({ beam: this.item, item: this.beam })\n }\n}\n\nexport class CollisionMergeWith {\n constructor (beam, step, stepIndex) {\n this.beams = [beam].concat(step.state.get(StepState.MergeWith)?.beams || [])\n this.colors = step.colors.concat(beam.getColors())\n this.stepIndex = stepIndex\n }\n}\n","import { Path, Point, Size } from 'paper'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getPointBetween, getOppositeDirection, getPosition, getReflectedDirection, getPointFrom } from '../util'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Reflector extends movable(rotatable(Item)) {\n #item\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 30 })\n\n this.color = state.color || 'black'\n this.#item = Reflector.item(tile, this.color)\n\n this.group.addChild(this.#item)\n }\n\n midLine () {\n // Two points which form a line through the mid-point of the reflector\n return [\n getPointBetween(this.#item.segments[3].point, this.#item.segments[0].point),\n getPointBetween(this.#item.segments[1].point, this.#item.segments[2].point)\n ]\n }\n\n getSide (point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return getPosition(this.midLine(), point)\n }\n\n isSameSide (pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB)\n }\n\n onCollision ({ beam, collision, collisions, collisionStep, currentStep, nextStep }) {\n const directionFrom = getOppositeDirection(currentStep.direction)\n const directionTo = getReflectedDirection(directionFrom, this.rotation)\n\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), 'stopping due to collision with non-reflective side of reflector')\n return collisionStep\n }\n\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), 'stopping due to reflection back at self')\n if (collisions.some((collision) => collision.item.type === Item.Types.beam)) {\n // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return\n } else {\n // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new StepState.Collision(collision.copy({ points: [nextStep.point] })))\n })\n }\n }\n\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has(StepState.Reflector)) {\n return nextStep.copy({ state: nextStep.state.copy(new StepState.Reflector(this)) })\n }\n\n const point = getPointFrom(currentStep.point, nextStep.tile.parameters.inradius, directionTo)\n return nextStep.copy({ direction: directionTo, point })\n }\n\n static item (tile, color) {\n const length = tile.parameters.circumradius\n const width = tile.parameters.circumradius / 12\n const topLeft = tile.center.subtract(new Point(width / 2, length / 2))\n const size = new Size(width, length)\n\n return new Path.Rectangle({\n data: { size },\n fillColor: color,\n point: topLeft,\n size\n })\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\nimport { addDirection } from '../util'\nimport { rotatable } from '../modifiers/rotate'\nimport { movable } from '../modifiers/move'\n\nexport class Wall extends movable(rotatable(Item)) {\n sortOrder = 1\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 60 })\n const walls = Wall.item(tile, state)\n this.group.addChildren(walls)\n }\n\n static item (tile, configuration) {\n const radius = tile.parameters.circumradius\n const width = radius / 12\n const fillColor = tile.styles.default.strokeColor\n\n return configuration.directions.map((direction) => {\n const firstSegment = tile.hexagon.segments[direction].point\n const nextDirection = addDirection(direction, 1)\n const lastSegment = tile.hexagon.segments[nextDirection].point\n\n return new Path({\n closed: true,\n fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt(\n (direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width\n ),\n tile.hexagon.getLocationAt(\n (nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width\n ),\n lastSegment\n ]\n })\n })\n }\n}\n","import { Immutable } from './modifiers/immutable'\nimport { Lock } from './modifiers/lock'\nimport { Move } from './modifiers/move'\nimport { Rotate } from './modifiers/rotate'\nimport { Toggle } from './modifiers/toggle'\nimport { Modifier } from './modifier'\nimport { Swap } from './modifiers/swap'\n\nexport function modifierFactory (tile, configuration) {\n let modifier\n\n switch (configuration.type) {\n case Modifier.Types.immutable:\n modifier = new Immutable(tile, configuration)\n break\n case Modifier.Types.lock:\n modifier = new Lock(tile, configuration)\n break\n case Modifier.Types.move:\n modifier = new Move(tile, configuration)\n break\n case Modifier.Types.rotate:\n modifier = new Rotate(tile, configuration)\n break\n case Modifier.Types.swap:\n modifier = new Swap(tile, configuration)\n break\n case Modifier.Types.toggle:\n modifier = new Toggle(tile, configuration)\n break\n default:\n console.error('Ignoring modifier with unknown type:', configuration.type)\n break\n }\n\n return modifier\n}\n","import { Modifier } from '../modifier'\n\nexport class Immutable extends Modifier {\n immutable = true\n name = 'block'\n title = 'Immutable'\n}\n","import { Modifier } from '../modifier'\n\nexport class Lock extends Modifier {\n immutable = true\n name = 'lock'\n title = 'Locked'\n}\n","import { Move } from './move'\nimport { Modifier } from '../modifier'\nimport { Item } from '../item'\n\nexport class Swap extends Move {\n name = 'swap_horiz'\n title = 'Swap'\n\n moveItems (tile) {\n const toItems = tile.items.filter(Move.movable)\n const fromItems = this.tile.items.filter(Move.movable)\n\n fromItems.forEach((item) => item.move(tile))\n toItems.forEach((item) => item.move(this.tile))\n\n return {\n moved: [Move.data(this.tile, tile, fromItems), Move.data(tile, this.tile, toItems)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some(Modifier.immutable) || !tile.items.filter((item) => item.type !== Item.Types.beam).length\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Mask extends Item {\n constructor (tile, style) {\n super(null, style, { locked: false, type: Item.Types.mask })\n\n const data = { type: this.type }\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({ fillColor: 'black' }, style)\n })\n\n this.center = tile.center\n this.group.addChild(item)\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Collision extends Item {\n constructor (state) {\n super(null, state, { type: Item.Types.collision })\n\n const { center, color } = state\n\n this.center = center\n this.color = color\n\n const item = new Path.Circle({\n center,\n closed: true,\n radius: 4,\n style: {\n fillColor: 'white',\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n}\n","import { Puzzles } from '../puzzles'\nimport { base64decode, base64encode, jsonDiffPatch, params, url } from './util'\n\nconst history = window.history\nconst localStorage = window.localStorage\n\nexport class State {\n #current\n #deltas\n #id\n #index\n #original\n #selectedTile\n #version\n\n constructor (id, original, deltas, deltasIndex, selectedTile, version) {\n this.#id = id\n this.#original = original\n this.#deltas = deltas || []\n this.#index = deltasIndex || this.#lastIndex()\n this.#selectedTile = selectedTile\n this.#version = version ?? original.version\n\n // Update current state\n this.#current = structuredClone(original)\n this.#deltas.filter((delta, index) => index <= this.#index).forEach((delta) => this.apply(delta))\n\n this.#updateCache(id)\n }\n\n apply (delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === 'string') {\n delta = JSON.parse(delta)\n }\n console.debug('StateManager: applying delta', delta)\n return jsonDiffPatch.patch(this.#current, delta)\n }\n\n canRedo () {\n return this.#index < this.#lastIndex()\n }\n\n canUndo () {\n return this.#index >= 0\n }\n\n encode () {\n return base64encode(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: Puzzles.has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }))\n }\n\n getCurrent () {\n return structuredClone(this.#current)\n }\n\n getId () {\n return this.#id\n }\n\n getTitle () {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : '')\n }\n\n getSelectedTile () {\n return this.#selectedTile\n }\n\n moves () {\n return this.#index + 1\n }\n\n length () {\n return this.#deltas.length\n }\n\n redo () {\n const nextIndex = this.#index + 1\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= nextIndex).forEach((delta) => this.apply(delta))\n this.#index = nextIndex\n this.#updateCache()\n }\n }\n\n reset () {\n this.#current = structuredClone(this.#original)\n this.#deltas = []\n this.#index = this.#lastIndex()\n this.#selectedTile = undefined\n\n State.clearCache(this.getId())\n\n this.#updateCache()\n }\n\n setSelectedTile (tile) {\n const id = tile?.coordinates.offset.toString()\n if (this.#selectedTile !== id) {\n this.#selectedTile = id\n this.#updateCache()\n }\n }\n\n undo () {\n const previousIndex = this.#index - 1\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= previousIndex).forEach((delta) => this.apply(delta))\n this.#index = previousIndex\n this.#updateCache()\n }\n }\n\n update (newState) {\n const delta = jsonDiffPatch.diff(this.#current, newState)\n console.debug('delta', delta)\n\n if (delta === undefined) {\n // Nothing to do\n return\n }\n\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) {\n // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1)\n }\n\n this.apply(delta)\n\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta))\n this.#index = this.#lastIndex()\n\n this.#updateCache()\n }\n\n #key (key) {\n return State.key(key, this.getId())\n }\n\n #lastIndex () {\n return this.#deltas.length - 1\n }\n\n #updateCache () {\n const id = this.getId()\n const state = this.encode()\n\n url.hash = ['', id, state].join('/')\n history.pushState({ id, state }, '', url)\n localStorage.setItem(State.CacheKeys.id, id)\n localStorage.setItem(this.#key(State.CacheKeys.state), state)\n }\n\n static clearCache (id) {\n if (!id) {\n // Clear everything\n url.hash = ''\n history.pushState({}, '', url)\n id = localStorage.getItem(State.CacheKeys.id)\n localStorage.clear()\n // Keep current puzzle ID\n localStorage.setItem(State.CacheKeys.id, id)\n } else {\n // Clear a single puzzle\n url.hash = `/${id}`\n history.pushState({ id }, '', url)\n localStorage.removeItem(State.key(State.CacheKeys.state, id))\n }\n }\n\n static fromEncoded (state) {\n state = JSON.parse(base64decode(state))\n state.original = state.original || Puzzles.get(state.id)\n state.original.version ??= 0\n return new State(\n state.id,\n state.original,\n state.deltas,\n state.deltasIndex,\n state.selectedTile,\n state.version\n )\n }\n\n static fromId (id) {\n return new State(id, Puzzles.get(id))\n }\n\n static resolve (id) {\n let state\n\n // Allow cache to be cleared via URL param\n if (params.has(State.ParamKeys.clearCache)) {\n State.clearCache(params.get(State.ParamKeys.clearCache))\n }\n\n const pathSegments = url.hash.substring(1).split('/').filter((path) => path !== '')\n\n if (!id) {\n // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path) => !Puzzles.has(path)).some((segment, index) => {\n try {\n state = State.fromEncoded(segment)\n id = state.getId()\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e)\n }\n\n return state !== undefined\n })\n }\n\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || localStorage.getItem(State.CacheKeys.id) || Puzzles.visible.firstId\n\n const localState = localStorage.getItem(State.key(State.CacheKeys.state, id))\n if (localState) {\n try {\n state = State.fromEncoded(localState)\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e)\n }\n }\n }\n\n if (state) {\n const cachedVersion = state.#version\n const originalVersion = state.#original.version\n\n if (cachedVersion !== originalVersion) {\n console.debug(\n `Invalidating cache for ID ${id} due to version mismatch. ` +\n `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`\n )\n state = undefined\n State.clearCache(id)\n }\n }\n\n if (!state) {\n // Fall back to loading state from Puzzles cache by ID\n state = State.fromId(id)\n }\n\n if (!state) {\n throw new Error(`Unable to resolve state for ID '${id}'`)\n }\n\n return state\n }\n\n static key (key, id) {\n return `${key}:${id}`\n }\n\n static CacheKeys = Object.freeze({\n center: 'center',\n id: 'id',\n state: 'state',\n zoom: 'zoom'\n })\n\n static ParamKeys = Object.freeze({\n clearCache: 'clearCache'\n })\n}\n","import _001 from './001'\nimport _002 from './002'\nimport _003 from './003'\nimport _004 from './004'\nimport _005 from './005'\nimport _006 from './006'\nimport _007 from './007'\nimport _008 from './008'\nimport _009 from './009'\nimport _010 from './010'\nimport _011 from './011'\n\n// These are just for testing purposes\n// They won't show up in the list but are accessible via URL\nimport testLayout from './testLayout'\nimport testPortal from './testPortal'\nimport testReflector from './testReflector'\nimport testInfiniteLoop from './testInfiniteLoop'\n\n// Ensure puzzle configuration is valid JSON\nconst configuration = Object.fromEntries(Object.entries({\n '001': _001,\n '002': _002,\n '003': _003,\n '004': _004,\n '005': _005,\n '006': _006,\n '007': _007,\n '008': _008,\n '009': _009,\n '010': _010,\n '011': _011,\n test_infinite_loop: testInfiniteLoop,\n test_layout: testLayout,\n test_portal: testPortal,\n test_reflector: testReflector\n}).map(([k, v]) => [k, JSON.parse(JSON.stringify(v))]))\n\nfunction traverse (ids, id, amount) {\n const index = ids.indexOf(id)\n return ids[index < 0 ? index : index + amount]\n}\n\nclass PuzzleGroup {\n ids\n\n constructor (ids) {\n this.firstId = ids[0]\n this.ids = ids\n this.lastId = ids[ids.length - 1]\n }\n\n get (id) {\n if (this.has(id)) {\n // Note: deep cloning configuration to prevent mutation\n return structuredClone(configuration[id])\n }\n }\n\n has (id) {\n return this.ids.includes(id)\n }\n\n nextId (id) {\n return traverse(this.ids, id, 1)\n }\n\n previousId (id) {\n return traverse(this.ids, id, -1)\n }\n}\n\nexport const Puzzles = new PuzzleGroup(Object.keys(configuration).sort())\n\nPuzzles.hidden = new PuzzleGroup(Puzzles.ids.filter((id) => id.startsWith('test_')))\nPuzzles.titles = Object.fromEntries(Puzzles.ids.map((id) => [id, configuration[id].title || id]))\nPuzzles.visible = new PuzzleGroup(Puzzles.ids.filter((id) => !Puzzles.hidden.has(id)))\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Toggle' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { clockwise: false, type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { clockwise: false, type: 'Rotate' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, { type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, { on: true, type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n { type: 'Tile' },\n { type: 'Tile' },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, null, { on: true, type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, { type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, null, { type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, null, { on: true, type: 'Beam' }, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' },\n { clockwise: false, type: 'Rotate' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 2, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n { color: 'red', type: 'Beam' },\n null,\n { color: 'blue', on: true, type: 'Beam' }\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [\n { color: 'blue', type: 'Beam' },\n null,\n { color: 'red', on: true, type: 'Beam' },\n null,\n null,\n null\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 2, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, { type: 'Beam' }, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, null, { type: 'Beam' }, { on: true, type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, { on: true, type: 'Beam' }, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, null, { on: true, type: 'Beam' }, { type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n { rotation: 3, type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n }\n ],\n [\n null,\n {\n items: [\n {\n color: 'blue',\n openings: [{ type: 'Beam' }, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { rotation: 3, type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { rotation: 3, type: 'Reflector' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [{ on: true, type: 'Beam' }, { type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 0, type: 'Connections' },\n { amount: 6, type: 'Moves' }\n ],\n version: 1\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'blue',\n openings: [null, null, null, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Toggle' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: ['red', 'blue'],\n openings: [null, null, null, null, { type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n type: 'Filter'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n type: 'Filter'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Move' }\n ],\n type: 'Tile'\n }\n ],\n [\n null,\n {\n items: [\n {\n color: ['red', 'blue'],\n openings: [null, { type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Toggle' }\n ],\n type: 'Tile'\n },\n {\n modifiers: [\n { type: 'Lock' },\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [{ type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' },\n { type: 'Swap' }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 2, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n { type: 'Tile' },\n { type: 'Tile' },\n null,\n null,\n {\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'green',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n modifiers: [\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n null,\n {\n items: [\n {\n color: 'green',\n openings: [null, null, null, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n null,\n null,\n {\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' },\n null,\n null,\n {\n type: 'Tile'\n },\n { type: 'Tile' }\n ],\n [\n {\n items: [\n {\n color: 'green',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n modifiers: [\n { type: 'Move' }\n ],\n type: 'Tile'\n },\n { type: 'Tile' },\n null,\n {\n items: [\n {\n color: 'green',\n openings: [null, null, null, { type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Portal' }\n ],\n type: 'Tile'\n },\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n null,\n null,\n { type: 'Tile' },\n { type: 'Tile' }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 5,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n openings: [\n null,\n null,\n { color: 'blue', on: true, type: 'Beam' },\n null,\n null,\n null\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Rotate' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [\n null,\n null,\n null,\n null,\n null,\n { color: 'blue', type: 'Beam' }\n ],\n type: 'Terminus'\n }\n ],\n modifiers: [\n { type: 'Immutable' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n direction: 5,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 5,\n type: 'Portal'\n }\n ],\n modifiers: [\n { type: 'Lock' }\n ],\n type: 'Tile'\n }\n ]\n ],\n type: 'even-r'\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ],\n version: 1\n}\n","const layout = [\n ['o', 'x', 'x', 'x'],\n ['x', 'x', 'x', 'x'],\n ['x', 'x', 'x', 'x', 'x'],\n ['x', 'x', 'x', 'x'],\n ['o', 'x', 'x', 'x']\n]\n\nexport default {\n layout: {\n tiles: layout.map((column) => column.map((item) => item === 'x' ? { type: 'Tile' } : null))\n // type: 'even-r'\n },\n solution: [\n { amount: 100, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [{ type: 'Immutable' }],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [{ type: 'Immutable' }],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [null, null, null, { color: ['red', 'blue'], type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Rotate' }],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [null, null, null, null, { color: 'green', type: 'Beam' }, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Lock' }, { type: 'Toggle' }],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n openings: [{ color: 'red', type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Lock' }, { type: 'Rotate' }, { type: 'Toggle' }],\n type: 'Tile'\n },\n {\n items: [\n {\n openings: [{ color: 'blue', type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n modifiers: [{ type: 'Lock' }, { type: 'Toggle' }],\n type: 'Tile'\n },\n {\n items: [\n {\n direction: 0,\n type: 'Portal'\n }\n ],\n modifiers: [{ type: 'Immutable' }],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 1, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n { type: 'Reflector' }\n ],\n modifiers: [\n { type: 'Rotate' }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n items: [\n {\n color: 'green',\n openings: [null, { on: true, type: 'Beam' }, null, null, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ on: true, type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 999, type: 'Connections' }\n ]\n}\n","export default {\n layout: {\n tiles: [\n [\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, { on: true, type: 'Beam' }, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'red',\n openings: [null, null, null, null, null, { on: true, type: 'Beam' }],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ],\n [\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n },\n {\n type: 'Tile'\n }\n ],\n [\n null,\n {\n items: [\n {\n rotation: 4,\n type: 'Reflector'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n rotation: 2,\n type: 'Reflector'\n }\n ],\n type: 'Tile'\n },\n {\n items: [\n {\n color: 'blue',\n openings: [{ on: true, type: 'Beam' }, null, null, null, null, null],\n type: 'Terminus'\n }\n ],\n type: 'Tile'\n }\n ]\n ]\n },\n solution: [\n { amount: 100, type: 'Connections' }\n ]\n}\n","import { capitalize, getIconElement, getTextElement } from './util'\nimport { Terminus } from './items/terminus'\nimport { EventListeners } from './eventListeners'\nimport { Puzzle } from './puzzle'\n\nexport class Solution {\n #conditions = []\n\n constructor (state) {\n state.forEach((condition) => this.#conditionFactory(condition))\n }\n\n teardown () {\n this.#conditions.forEach((condition) => condition.teardown())\n Solution.element.replaceChildren()\n }\n\n isSolved () {\n return this.#conditions.every((condition) => condition.isMet())\n }\n\n #conditionFactory (condition) {\n switch (condition.type) {\n case SolutionCondition.Types.connections: {\n this.#conditions.push(new Connections(condition))\n break\n }\n case SolutionCondition.Types.moves: {\n this.#conditions.push(new Moves(condition))\n break\n }\n default: {\n console.warn('Ignoring condition with unknown type:', condition.type)\n break\n }\n }\n }\n\n static element = document.getElementById('solution')\n}\n\nclass SolutionCondition {\n constructor (state, elements) {\n this.state = state\n\n const li = document.createElement('li')\n li.append(...elements)\n Solution.element.append(li)\n }\n\n isMet () {}\n\n teardown () {}\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'connections',\n 'moves'\n ].map((type) => [type, capitalize(type)])))\n}\n\nclass Connections extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #connections = []\n\n constructor (state) {\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement('/'),\n required,\n getIconElement('link', 'Connections')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n\n this.#eventListeners.add([\n { type: Terminus.Events.Connection, handler: this.update },\n { type: Terminus.Events.Disconnection, handler: this.update }\n ])\n }\n\n isMet () {\n return this.#connections.length === this.state.amount\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Connections.update', event)\n\n const terminus = event.detail.terminus\n const opening = event.detail.opening\n const connectionId = `${terminus.id}:${opening.direction}`\n const connectionIndex = this.#connections.findIndex((connection) => connection === connectionId)\n\n if (opening.connected && connectionIndex < 0) {\n this.#connections.push(connectionId)\n } else if (!opening.connected && connectionIndex >= 0) {\n this.#connections.splice(connectionIndex, 1)\n }\n\n this.#completed.textContent = this.#connections.length.toString()\n }\n}\n\nclass Moves extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #moves = 0\n\n constructor (state) {\n state.operator ??= Moves.Operators.equalTo\n\n if (!Object.values(Moves.Operators).includes(state.operator)) {\n throw new Error(`Invalid moves operator: ${state.operator}`)\n }\n\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement(state.operator),\n required,\n getIconElement('stacks', 'Moves')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n this.#eventListeners.add([{ type: Puzzle.Events.Updated, handler: this.update }])\n }\n\n isMet () {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch (this.state.operator) {\n case Moves.Operators.equalTo:\n return this.#moves === this.state.amount\n case Moves.Operators.greaterThan:\n return this.#moves > this.state.amount\n case Moves.Operators.lessThan:\n return this.#moves < this.state.amount\n }\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Moves.update', event)\n this.#moves = event.detail.state.moves()\n this.#completed.textContent = this.#moves.toString()\n }\n\n static Operators = Object.freeze({\n equalTo: '=',\n greaterThan: '>',\n lessThan: '<'\n })\n}\n","const script = document.createElement('script')\nscript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS')\ndocument.head.append(script)\n\nconst dataLayer = window.dataLayer = window.dataLayer || []\nfunction gtag () { dataLayer.push(arguments) }\ngtag('js', new Date())\ngtag('config', 'G-HXLD6EE5NS')\n","const doorbellOptions = window.doorbellOptions = {\n appKey: 'o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC',\n container: document.getElementById('feedback-container'),\n hideButton: true,\n properties: {}\n}\n\nconst script = document.createElement('script')\nscript.setAttribute(\n 'src',\n 'https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0'\n)\ndocument.head.append(script)\n\ndocument.addEventListener('puzzle-updated', (event) => {\n doorbellOptions.properties.puzzleId = event.detail.state.getId()\n})\n"],"names":["$a39eeb69bf620de6$var$static_l_desc","$a39eeb69bf620de6$var$static_d_desc","$a39eeb69bf620de6$var$static_bl_desc","$a39eeb69bf620de6$var$lenfix","$a39eeb69bf620de6$var$distfix","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","self1","undefined","document","Base","hidden","array","slice","create","describe","getOwnPropertyDescriptor","define1","forEach","iter","bind","i","l","length","forIn","hasOwnProperty","assign","dst","arguments","src","key","each","obj","desc","value","inject","dest","beans","preserve","beansNames","field","name","val","substring","bean","isFunc","res","prev","base","match","toLowerCase","isPlainObject","writable","test","part","statics","prototype","extend","ctor","proto","initialize","apply","clone","constructor","define","pick","b","list","begin","end","toString","_id","_class","_name","type","push","Formatter","instance","number","join","getClassName","importJSON","json","exportJSON","options","toJSON","serialize","props","exclude","filter","_prioritize","equals","obj1","obj2","Array","isArray","keys","read","start","amount","peek","__index","readIndex","_readIndex","readNull","__read","filtered","__filtered","remain","readList","entry","readNamed","getNamed","hasValue","source","getSource","__unfiltered","readSupported","that","__source","arg","hasNamed","prioritize","handleKey","processed","isPlainValue","asString","compact","dictionary","isRoot","formatter","precision","definitions","references","add","item","ref","unshift","_serialize","_compactSerialize","deserialize","_data","_setDictionary","_isRoot","isFirst","hasDictionary","isDictionary","args","JSON","stringify","target","parse","useTarget","Item","Layer","insert","concat","INSERT","items","itemsLength","startLength","splice","index","remove","append","_index","removed","capitalize","str","replace","toUpperCase","camelize","chr","hyphenate","Emitter","on","func","types","_eventTypes","handlers","_callbacks","indexOf","install","off","uninstall","once","handler","emit","event","setTarget","currentTarget","stop","responds","attach","detach","fire","_installEvents","events","_events","isString","PaperScope","paper","settings","applyMatrix","insertItems","handleSize","hitTolerance","project","projects","tools","_scopes","support","ctx","CanvasProvider","getContext","nativeDash","nativeBlendModes","BlendMode","nativeModes","release","agent","user","navigator","userAgent","os","exec","platform","browser","v1","v2","rv","chrome","version","versionNumber","parseFloat","trident","jsdom","webkit","atom","getView","_view","getPaper","execute","PaperScript","View","updateFocus","scope","setup","element","Project","createCanvas","width","height","getCanvas","activate","clear","handleAttribute","el","attr","getAttribute","hasAttribute","PaperScopeItem","_scope","_list","_reference","isActive","CollisionDetection","findItemBoundsCollisions","items1","items2","tolerance","getBounds","bounds","rect","left","top","right","bottom","bounds1","bounds2","findBoundsCollisions","findCurveBoundsCollisions","curves1","curves2","bothAxis","curves","min","Math","max","hor","ver","boundsA","boundsB","sweepVertical","onlySweepAxisCollisions","allBounds","lengthA","lengthAll","binarySearch","indices","coord","lo","hi","mid","pri0","pri1","sec0","sec1","allIndicesByPri0","sort","i1","i2","activeIndicesByPri1","allCollisions","curIndex","curBounds","origIndex","isCurrentA","isCurrentB","curCollisions","pruneCount","j","activeIndex","curSec1","curSec0","activeBounds","isActiveA","isActiveB","curPri1","collisions","multiplier","pow","round","pair","val1","val2","separator","point","x","y","size","rectangle","Numerical","abscissas","weights","abs","sqrt","log2","log","LOG2E","clamp","getDiscriminant","c","split","D","E","ad","bd","cd","p","dp","q","dq","getNormalizationFactor","norm","EPSILON","MACHINE_EPSILON","CURVETIME_EPSILON","GEOMETRIC_EPSILON","TRIGONOMETRIC_EPSILON","ANGULAR_EPSILON","KAPPA","isZero","isMachineZero","integrate","f","w","A","B","m","sum","Ax","findRoot","df","fx","dx","nx","solveQuadratic","roots","x1","x2","Infinity","Q","R","count","boundless","minB","maxB","isFinite","solveCubic","d","b1","c2","qd","evaluate","x0","tmp","t","r","td","rd","UID","_pools","pool","Point","arg0","arg1","reading","hasY","_set","setAngle","angle","getLength","setLength","_angle","cos","sin","scale","getAngle","getAngleInRadians","PI","setAngleInRadians","getAngleInDegrees","setAngleInDegrees","atan2","div","NaN","dot","acos","getQuadrant","getDirectedAngle","cross","getDistance","squared","normalize","current","rotate","center","subtract","transform","matrix","_transformPoint","multiply","divide","modulo","negate","isInside","Rectangle","contains","isClose","isCollinear","isColinear","isOrthogonal","isNaN","isInQuadrant","point1","point2","random","y1","y2","op","LinkedPoint","owner","setter","_x","_y","_owner","_setter","_dontNotify","getX","setX","getY","setY","isSelected","_selection","_getSelection","setSelected","selected","_changeSelection","Size","hasHeight","size1","size2","LinkedSize","_width","_height","getWidth","setWidth","getHeight","setHeight","arg2","arg3","from","to","frm","next","rt","getPoint","_dontLink","setPoint","getSize","_fw","_fh","setSize","sx","_sx","sy","_sy","h","getLeft","setLeft","getTop","setTop","getRight","setRight","getBottom","setBottom","getCenterX","setCenterX","getCenterY","setCenterY","getCenter","setCenter","getArea","isEmpty","_containsRectangle","_containsPoint","intersects","epsilon","intersect","unite","include","expand","parts","xFirst","LinkedRectangle","internal","Matrix","ok","_a","_b","_c","_d","_tx","_ty","reset","tx","ty","_changed","getValues","_applyMatrix","mx","recursively","_setApplyMatrix","isIdentity","translate","shear","skew","toRadians","tan","a1","c1","d1","a2","b2","d2","tx2","ty2","prepend","tx1","ty1","appended","prepended","invert","det","inverted","concatenate","preConcatenate","chain","_shiftless","_orNullIfIdentity","isInvertible","isSingular","_transformCoordinates","_transformCorners","coords","_transformBounds","inverseTransform","_inverseTransform","decompose","degrees","asin","translation","getTranslation","rotation","scaling","skewing","getScaling","getRotation","applyToContext","prop","Line","arg4","asVector","_px","_py","_vx","_vy","getVector","line","isInfinite","getSide","getSignedDistance","p1x","p1y","v1x","v1y","p2x","p2y","v2x","v2y","dy","u1","u2","uMin","px","py","vx","vy","ccw","_children","_namedChildren","_activeLayer","_currentStyle","Style","_selectionItems","_selectionCount","_updateVersion","flags","view","_needsUpdate","_requested","_autoUpdate","requestUpdate","changes","_changes","changesById","_changesById","children","getCurrentStyle","setCurrentStyle","style","getIndex","getOptions","getLayers","getActiveLayer","getSymbolDefinitions","ids","getItems","class","SymbolItem","definition","_definition","getSymbols","getSelectedItems","selectionItems","selection","isInserted","_updateSelection","selectAll","setFullySelected","deselectAll","addLayer","layer","insertLayer","_remove","_setProject","setName","_insertItem","_created","NO_INSERT","insertChild","_getItems","getItem","removeOn","sets","_removeSets","mousedrag","other","draw","pixelRatio","save","param","offset","viewMatrix","matrices","updateMatrix","restore","strokeWidth","_drawSelection","_serializeFields","_canApplyMatrix","_canScaleStroke","_pivot","_visible","_blendMode","_opacity","_locked","_guide","_clipMask","_selectBounds","_selectChildren","pivot","visible","blendMode","opacity","locked","guide","clipMask","data","_countItemEvent","onFrame","_animateItem","onLoad","onError","_itemHandlers","_initialize","hasProps","_matrix","_parent","_style","parent","fields","fontSize","Group","_defaults","symbol","_symbol","cacheParent","_project","_bounds","_position","_decomposed","_globalMatrix","_clearBoundsCache","getId","getName","_removeNamed","_getOwner","namedChildren","getStyle","setStyle","getSelection","setSelection","flag","isFullySelected","isClipMask","setClipMask","setFillColor","setStrokeColor","getData","setData","getPosition","position","_getPositionFromBounds","setPosition","getPivot","setPivot","getStrokeBounds","stroke","getHandleBounds","handle","getInternalBounds","hasMatrix","opts","_boundsOptions","getStrokeScaling","cacheItem","_getCachedBounds","setBounds","_backup","_getBounds","_updateBoundsCache","_getBoundsCacheKey","noInternal","cacheKey","cached","nonscaling","hasStroke","_getStrokeMatrix","_item","getViewMatrix","_boundsCache","cache","_decompose","decomposed","setRotation","setScaling","getMatrix","setMatrix","getGlobalMatrix","_dontClone","parents","getApplyMatrix","setApplyMatrix","getTransformContent","setTransformContent","getProject","installEvents","getLayer","getParent","setParent","addChild","getChildren","setChildren","removeChildren","addChildren","getFirstChild","getLastChild","getNextSibling","getPreviousSibling","_equals","copy","deep","copyAttributes","copyContent","insertAbove","orig","excludeMatrix","rasterize","resolution","raster","Raster","getResolution","topLeft","getTopLeft","floor","boundsSize","bottomRight","getBottomRight","ceil","rasterSize","_contains","_asPathItem","Path","getIntersections","hitTest","_hitTest","HitResult","hitTestAll","all","hitTestChildren","_exclude","child","_hitTestChildren","parentViewMatrix","guides","tolerancePadding","_tolerancePadding","_getStrokePadding","checkSelf","hit","checkPoint","pt","checkPosition","checkCenter","checkBounds","points","_hitTestSelf","fill","hasFill","matches","compare","matchObject","firstOnly","overlapping","inside","recursive","path","childMatrix","insertChildren","inserted","notifySelf","_insertAt","insertBelow","sendToBack","bringToFront","appendTop","appendBottom","moveAbove","moveBelow","addTo","copyTo","reduce","namedArray","notifyParent","_dispose","replaceWith","reverseChildren","reverse","numChildren","isEditable","hasShadow","_getOrder","getList","list1","list2","hasChildren","isAbove","isBelow","isParent","isChild","isDescendant","isAncestor","isSibling","isGroupedWith","_applyRecursively","transformMatrix","fillColor","getFillColor","strokeColor","getStrokeColor","_transformContent","decomp","applyRecursively","globalToLocal","localToGlobal","parentToLocal","localToParent","fitBounds","itemRatio","rectRatio","newBounds","_setStyles","fillStyle","toCanvasStyle","strokeStyle","lineWidth","getStrokeWidth","strokeJoin","getStrokeJoin","strokeCap","getStrokeCap","miterLimit","getMiterLimit","lineJoin","lineCap","dashArray","getDashArray","dashOffset","getDashOffset","setLineDash","lineDashOffset","mozDash","mozDashOffset","blur","getShadowBlur","getShadowOffset","shadowColor","getShadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","parentStrokeMatrix","globalMatrix","mainCtx","itemOffset","prevOffset","normalBlend","nativeBlend","direct","dontStart","clip","_canComposite","pop","strokeMatrix","clipItem","globalAlpha","globalCompositeOperation","setTransform","_draw","dontFinish","getFillRule","process","_isUpdated","updateVersion","CompoundPath","updated","itemSelected","boundsSelected","positionSelected","_drawSelected","color","getSelectedColor","half","pos","beginPath","arc","deltas","delta","moveTo","lineTo","closePath","fillRect","hash","tween","easing","duration","Tween","_handleFrame","time","running","tweenTo","tweenFrom","_clipItem","_getClipItem","isClipped","setClipped","clipped","Shape","radius","_type","_size","_radius","setType","setRadius","getType","getShape","setShape","getRadius","rad","toPath","toShape","dontPaint","untransformed","isCircle","rx","ry","cx","cy","bezierCurveTo","getCornerCenter","halfSize","dir","corner","quadrant","isOnEllipseStroke","padding","vector","hitStroke","hitFill","strokeRadius","strokePadding","outer","inner","createShape","Circle","Ellipse","ellipse","_readEllipse","crossOrigin","_smoothing","image","object","getElementById","naturalHeight","setImage","setSource","_loaded","_image","canvas","_canvas","_setImage","copyCanvas","drawImage","_crossOrigin","_clear","getElement","getLoaded","u","getPpi","getImage","Event","setTimeout","DomEvent","load","error","complete","naturalWidth","_context","setCanvas","_change","setContext","context","toDataURL","Image","getCrossOrigin","setCrossOrigin","getSmoothing","setSmoothing","smoothing","getSubCanvas","getSubRaster","getAverageColor","PathItem","_sampleContext","clearRect","sampleSize","pixels","getImageData","channels","total","alpha","Color","getPixel","setPixel","components","_convert","_alpha","imageData","createImageData","putImageData","setImageData","disabled","DomElement","setPrefixed","setDefinition","SymbolDefinition","getDefinition","getSymbol","setSymbol","dontCenter","setItem","_dontCenter","place","values","segments","handles","ends","Segment","arg5","handleIn","handleOut","SegmentPoint","_point","hasHandles","_handleIn","_handleOut","_path","curve","_curves","_closed","getHandleIn","setHandleIn","getHandleOut","setHandleOut","isSmooth","clearHandles","oldSelection","getPath","getCurve","_segments","getCurves","getLocation","CurveLocation","_segment1","getNext","smooth","_first","_last","factor","getPrevious","p0","p1","p2","k","d1_a","d1_2a","d2_a","d2_2a","N","isLast","reversed","removeSegment","segment","interpolate","handleIn1","handleIn2","handleOut2","handleOut1","change","Curve","arg6","arg7","seg1","seg2","handle1","handle2","segment1","segment2","_segment2","getPoint1","getHandle1","getHandle2","getPoint2","_length","classify","setPoint1","setPoint2","setHandle1","setHandle2","getSegment1","getSegment2","getPoints","getLine","getPart","getPartLength","divideAt","location","divideAtTime","getTimeAt","_setHandles","subdivide","setHandles","splitAt","splitAtTime","getLocationAtTime","isTime","straight","h1","h2","y0","x3","y3","x4","y4","x5","y5","x6","y6","x7","y7","x8","y8","x9","y9","getMonoCurves","io","o0","o1","o2","o3","isStraight","v0","v3","getTimeOf","p3","getNearestTime","minDist","minT","refine","dist","step","flip","isFlatEnough","flatness","ux","uy","_addBounds","minPad","maxPad","s1","s2","isLinear","third","hasLength","isHorizontal","getTangentAtTime","isVertical","getLocationAt","_isTime","getParameterAt","getTimesWithTangent","tangent","getOffsetAtTime","getLocationOf","getOffsetOf","loc","getOffset","getParameterOf","getNearestLocation","getNearestPoint","methods","_evaluateMethods","getLengthIntegrand","ax","bx","ay","by","getIterations","normalized","len","d3","serpentine","t1","t2","hasRoots","t1Ok","t2Ok","f1","f2","ds","forward","rangeLength","diff","guess","getTangent","getWeightedTangent","getNormal","getWeightedNormal","getCurvature","getPeaks","addLocation","locations","overlap","excludeStart","excludeEnd","loc1","loc2","_intersection","clipConvexHull","hullTop","hullBottom","dMin","dMax","clipConvexHullPart","threshold","qx","qy","getCurveLineIntersections","getCurveIntersections","overlaps","getOverlaps","straight1","straight2","before","addCurveIntersections","recursion","calls","tMin","tMax","uMax","tMinClip","tMaxClip","q0x","q0y","q3x","q3y","dp0","dp1","dp2","dp3","hull","getConvexHull","dq0","dq1","dq2","dq3","dist1","dist2","distRatio","tMinNew","tMaxNew","uDiff","getSelfIntersection","info","getSquaredLineLength","straightBoth","l1","l2","pairs","matrix1","matrix2","_returnFirst","length1","length2","values1","values2","boundsCollisions","index1","curve1","collisions1","index2","curve2","den","times","t0","_overlap","_distance","_setCurve","_time","getPointAtTime","_next","_previous","_setPath","_version","_curve","_segment","_setSegment","getSegment","getTime","trySegment","_offset","_curveOffset","getParameter","getCurveOffset","getIntersection","getLastSegment","_ignoreOther","isTouching","inter","isCrossing","t1Inside","t2Inside","c4","c3","offsets","addOffsets","isInRange","getPointAt","v4","a3","a4","hasOverlap","merge","search","found","path1","path2","expanded","pathData","compound","first","isClockwise","setClockwise","clockwise","setPathData","previous","control","relative","getCoord","command","lower","move","cubicCurveTo","quadraticCurveTo","arcTo","winding","_getWinding","onPath","windingL","windingR","getCrossings","minLoc","isPath","itemsFrom","itemsTo","setClosed","paths1","paths2","matched","boundsOverlaps","pathBoundsOverlaps","closed","setSegments","_segmentSelection","_area","getSegments","fullySelected","last","_add","getFirstSegment","_countCurves","getFirstCurve","getLastCurve","isClosed","getPathData","_precision","curX","curY","prevX","prevY","inX","inY","outX","outY","addSegment","skipLine","segs","_adjustCurves","insertSegment","addSegments","insertSegments","removeSegments","_includeCurves","area","_selectSegments","newSelection","last1","last2","first2","first1","simplify","flatten","flattener","PathFlattener","PathFitter","fit","_default","loop","asymmetric","paddingLeft","paddingRight","knots","n_1","rf","hx","hy","seg3","topCenter","seg4","isArc","pt1","pt2","shape","pos2","end2","pos1","end1","start2","cap","numSegments","hitCurves","isCloseEnough","checkSegmentPoint","seg","anchor","checkSegmentPoints","addToArea","checkSegmentStroke","isJoin","_addBevelJoin","_addSquareCap","getOffsetsWithTangent","curveStart","curveTimes","drawSegments","drawSegment","dashLength","drawPart","drawHandles","pX","pY","miniSize","miniHalf","drawHandle","hX","hY","getCurrentSegment","moveBy","curveTo","through","extent","middle","large","rxSq","rySq","xSq","ySq","throughSide","centerSide","ext","inc","z","out","_in","lineBy","curveBy","parameter","cubicCurveBy","quadraticCurveBy","arcBy","prevCoords","processSegment","joinBounds","addPoint","addRound","addJoin","addCap","phi","isArea","normal1","getNormalAtTime","normal2","normal","joinPadding","joinRadius","SQRT2","paddingX","paddingY","xn","xx","yn","yx","ellipseSegments","createPath","createEllipse","bl","getBottomLeft","tl","tr","getTopRight","br","RoundRectangle","Oval","Arc","RegularPolygon","sides","three","Star","radius1","radius2","paths","getCurrentPath","check","operators","getPaths","preparePath","resolve","resolveCrossings","reorient","createResult","result","filterIntersection","traceBoolean","operation","trace","splitBoolean","_path1","_path2","operator","crossings","divideLocations","collectPaths","_overlapsOnly","curvesValues","curveCollisions","curveCollisionsMap","map","propagateWinding","_winding","tracePaths","reorientPaths","added","addPath","linkIntersections","clearCurveHandles","lookup","container","sorted","entry1","containerWinding","getInteriorPoint","entry2","clearLater","renormalizeLocs","prevCurve","prevTime","results","clearCurves","clearLookup","origTime","newCurve","getWinding","dontFlip","vPrev","vClose","curvesList","ia","pv","pa","po","paL","paR","pathWindingL","pathWindingR","onAnyPath","quality","handleCurve","a0","monoCurves","addWinding","windingPrev","a3Prev","totalLength","curveLength","operand","SQRT1_2","wind","pathWinding","otherPath","starts","isValid","_visited","isStart","visitPath","inter1","inter2","over1","over2","branch","visited","valid","finished","branches","getCrossingSegments","collectStarts","collect","nextInter","shift","hasOverlaps","hasCrossings","intersections","nonZero","intercepts","mv","mo0","mo3","maxRecursion","ignoreStraight","minSpan","addCurve","computeParts","halves","tMid","_get","fitCubic","tan1","tan2","uPrime","chordLengthParameterize","maxError","parametersInOrder","generateBezier","findMaxError","reparameterize","tanCenter","C","X","b0","b3","alpha1","alpha2","detC0C1","detC0X","detXC1","c0","segLength","eps","degree","maxDist","P","TextItem","content","_content","_lines","setContent","getContent","getCharacterStyle","setCharacterStyle","getParagraphStyle","setParagraphStyle","PointText","lines","leading","getLeading","font","getFontStyle","textAlign","getJustification","fillText","strokeText","numLines","justification","getTextWidth","colorCtx","gray","rgb","hsb","hsl","gradient","componentParsers","namedColors","transparent","hsbIndices","converters","g","achromatic","t3s","t3","properties","parser","_components","Gradient","_removeOwner","_addOwner","_properties","argType","converted","fromCSS","string","parseInt","trim","isHSL","component","turn","grad","willReadFrequently","parsers","stops","radial","getComponents","_canvasStyle","converter","convert","getAlpha","setAlpha","hasAlpha","col","isGradient","toCSS","hex","canvasGradient","_stops","origin","destination","highlight","inverse","_radial","createRadialGradient","createLinearGradient","addColorStop","_color","_types","_setOwner","components1","components2","setStops","setRadial","_owners","getStops","GradientStop","getRadial","stops1","stops2","rampPoint","setColor","setOffset","getRampPoint","setRampPoint","getColor","itemDefaults","fillRule","strokeScaling","shadowOffset","selectedColor","groupDefaults","fontFamily","fontWeight","textDefaults","_values","isColor","isPoint","applyToChildren","old","_dontMerge","childValue","Font","WindingRule","isStyle","style1","style2","secondary","defaults2","value1","value2","getFontSize","getFontWeight","getFontFamily","getFont","setFont","getPixelSize","handlePrefix","prefixes","suffix","prefix","getStyles","doc","nodeType","ownerDocument","defaultView","getComputedStyle","viewport","body","html","documentElement","getBoundingClientRect","clientLeft","clientTop","pageXOffset","scrollLeft","pageYOffset","scrollTop","getViewportBounds","innerWidth","clientWidth","innerHeight","clientHeight","isInvisible","isInView","getPrefixed","passive","addEventListener","removeEventListener","targetTouches","changedTouches","pageX","clientX","pageY","clientY","getTarget","srcElement","getRelatedTarget","relatedTarget","toElement","requestAnimationFrame","timer","nativeRequest","requested","callbacks","handleCallbacks","functions","callback","setInterval","getCanvasSize","setAttribute","_viewEvents","none","userDrag","userSelect","touchCallout","contentZooming","tapHighlightColor","_windowEvents","resize","setViewSize","Stats","_stats","stats","domElement","appendChild","_element","_pixelRatio","devicePixelRatio","_setElementSize","_viewSize","_views","_viewsById","_focused","_frameItems","_frameItemCount","_itemEvents","native","virtual","node","_animate","play","pause","_count","getAutoUpdate","setAutoUpdate","autoUpdate","update","now","Date","animate","_handleFrameItems","getPixelRatio","getViewSize","isVisible","parentNode","temp","createElement","removeChild","getZoom","setZoom","zoom","scrollBy","projectToView","viewToProject","getEventPoint","CanvasView","prevFocus","tempFocus","mousedown","mousemove","mouseup","dragging","mouseDown","pointerEnabled","msPointerEnabled","viewEvents","docEvents","mouseout","nodeName","handleMouseMove","scroll","_handleMouseEvent","downPoint","lastPoint","downItem","overItem","dragItem","clickItem","clickTime","dblClick","called","prevented","fallbacks","doubleclick","wasInView","itemEventsMap","click","mouseenter","mouseleave","itemEvents","hitItems","nativeMove","tool","inView","hitItem","mouse","substr","emitMouseEvent","drag","emitMouseEvents","down","up","cancelable","preventDefault","_handleKeyEvent","character","keyEvent","KeyEvent","sign","_resetState","prevPoint","stopItem","mouseEvent","stopped","MouseEvent","fallback","HTMLCanvasElement","deviceRatio","backingStoreRatio","firefox","prevFont","measureText","stopPropagation","getTimeStamp","timeStamp","getModifiers","Key","modifiers","metaFixMap","downKey","keyLookup","charLookup","keyMap","charMap","alt","meta","capsLock","space","option","mac","getKey","keyIdentifier","String","fromCharCode","keyCode","keydown","altKey","metaKey","ctrlKey","keypress","charCode","keyup","isDown","ToolEvent","_choosePoint","toolPoint","getLastPoint","_lastPoint","setLastPoint","getDownPoint","_downPoint","setDownPoint","getMiddlePoint","_middlePoint","setMiddlePoint","middlePoint","getDelta","_delta","setDelta","getCount","setCount","Tool","_moveCount","_downCount","getMinDistance","_minDistance","setMinDistance","minDistance","_maxDistance","getMaxDistance","setMaxDistance","maxDistance","getFixedDistance","setFixedDistance","distance","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","isFunction","_then","_startTime","state","_keys","_parsedKeys","_parseKeys","_from","_getState","_to","then","progress","getValue","__add","__subtract","__multiply","_setProperty","onUpdate","startTime","_getProperty","resolved","_resolveValue","_calculate","parsed","calculateBinary","Http","request","xhr","XMLHttpRequest","open","method","url","async","mimeType","overrideMimeType","onload","status","responseText","onerror","message","send","canvases","sr","sg","sb","sa","bg","bb","ba","dr","dg","db","getLum","setLum","mn","lmn","ln","mxl","getSat","setSat","md","modes","screen","overlay","darken","lighten","difference","exclusion","hue","saturation","luminosity","average","negation","mode","srcContext","dstContext","srcCanvas","dstData","SvgElement","svg","xmlns","xlink","attributeNamespace","href","attributes","namespace","setAttributeNS","tag","createElementNS","getAttributeNS","SvgStyles","true","false","property","attribute","toSVG","fromSVG","exportFilter","getTransform","coordinates","attrs","trans","exportGroup","childNode","exportSVG","exportShape","exporters","embedImages","matchShapes","definitionItem","viewBox","overflow","textContent","svgs","__id","typeId","exportDefinitions","defs","insertBefore","firstChild","XMLSerializer","serializeToString","exporter","onExport","exportGradient","gradientNode","getGradient","getOrigin","getDestination","getHighlight","fy","gradientUnits","stopColor","visibility","setOptions","rootSize","allowNull","allowPercent","defaultValue","defaultX","defaultY","convertValue","importGroup","nodes","childNodes","isClip","isDefs","currentStyle","applyAttributes","querySelectorAll","importNode","importPoly","importGradient","scaleToBounds","_scaleToBounds","importers","clippath","polygon","polyline","lineargradient","radialgradient","use","circle","text","switch","applyTransform","transforms","applyOpacity","gradientTransform","setVisible","display","percent","styles","group","tagName","isElement","nextSibling","importer","onImport","expandShapes","importSVG","DOMParser","parseFromString","File","reader","FileReader","readAsText","mod","acorn","inpt","inputLen","input","initTokenState","parseTopLevel","program","lastStart","lastEnd","tokPos","lastEndLoc","line_loc_t","inFunction","strict","labels","readToken","startNode","tokType","_eof","stmt","parseStatement","isUseStrict","setStrict","finishNode","sourceFile","tokStart","tokEnd","tokStartLoc","tokEndLoc","tokVal","tokRegexpAllowed","tokCurLine","tokLineStart","containsEsc","defaultOptions","ecmaVersion","strictSemicolons","allowTrailingCommas","forbidReserved","allowReturnOutsideFunction","onComment","ranges","directSourceFile","opt","getLineInfo","cur","lineBreak","lastIndex","column","raise","SyntaxError","raisedAt","tokenize","getToken","forceRegexp","startLoc","endLoc","jumpTo","reAllowed","skipSpace","empty","_num","_regexp","_string","_break","keyword","_case","beforeExpr","_catch","_continue","_debugger","_do","isLoop","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_while","_with","_new","_this","_null","atomValue","_true","_false","binop","keywordTypes","_bracketL","_bracketR","_braceL","_braceR","_parenL","_parenR","_comma","_semi","_colon","_dot","_question","_slash","_eq","isAssign","_assign","_incDec","postfix","isUpdate","_prefix","_logicalOR","_logicalAND","_bitwiseOR","_bitwiseXOR","_bitwiseAND","_equality","_relational","_bitShift","_plusMin","_multiplyModulo","kw","tokTypes","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","question","slash","eq","eof","num","regexp","makePredicate","words","cats","compareTo","arr","cat","Function","isReservedWord3","isReservedWord5","isStrictReservedWord","isStrictBadIdWord","isKeyword","nonASCIIwhitespace","nonASCIIidentifierStartChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","newline","isIdentifierStart","isIdentifierChar","finishToken","skipLineComment","ch","charCodeAt","skipBlockComment","readRegexp","readWord","tok","getTokenFromCode","readNumber","readInt","readString","quote","octal","readHexChar","finishOp","escaped","inClass","charAt","mods","readWord1","radix","startsWithDot","isFloat","word","esc","escStr","strct","lastIndexOf","node_t","node_loc_t","range","startNodeFrom","expression","eat","canInsertSemicolon","semicolon","unexpected","expect","checkLVal","expr","loopLabel","kind","switchLabel","sawDefault","starttype","isBreak","label","parseIdent","lab","parseParenExpression","parseFor","parseVar","declarations","parseForIn","parseExpression","parseFunction","consequent","alternate","argument","discriminant","cases","isCase","block","parseBlock","clause","guard","guardedHandlers","finalizer","maybeName","allowStrict","oldStrict","noIn","decl","noComma","parseMaybeAssign","expressions","parseMaybeConditional","parseExprOp","minPrec","prec","parseMaybeUnary","parseSubscripts","parseExprAtom","noCalls","computed","callee","parseExprList","raw","tokStartLoc1","tokStart1","elements","parseObj","sawGetSet","parsePropertyName","isGetSet","conflict","isStatement","params","oldInFunc","oldLabels","close","allowTrailingComma","allowEmpty","elts","liberal","binaryOperators","unaryOperators","__self","__$__","$__","compile","insertions","insertion","getCode","replaceCode","sourceMaps","paperFeatures","offsetCode","lineBreaks","getElementsByTagName","innerHTML","mappings","encodeVLQ","base64","safari","file","names","sourceRoot","sources","sourcesContent","operatorOverloading","moduleExports","walkAST","handleOverloading","between","parentType","exp","handleExports","declaration","specifiers","dec","specifier","preserveParens","sourceType","btoa","unescape","encodeURIComponent","toolHandlers","expose","compiled","script","head","createTextNode","__paperscript__","onResize","setOnResize","setOnFrame","loadScript","canvasId","scopeAttribute","baseURI","loadAll","readyState","calculateUnary","Symbol","PlacedSymbol","amd","$ebef8a20963d596b$export$56b48cc5d7560ffb","$ebef8a20963d596b$export$332f4d7bee38db93","$ebef8a20963d596b$export$f435f793048e7a0f","$ebef8a20963d596b$export$d53f8326294b31d8","$ebef8a20963d596b$export$b54c7ea7aabba5c8","$ebef8a20963d596b$export$a1aa2dd4ad0d3f6","$ebef8a20963d596b$export$866e20207bbc41f2","$ebef8a20963d596b$export$2c19a3e3b4008fff","$ebef8a20963d596b$export$268622f0f1cbc82b","$ebef8a20963d596b$export$13807d9ee5a34a42","$ebef8a20963d596b$export$7387db7caf96fcdb","$ebef8a20963d596b$export$7af82191547c5ff7","$ebef8a20963d596b$export$ba43bf67f3d48107","$ebef8a20963d596b$export$7acfa6ed01010e37","$ebef8a20963d596b$export$68e7b4c4d99215d9","$ebef8a20963d596b$export$2b5f701edfbd6f00","$ebef8a20963d596b$export$85c928794f8d04d4","$ebef8a20963d596b$export$50792b0e93539fde","$ebef8a20963d596b$export$83d89fbfd8236492","$ebef8a20963d596b$export$98e6a39c04603d36","$ebef8a20963d596b$export$61f24eb03dd7ce92","$ebef8a20963d596b$export$5f8c09e3ae6f64e1","$ebef8a20963d596b$var$astralIdentifierCodes","$ebef8a20963d596b$var$astralIdentifierStartCodes","$ebef8a20963d596b$var$nonASCIIidentifierStartChars","$ebef8a20963d596b$var$reservedWords","strictBind","$ebef8a20963d596b$var$ecma5AndLessKeywords","$ebef8a20963d596b$var$keywords$1","$ebef8a20963d596b$var$keywordRelationalOperator","$ebef8a20963d596b$var$nonASCIIidentifierStart","$ebef8a20963d596b$var$nonASCIIidentifier","$ebef8a20963d596b$var$isInAstralSet","astral","conf","startsExpr","updateContext","$ebef8a20963d596b$var$binop","$ebef8a20963d596b$var$beforeExpr","$ebef8a20963d596b$var$startsExpr","$ebef8a20963d596b$var$kw","privateId","questionDot","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","star","starstar","coalesce","_const","_super","_extends","_export","_import","_instanceof","_typeof","_void","_delete","$ebef8a20963d596b$var$nextLineBreak","$ebef8a20963d596b$var$skipWhiteSpace","$ebef8a20963d596b$var$ref","$ebef8a20963d596b$var$hasOwnProperty","$ebef8a20963d596b$var$toString","$ebef8a20963d596b$var$hasOwn","hasOwn","propName","$ebef8a20963d596b$var$isArray","$ebef8a20963d596b$var$wordsRegexp","$ebef8a20963d596b$var$codePointToString","$ebef8a20963d596b$var$loneSurrogate","nextBreak","onInsertedSemicolon","onTrailingComma","allowReserved","allowImportExportEverywhere","allowAwaitOutsideFunction","allowSuperOutsideMethod","allowHashBang","checkPrivateFields","onToken","$ebef8a20963d596b$var$warnedAboutEcmaVersion","$ebef8a20963d596b$var$functionFlags","generator","$ebef8a20963d596b$var$SCOPE_FUNCTION","startPos","$ebef8a20963d596b$var$getOptions","console","warn","tokens","token","comment","keywords","reserved","reservedWords","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","lineStart","curLine","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","potentialArrowInForAwait","yieldPos","awaitPos","awaitIdentPos","undefinedExports","scopeStack","enterScope","regexpState","privateNameStack","$ebef8a20963d596b$var$prototypeAccessors","inGenerator","inAsync","canAwait","allowSuper","allowDirectSuper","treatFunctionsAsVar","allowNewDotTarget","inClassStaticBlock","nextToken","currentVarScope","inClassFieldInit","currentThisScope","treatFunctionsAsVarInScope","currentScope","plugins","cls","parseExpressionAt","tokenizer","defineProperties","$ebef8a20963d596b$var$pp$9","$ebef8a20963d596b$var$literal","spaceAfter","isContextual","eatContextual","expectContextual","insertSemicolon","afterTrailingComma","notNext","$ebef8a20963d596b$var$DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","$ebef8a20963d596b$var$pp$8","adaptDirectivePrologue","$ebef8a20963d596b$var$loopLabel","$ebef8a20963d596b$var$switchLabel","isLet","skip","nextCh","ident","isAsyncFunction","after","topLevel","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","parseExpressionStatement","parseImport","parseExport","parseLabeledStatement","awaitAt","init$1","await","startsWithLet","isForOf","toAssignable","checkLValPattern","isAsync","declarationPosition","$ebef8a20963d596b$var$FUNC_STATEMENT","$ebef8a20963d596b$var$FUNC_HANGING_STATEMENT","exitScope","$ebef8a20963d596b$var$empty$1","parseCatchClauseParam","parseBindingAtom","simple","allowMissingInitializer","i$1","label$1","statementStart","createNewLexicalScope","exitStrict","isForIn","isFor","parseVarId","$ebef8a20963d596b$var$checkKeyName","statement","allowExpressionBody","forInit","initFunction","checkLValSimple","oldYieldPos","oldAwaitPos","oldAwaitIdentPos","parseFunctionParams","parseFunctionBody","parseBindingList","parseClassId","parseClassSuper","privateNameMap","enterClassBody","classBody","hadConstructor","parseClassElement","superClass","$ebef8a20963d596b$var$isPrivateNameConflicted","curr","static","exitClassBody","constructorAllowsSuper","keyName","isGenerator","isStatic","parseClassStaticBlock","isClassElementNameStart","lastValue","startNodeAt","parseClassElementName","isConstructor","parseClassMethod","parseClassField","parsePrivateIdent","allowsDirectSuper","parseMethod","$ebef8a20963d596b$var$SCOPE_CLASS_STATIC_BLOCK","parseExprSubscripts","declared","used","parseExportAllDeclaration","exported","parseModuleExportName","checkExport","parseExportDefaultDeclaration","shouldParseExportStatement","parseExportDeclaration","checkVariableExport","parseExportSpecifiers","spec","checkUnreserved","local","checkLocalExport","fNode","cNode","checkPatternExport","pat","list$1","elt","decls","parseExportSpecifier","parseImportSpecifiers","parseImportSpecifier","imported","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","stringLiteral","parseLiteral","statements","isDirectiveCandidate","directive","$ebef8a20963d596b$var$pp$7","isBinding","toAssignableList","exprList","parseSpread","parseRestBinding","allowModifiers","rest","parseBindingListItem","parseAssignableListItem","elem","parseMaybeDefault","bindingType","checkClashes","isBind","declareName","checkLValInnerPattern","isExpr","preserveSpace","override","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","$ebef8a20963d596b$var$pp$6","curContext","braceIsBlock","prevType","inGeneratorContext","overrideContext","tokenCtx","statementParens","allowed","$ebef8a20963d596b$var$pp$5","checkPropClash","propHash","shorthand","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldDoubleProto","parseExprOps","leftStartPos","leftStartLoc","logical","buildBinary","sawUnary","parseAwait","$ebef8a20963d596b$var$isPrivateFieldAccess","node$1","maybeAsyncArrow","optionalChained","parseSubscript","optional","chainNode","shouldParseAsyncArrow","parseSubscriptAsyncArrow","parseArrowExpression","optionalSupported","node$2","quasi","parseTemplate","isTagged","forNew","canBeArrow","regex","pattern","parseParenAndDistinguishExpression","parseNew","parseExprImport","parseExprAtomDefault","parseImportMeta","parseDynamicImport","errorPos","bigint","shouldParseArrow","spreadStart","innerStartPos","innerStartLoc","lastIsComma","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","$ebef8a20963d596b$var$empty","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","parseGetterSetter","paramCount","copyNode","isArrowFunction","isMethod","isExpression","useStrict","checkParams","nonSimple","isSimpleParamList","allowDuplicates","nameHash","re","parseIdentNode","delegate","$ebef8a20963d596b$var$pp$4","$ebef8a20963d596b$var$pp$3","$ebef8a20963d596b$var$Scope","var","lexical","redeclared","scope$1","scope$2","scope$3","$ebef8a20963d596b$var$SCOPE_TOP","$ebef8a20963d596b$var$pp$2","$ebef8a20963d596b$var$finishNodeAt","newNode","$ebef8a20963d596b$var$ecma9BinaryProperties","$ebef8a20963d596b$var$ecma10BinaryProperties","$ebef8a20963d596b$var$ecma12BinaryProperties","$ebef8a20963d596b$var$ecma11BinaryProperties","$ebef8a20963d596b$var$unicodeBinaryProperties","$ebef8a20963d596b$var$unicodeBinaryPropertiesOfStrings","$ebef8a20963d596b$var$unicodeGeneralCategoryValues","$ebef8a20963d596b$var$ecma9ScriptValues","$ebef8a20963d596b$var$ecma10ScriptValues","$ebef8a20963d596b$var$ecma11ScriptValues","$ebef8a20963d596b$var$ecma12ScriptValues","$ebef8a20963d596b$var$ecma13ScriptValues","$ebef8a20963d596b$var$unicodeScriptValues","$ebef8a20963d596b$var$data","$ebef8a20963d596b$var$i","$ebef8a20963d596b$var$list","$ebef8a20963d596b$var$buildUnicodeData","binary","binaryOfStrings","nonBinary","General_Category","Script","Script_Extensions","gc","sc","scx","$ebef8a20963d596b$var$pp$1","$ebef8a20963d596b$var$RegExpValidationState","validFlags","unicodeProperties","switchU","switchV","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","$ebef8a20963d596b$var$isSyntaxCharacter","$ebef8a20963d596b$var$isControlLetter","$ebef8a20963d596b$var$isUnicodePropertyNameCharacter","$ebef8a20963d596b$var$isDecimalDigit","$ebef8a20963d596b$var$isHexDigit","$ebef8a20963d596b$var$hexToInt","$ebef8a20963d596b$var$isOctalDigit","unicodeSets","unicode","at","forceU","nextIndex","lookahead","advance","eatChars","chs","validateRegExpFlags","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","regexp_classContents","regexp_classSetExpression","regexp_nonEmptyClassRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","regexp_eatClassControlLetter","subResult","regexp_eatClassSetRange","regexp_eatClassSetOperand","regexp_eatClassSetCharacter","regexp_eatClassStringDisjunction","regexp_eatNestedClass","result$1","regexp_classStringDisjunctionContents","regexp_classString","regexp_eatClassSetReservedPunctuator","regexp_eatOctalDigit","n1","n2","$ebef8a20963d596b$var$pp","$ebef8a20963d596b$var$stringToBigInt","BigInt","ignoreEscapeSequenceInKeyword","iterator","this$1$1","done","fullCharCodeAtPos","startSkip","readToken_dot","next2","readToken_slash","readToken_mult_modulo_exp","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readToken_question","next2$1","readToken_numberSign","readRadixNumber","flagsStart","maybeLegacyOctalNumericLiteral","allowSeparators","isLegacyOctalNumericLiteral","lastCode","val$1","readCodePoint","codePos","invalidStringToken","chunkStart","readEscapedChar","$ebef8a20963d596b$var$INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","inTemplate","octalStr","escStart","Parser","Position","SourceLocation","Node","TokenType","TokContext","tokContexts","Token","isNewLine","lineBreakG","$939de03a128aab09$var$container","$939de03a128aab09$var$dialog","$939de03a128aab09$var$help","showModal","scrollIntoView","$f9704a9315db2cf5$export$2e2bcd8739ae039","selfOptions","pipes","pipe","pipeArg","processor","lastPipe","nextPipe","nextAfterChildren","hasResult","$db70c9b12a6f8bc7$export$2e2bcd8739ae039","filters","debug","filterName","exiting","resultCheck","msg","shouldHaveResult","should","noResult","$3edc4ef7a3d3a79b$export$2e2bcd8739ae039","setResult","exit","childName","root","$d440259d33c9db26$export$2e2bcd8739ae039","$d440259d33c9db26$var$cloneRegExp","regexMatch","cloned","$48416cc6139cbfbf$export$2e2bcd8739ae039","cloneDiffValues","$e645679292d8fd1a$export$2e2bcd8739ae039","$844ff08f78aab5df$export$2e2bcd8739ae039","$71e2687afe4daedd$export$32e2de1ca8818233","leftType","rightType","leftIsArray","rightIsArray","$71e2687afe4daedd$export$b17cd1eea2ef8348","nested","nonNestedDelta","regexArgs","$71e2687afe4daedd$export$9d101d90be8482a0","$7267f6eb1402e2a0$export$3b212405c262fd6e","_t","$7267f6eb1402e2a0$export$81d88d7d212bb18e","propertyFilter","$7267f6eb1402e2a0$export$b17cd1eea2ef8348","nestedDelta","objectDelta","$7267f6eb1402e2a0$export$575f4633982343e8","deltaWithChildren","$7267f6eb1402e2a0$export$9d101d90be8482a0","$7267f6eb1402e2a0$export$84a677efe7258d3b","$abe215c5cb589d56$var$defaultMatch","array1","array2","$abe215c5cb589d56$var$lengthMatrix","len1","len2","$abe215c5cb589d56$var$backtrack","subsequence","sequence","indices1","indices2","valueAtMatrixAbove","$abe215c5cb589d56$export$2e2bcd8739ae039","innerContext","$b7d0574ca28909b0$var$matchItems","objectHash","matchByPosition","hashCache1","hash1","hashCache2","hash2","$b7d0574ca28909b0$export$32e2de1ca8818233","matchContext","commonHead","commonTail","$b7d0574ca28909b0$var$arraysHaveMatchByRef","trimmed1","trimmed2","seq","removedItems","detectMove","arrays","includeValueOnMove","removedItemsLength","indexOnArray2","isMove","removeItemIndex1","$b7d0574ca28909b0$var$compare","numerically","numericallyBy","$b7d0574ca28909b0$export$b17cd1eea2ef8348","toRemove","toInsert","toModify","removedOrMovedIndex","numberIndex","indexDiff","removedValue","toInsertLength","toModifyLength","modification","$b7d0574ca28909b0$export$575f4633982343e8","$b7d0574ca28909b0$export$9d101d90be8482a0","newName","arrayMoveDelta","arrayDelta","$b7d0574ca28909b0$var$reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","$b7d0574ca28909b0$export$84a677efe7258d3b","$dcc7ee756dde640c$export$32e2de1ca8818233","$020c031f57b856e2$var$cachedDiffPatch","$020c031f57b856e2$var$getDiffMatchPatch","required","textDiff","diffMatchPatch","diff_match_patch_not_found","txt1","txt2","patch_toText","patch_make","patch","patch_apply","patch_fromText","textPatchFailed","$020c031f57b856e2$export$32e2de1ca8818233","minLength","$020c031f57b856e2$export$b17cd1eea2ef8348","textDiffDelta","$020c031f57b856e2$var$textDeltaReverse","lineTmp","header","headerRegex","$020c031f57b856e2$export$9d101d90be8482a0","$6a493659b38be18b$export$2e2bcd8739ae039","unpatch","$a39eeb69bf620de6$var$zero$1","buf","$a39eeb69bf620de6$var$extra_lbits","Uint8Array","$a39eeb69bf620de6$var$extra_dbits","$a39eeb69bf620de6$var$extra_blbits","$a39eeb69bf620de6$var$bl_order","$a39eeb69bf620de6$var$static_ltree","$a39eeb69bf620de6$var$static_dtree","$a39eeb69bf620de6$var$D_CODES$1","$a39eeb69bf620de6$var$_dist_code","$a39eeb69bf620de6$var$_length_code","$a39eeb69bf620de6$var$MAX_MATCH$1","$a39eeb69bf620de6$var$base_length","$a39eeb69bf620de6$var$base_dist","$a39eeb69bf620de6$var$StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","$a39eeb69bf620de6$var$TreeDesc","dyn_tree","stat_desc","max_code","$a39eeb69bf620de6$var$d_code","$a39eeb69bf620de6$var$put_short","pending_buf","pending","$a39eeb69bf620de6$var$send_bits","bi_valid","$a39eeb69bf620de6$var$Buf_size","bi_buf","$a39eeb69bf620de6$var$send_code","tree","$a39eeb69bf620de6$var$bi_reverse","$a39eeb69bf620de6$var$bi_flush","$a39eeb69bf620de6$var$gen_bitlen","bits","xbits","stree","extra","bl_count","heap","heap_max","opt_len","static_len","$a39eeb69bf620de6$var$gen_codes","next_code","$a39eeb69bf620de6$var$MAX_BITS$1","$a39eeb69bf620de6$var$tr_static_init","$a39eeb69bf620de6$var$LENGTH_CODES$1","$a39eeb69bf620de6$var$L_CODES$1","$a39eeb69bf620de6$var$LITERALS$1","$a39eeb69bf620de6$var$init_block","dyn_ltree","dyn_dtree","bl_tree","$a39eeb69bf620de6$var$END_BLOCK","sym_next","$a39eeb69bf620de6$var$bi_windup","$a39eeb69bf620de6$var$smaller","depth","_n2","_m2","$a39eeb69bf620de6$var$pqdownheap","heap_len","$a39eeb69bf620de6$var$compress_block","ltree","dtree","lc","sym_buf","$a39eeb69bf620de6$var$build_tree","$a39eeb69bf620de6$var$scan_tree","curlen","prevlen","nextlen","max_count","min_count","$a39eeb69bf620de6$var$REP_3_6","$a39eeb69bf620de6$var$REPZ_3_10","$a39eeb69bf620de6$var$REPZ_11_138","$a39eeb69bf620de6$var$send_tree","$a39eeb69bf620de6$var$build_bl_tree","max_blindex","l_desc","d_desc","bl_desc","$a39eeb69bf620de6$var$BL_CODES$1","$a39eeb69bf620de6$var$send_all_trees","lcodes","dcodes","blcodes","rank","$a39eeb69bf620de6$var$detect_data_type","block_mask","$a39eeb69bf620de6$var$static_init_done","$a39eeb69bf620de6$var$_tr_stored_block$1","stored_len","$a39eeb69bf620de6$var$STORED_BLOCK","subarray","$a39eeb69bf620de6$var$trees","_tr_init","_tr_stored_block","_tr_flush_block","opt_lenb","static_lenb","level","strm","data_type","strategy","$a39eeb69bf620de6$var$STATIC_TREES","$a39eeb69bf620de6$var$DYN_TREES","_tr_tally","sym_end","_tr_align","$a39eeb69bf620de6$var$adler32_1","adler","$a39eeb69bf620de6$var$crcTable","Uint32Array","$a39eeb69bf620de6$var$makeTable","table","$a39eeb69bf620de6$var$crc32_1","crc","$a39eeb69bf620de6$var$messages","$a39eeb69bf620de6$var$constants$2","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","$a39eeb69bf620de6$var$_tr_init","$a39eeb69bf620de6$var$_tr_stored_block","$a39eeb69bf620de6$var$_tr_flush_block","$a39eeb69bf620de6$var$_tr_tally","$a39eeb69bf620de6$var$_tr_align","$a39eeb69bf620de6$var$Z_NO_FLUSH$2","$a39eeb69bf620de6$var$Z_PARTIAL_FLUSH","$a39eeb69bf620de6$var$Z_FULL_FLUSH$1","$a39eeb69bf620de6$var$Z_FINISH$3","$a39eeb69bf620de6$var$Z_BLOCK$1","$a39eeb69bf620de6$var$Z_OK$3","$a39eeb69bf620de6$var$Z_STREAM_END$3","$a39eeb69bf620de6$var$Z_STREAM_ERROR$2","$a39eeb69bf620de6$var$Z_DATA_ERROR$2","$a39eeb69bf620de6$var$Z_BUF_ERROR$1","$a39eeb69bf620de6$var$Z_DEFAULT_COMPRESSION$1","$a39eeb69bf620de6$var$Z_FILTERED","$a39eeb69bf620de6$var$Z_HUFFMAN_ONLY","$a39eeb69bf620de6$var$Z_RLE","$a39eeb69bf620de6$var$Z_FIXED","$a39eeb69bf620de6$var$Z_DEFAULT_STRATEGY$1","$a39eeb69bf620de6$var$Z_UNKNOWN","$a39eeb69bf620de6$var$Z_DEFLATED$2","$a39eeb69bf620de6$var$err","errorCode","$a39eeb69bf620de6$var$rank","$a39eeb69bf620de6$var$zero","$a39eeb69bf620de6$var$slide_hash","wsize","w_size","hash_size","$a39eeb69bf620de6$var$HASH","hash_shift","hash_mask","$a39eeb69bf620de6$var$flush_pending","avail_out","output","pending_out","next_out","total_out","$a39eeb69bf620de6$var$flush_block_only","block_start","strstart","$a39eeb69bf620de6$var$put_byte","$a39eeb69bf620de6$var$putShortMSB","$a39eeb69bf620de6$var$read_buf","avail_in","next_in","wrap","total_in","$a39eeb69bf620de6$var$longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","$a39eeb69bf620de6$var$MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","match_start","$a39eeb69bf620de6$var$fill_window","more","_w_size","window_size","ins_h","$a39eeb69bf620de6$var$deflate_stored","flush","min_block","pending_buf_size","have","high_water","$a39eeb69bf620de6$var$deflate_fast","hash_head","bflush","match_length","max_lazy_match","$a39eeb69bf620de6$var$MIN_MATCH","$a39eeb69bf620de6$var$deflate_slow","max_insert","prev_match","match_available","$a39eeb69bf620de6$var$deflate_rle","$a39eeb69bf620de6$var$deflate_huff","$a39eeb69bf620de6$var$Config","good_length","max_lazy","nice_length","max_chain","$a39eeb69bf620de6$var$configuration_table","$a39eeb69bf620de6$var$lm_init","$a39eeb69bf620de6$var$DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","Uint16Array","$a39eeb69bf620de6$var$HEAP_SIZE","$a39eeb69bf620de6$var$MAX_BITS","lit_bufsize","$a39eeb69bf620de6$var$deflateStateCheck","$a39eeb69bf620de6$var$deflateResetKeep","$a39eeb69bf620de6$var$deflateReset","ret","$a39eeb69bf620de6$var$deflateInit2","windowBits","memLevel","$a39eeb69bf620de6$var$deflate_1$2","deflateInit","deflateInit2","deflateReset","deflateResetKeep","deflateSetHeader","deflate","old_flush","level_flags","hcrc","beg","gzhead_extra","bstate","deflateEnd","deflateSetDictionary","dictLength","tmpDict","avail","deflateInfo","$a39eeb69bf620de6$var$_has","$a39eeb69bf620de6$var$common","TypeError","flattenChunks","chunks","chunk","$a39eeb69bf620de6$var$STR_APPLY_UIA_OK","__","$a39eeb69bf620de6$var$_utf8len","$a39eeb69bf620de6$var$buf2binstring","$a39eeb69bf620de6$var$strings","string2buf","TextEncoder","encode","m_pos","str_len","buf_len","buf2string","TextDecoder","decode","utf16buf","c_len","utf8border","$a39eeb69bf620de6$var$zstream","$a39eeb69bf620de6$var$toString$1","$a39eeb69bf620de6$var$Z_NO_FLUSH$1","$a39eeb69bf620de6$var$Z_SYNC_FLUSH","$a39eeb69bf620de6$var$Z_FULL_FLUSH","$a39eeb69bf620de6$var$Z_FINISH$2","$a39eeb69bf620de6$var$Z_OK$2","$a39eeb69bf620de6$var$Z_STREAM_END$2","$a39eeb69bf620de6$var$Z_DEFAULT_COMPRESSION","$a39eeb69bf620de6$var$Z_DEFAULT_STRATEGY","$a39eeb69bf620de6$var$Z_DEFLATED$1","$a39eeb69bf620de6$var$Deflate$1","chunkSize","gzip","ended","dict","_dict_set","$a39eeb69bf620de6$var$deflate$1","deflator","flush_mode","_flush_mode","onData","onEnd","$a39eeb69bf620de6$var$inffast","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","from_source","lencode","distcode","lenbits","distbits","sane","$a39eeb69bf620de6$var$lbase","$a39eeb69bf620de6$var$lext","$a39eeb69bf620de6$var$dbase","$a39eeb69bf620de6$var$dext","$a39eeb69bf620de6$var$inftrees","lens","lens_index","codes","table_index","work","incr","low","mask","here_bits","here_op","here_val","sym","drop","huff","$a39eeb69bf620de6$var$MAXBITS","offs","$a39eeb69bf620de6$var$Z_FINISH$1","$a39eeb69bf620de6$var$Z_BLOCK","$a39eeb69bf620de6$var$Z_TREES","$a39eeb69bf620de6$var$Z_OK$1","$a39eeb69bf620de6$var$Z_STREAM_END$1","$a39eeb69bf620de6$var$Z_NEED_DICT$1","$a39eeb69bf620de6$var$Z_STREAM_ERROR$1","$a39eeb69bf620de6$var$Z_DATA_ERROR$1","$a39eeb69bf620de6$var$Z_MEM_ERROR$1","$a39eeb69bf620de6$var$Z_BUF_ERROR","$a39eeb69bf620de6$var$Z_DEFLATED","$a39eeb69bf620de6$var$zswap32","$a39eeb69bf620de6$var$InflateState","havedict","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","$a39eeb69bf620de6$var$inflateStateCheck","$a39eeb69bf620de6$var$inflateResetKeep","Int32Array","$a39eeb69bf620de6$var$inflateReset","$a39eeb69bf620de6$var$inflateReset2","$a39eeb69bf620de6$var$inflateInit2","$a39eeb69bf620de6$var$virgin","$a39eeb69bf620de6$var$fixedtables","$a39eeb69bf620de6$var$updatewindow","$a39eeb69bf620de6$var$inflate_1$2","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInit2","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflateInfo","$a39eeb69bf620de6$var$gzheader","$a39eeb69bf620de6$var$toString","$a39eeb69bf620de6$var$Z_NO_FLUSH","$a39eeb69bf620de6$var$Z_FINISH","$a39eeb69bf620de6$var$Z_OK","$a39eeb69bf620de6$var$Z_STREAM_END","$a39eeb69bf620de6$var$Z_NEED_DICT","$a39eeb69bf620de6$var$Z_STREAM_ERROR","$a39eeb69bf620de6$var$Z_DATA_ERROR","$a39eeb69bf620de6$var$Z_MEM_ERROR","$a39eeb69bf620de6$var$Inflate$1","$a39eeb69bf620de6$var$inflate$1","inflator","last_avail_out","next_out_utf8","utf8str","Deflate","$a39eeb69bf620de6$var$Deflate","$a39eeb69bf620de6$var$deflate","deflateRaw","$a39eeb69bf620de6$var$deflateRaw","$a39eeb69bf620de6$var$gzip","constants","Inflate","$a39eeb69bf620de6$var$Inflate","$a39eeb69bf620de6$var$inflate","inflateRaw","$a39eeb69bf620de6$var$inflateRaw","ungzip","$a39eeb69bf620de6$var$ungzip","$a39eeb69bf620de6$export$2e2bcd8739ae039","$389f2dcfbe95c865$exports","factory","limit$2","classToType","type$p","PI$2","utils","clip_rgb","_clipped","_unclipped","limit$1","unpack","keyOrder","type$o","type$n","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","input$h","format","autodetect","last$3","clip_rgb$2","type$m","Color$D","_input","chk","me","_rgb","chroma$k","unpack$A","max$2","unpack$z","unpack$y","type$l","rgb2cmyk","Color$C","cmyk","chroma$j","input$g","unpack$x","last$2","rnd","unpack$w","rgb2hsl_1","Number","unpack$v","last$1","hsl2css","hsla","round$6","unpack$u","round$5","hsl2rgb_1","h_","RE_RGB","RE_RGBA","RE_RGB_PCT","RE_RGBA_PCT","RE_HSL","RE_HSLA","round$4","css2rgb$1","css","input$f","named","rgb$1","rgb$2","i$2","rgb$3","i$3","rgb$4","hsl2rgb","hsl$1","rgb$5","type$k","rgb2css","rgba","rgb2hsl$2","Color$B","chroma$i","input$e","css2rgb","unpack$t","input$d","gl","chroma$h","Color$A","unpack$s","unpack$r","floor$3","unpack$q","type$j","rgb2hcg","Color$z","hcg","chroma$g","input$c","assign$1","assign$2","assign$3","assign$4","assign$5","_g","unpack$p","round$3","rgb2hex_1","hxa","RE_HEX","RE_HEXA","hex2rgb_1","u$1","type$i","Color$y","rgb2hex$1","chroma$f","input$b","unpack$o","TWOPI$2","min$2","sqrt$4","unpack$n","TWOPI$1","cos$4","unpack$m","type$h","rgb2hsi","min_","Color$x","hsi","chroma$e","input$a","unpack$l","type$g","Color$w","rgb2hsl$1","chroma$d","input$9","unpack$k","min$1","max$1","unpack$j","floor$2","unpack$i","type$f","rgb2hsv","max_","Color$v","hsv","chroma$c","input$8","labConstants","Kn","Xn","Yn","Zn","unpack$h","pow$a","rgb_xyz","xyz_lab","LAB_CONSTANTS$3","rgb2lab_1","ref$1","unpack$g","pow$9","xyz_rgb","lab_xyz","LAB_CONSTANTS$2","lab2rgb_1","unpack$f","type$e","Color$u","rgb2lab$1","chroma$b","input$7","unpack$e","sqrt$3","atan2$2","round$2","lab2lch_1","unpack$d","unpack$c","sin$3","cos$3","lch2lab_1","unpack$b","lch2rgb_1","lch2lab$1","lab2rgb","unpack$a","unpack$9","type$d","rgb2lch","rgb2lab","lab2lch$1","Color$t","lch","hcl","chroma$a","input$6","lch2rgb","w3cx11_1","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflower","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","laserlemon","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrod","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","maroon2","maroon3","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","purple2","purple3","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","type$c","Color$s","rgb2hex","w3cx11","input$5","hex2rgb","unpack$8","type$b","type$a","rgb2num","Color$r","chroma$9","input$4","unpack$7","type$9","round$1","Color$q","chroma$8","input$3","log$1","temperature2rgb_1","kelvin","unpack$6","rgb2temperature","minTemp","maxTemp","temperature2rgb","Color$p","temperature","chroma$7","input$2","unpack$5","cbrt","pow$8","sign$1","rgb2oklab_1","rgb2lrgb","lr","lg","lb","unpack$4","pow$7","oklab2rgb_1","L","lrgb2rgb","unpack$3","type$8","Color$o","oklab","rgb2oklab$1","chroma$6","input$1","unpack$2","unpack$1","type$7","rgb2oklch","rgb2oklab","lab2lch","Color$n","oklch","chroma$5","lch2lab","oklab2rgb","type$6","Color$m","mutate","Color$l","Color$k","LAB_CONSTANTS$1","brighten","darker","brighter","Color$j","mc","channel","type$5","pow$6","Color$i","luminance","lum","cur_lum","max_iter","high","lm","rgb2luminance","luminance_x","interpolator$1","type$4","mix$1","col1","col2","interpolator","Color$g","mix","Color$f","premultiply","Color$e","saturate","LAB_CONSTANTS","desaturate","type$3","Color$d","xyz0","xyz1","sqrt$2","pow$5","lrgb","z1","z2","_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","lbv","dh","interpolate_hsx$5","interpolate_hsx$4","interpolate_hsx$3","interpolate_hsx$2","interpolate_hsx$1","interpolate_hsx","clip_rgb$1","pow$4","sqrt$1","PI$1","cos$2","sin$2","atan2$1","_average_lrgb","colors","xyz","type$2","pow$3","scale$2","_mode","_nacol","chroma$4","_spread","_domain","_pos","_padding","_classes","_colors","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","c$1","resetCache","getClass","tMapLightness","tMapDomain","bypassMap","classes","analyze","limits","domain","tOut","tBreaks","every","_m","_o","spread","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","numColors","dm","dd","__range__","inclusive","ascending","samples","asc","gamma","nodata","binom_row","row","newrow","bezier","I","lab0","lab1","lab2","lab3","labs","RangeError","blend","blend_f","chroma$3","dodge","burn","type$1","pow$2","sin$1","cos$1","floor$1","pow$1","abs$1","MAX_VALUE","min_log","LOG10E","max_log","pb","pr","cluster","assignments","clusterSizes","repeat","nb_iters","centroids","i$4","mindist","best","j$1","newCentroids","j$2","i$5","j$3","j$4","kClusters","j$5","i$6","tmpKMeansBreaks","j$6","i$7","analyze_1","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","chroma","cnt","ci","xyz2","A$1","scale$1","cubehelix","rotations","lightness","dl","fract","amp","cos_a","sin_a","chroma$2","digits","contrast","deltaE","Kl","Kc","Kh","rad2deg","deg2rad","deg","L2","avgL","avgC","C1","G","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","T","deltaHp","deltaCp","sl","sh","deltaTheta","Rt","deltaL","sum_sq","scales","cool","chroma$1","hot","$hvNIE","$3e2f0fa58ba587b4$var$location","$3e2f0fa58ba587b4$export$281ad3752a540efe","URLSearchParams","$3e2f0fa58ba587b4$export$128fa18b7194ef","URL","$3e2f0fa58ba587b4$export$1bb10639a2cd4297","$3e2f0fa58ba587b4$export$9cb4719e2e525b7a","$3e2f0fa58ba587b4$export$afb15ede80c42aab","binString","atob","codePointAt","$3e2f0fa58ba587b4$export$4e633de97d65d1c8","fromCodePoint","$3e2f0fa58ba587b4$export$9a00dee1beb8f576","$3e2f0fa58ba587b4$export$6e5538615c060df7","findLast","xv","yv","$3e2f0fa58ba587b4$export$e3bf03cc76d2c0a1","detail","dispatchEvent","CustomEvent","$3e2f0fa58ba587b4$export$c23f9d3341b5fd07","pointA","pointB","maxDiff","$3e2f0fa58ba587b4$export$3cb91a81090b9eee","span","classList","backgroundColor","title","$3e2f0fa58ba587b4$export$6d3741128bd5bb7d","some","maxColorIndex","plus","$3e2f0fa58ba587b4$export$79376507b09a66f","$3e2f0fa58ba587b4$export$f6292fcace2a1886","$3e2f0fa58ba587b4$export$78da85ac75754159","$3e2f0fa58ba587b4$export$bd58da2e19cd17da","direction","$3e2f0fa58ba587b4$export$c43d7a950587702b","$3e2f0fa58ba587b4$export$35d6177dfa7903b5","toPaperJs","$3e2f0fa58ba587b4$export$43941667eccc070","$3e2f0fa58ba587b4$export$8793edee2d425525","base64decode","base64encode","$f1fc5431671d3192$var$console","$f1fc5431671d3192$var$consoleDebug","$f1fc5431671d3192$export$1c9f709888824e05","has","$ca914ef976dd611b$export$2e382909194b1aab","toAxialCoordinates","$fe48dca2d228a457$export$c56d3ccff2456440","isNeighbor","neighbor","directions","toOffsetCoordinates","axial","$ca3880ece69ea231$export$654f18991713c8c4","setState","getState","structuredClone","updateState","updater","Events","Update","freeze","$4b738c6f333de3e1$export$6d08773d2e66f8f2","uniqueId","sortOrder","configuration","otherItem","getColorElements","getCompoundPath","collidable","onTap","onCollision","collisionStep","onDeselected","onInitialization","onSelected","Types","fromEntries","$8ee30938c07750df$export$b20b719ec758a20f","$97686966a3fec53f$export$94affb487e701bf2","hasKeys","includes","unset","$4f41d74d72b0a295$export$b0d759d807f751d4","CacheKeys","eventListener","onPointerUp","onPointerDown","onPointerMove","onMouseWheel","offsetX","offsetY","deltaY","onPan","pan","getGesture","GestureKeys","Pan","setGesture","onPinch","pointer0","pointer1","point0","pinch","Pinch","Down","pointerId","Move","Gesture","Tap","maxZoom","minZoom","touchPoint","touchOffset","zoomOffset","vibratePattern","$890ebaa4ee6ae241$var$modifiersImmutable","$890ebaa4ee6ae241$var$modifiersMutable","$890ebaa4ee6ae241$var$navigator","$890ebaa4ee6ae241$var$uniqueId","$890ebaa4ee6ae241$export$5acd5e6efc9671b7","selectionTime","timeoutId","immutable","tile","li","deselect","modifier","addModifier","moveFilter","afterModify","Deselected","button","onToggle","lock","clearTimeout","vibrate","$b65a2f5625db2a92$export$a9753b1ffc289935","Mask","onMask","beforeModify","maskOnTap","tileFilter","removeModifier","toggle","puzzle","fromTile","updateSelectedTile","unmask","Moved","selectedModifier","querySelector","Invoked","$6b5ed925b0615466$export$e49a5ad3dd6df925","movable","onUnmask","moveItems","moved","tiles","beam","toTile","$6b5ed925b0615466$export$1288a4f7eae890b0","SuperClass","removeItem","addItem","onMove","$0b4b4185562e5b04$export$fd55ce593607084a","connected","onAdd","onRemove","pathIndex","segmentIndex","$0b4b4185562e5b04$export$81262d6ca0162a3","Class","find","Reflect","construct","Collision","collision","Filter","MergeInto","mergeInto","MergeWith","mergeWith","Portal","portal","entryPortal","exitPortal","Reflector","reflector","TerminusConnection","terminusConnection","terminus","opening","$b9391c61de18417d$export$ec91da630f36d5ea","parameters","circumradius","currentStep","nextStep","$94a7df60cff9f28b$export$152db69a76b6b79e","Names","rotatable","$94a7df60cff9f28b$export$781de49a9284d537","rotationDegrees","getMaxRotation","getDirection","rotateGroup","$9a8fa6fd25778435$export$602eac185826482c","ring","pointer","portalState","stepIndex","entryDirection","existing","stateId","destinationId","moves","destinations","getExitDirection","getStep","destinationTiles","addStep","destinationTile","$90288bbda8776a08$export$bea8ebba691c5813","toggled","toggleable","$90288bbda8776a08$export$cdb1ce8c4b8a5afe","$74097bbf14237549$export$88c9f72b40fcdd85","itemIds","withSelf","mirror","$74097bbf14237549$export$20aab196240bbdf2","beams","getColors","$5625a4a7d65ce9b8$export$693b33588b3dd9d8","steps","lastStepIndex","getLastStepIndex","currentPath","previousStep","getItemIndex","getCollision","getOpening","getSteps","getMergeWith","openings","isComplete","isOn","isConnected","isPending","onBeamUpdated","beamLastStep","lastStep","isSelf","findLastIndex","stepPoint","nextStepPoint","isSameSide","isSameDirection","getBeamsUpdateDelay","updateHistory","onModifierInvoked","findIndex","startDirection","currentStepIndex","inradius","getTile","updateStep","nextStepIndex","existingNextStep","lastPathIndex","lastSegmentIndex","getCollisions","collisionIndex","timeout","updatedStep","getUpdatedStep","firstPoint","curveLocation","Set","intersection","drawDebugPoint","spliceIndex","deletedSteps","Connection","Merge","$7a376349f5a360a3$export$3ad31a823e05e6fb","ui","flatMap","Opening","directionFrom","onConnection","onDisconnection","connect","disconnect","Disconnection","openingOffOpacity","$833b17827b418a5b$export$edf083caefbff926","midLine","directionTo","beamDirection","reflectorDirection","beamAngle","$3e2f0fa58ba587b4$export$1a23559e655dacdd","original","reflectorAngle","$62983545fa7e5cd3$export$cb4338d67ffa8a1d","walls","firstSegment","hexagon","nextDirection","lastSegment","$1f91e29af141027d$export$4b0ab9e4fad38dea","$7b23092ccd74af51$export$5b9db7ce80343746","$7e06163ac6e6af1b$export$bdb5f0a1b77546f4","toItems","fromItems","$644ce6e6cc7a5abb$export$235cb65c20ad2b7","layout","indicator","wall","swap","selectedTile","deselectedTile","teardown","startingOffsetX","startingOffsetY","dashWidth","Styles","edit","Selected","$941a4b5ec82b485b$export$c84671f46d6a1ca","tilesByAxial","tilesByOffset","layers","tileSize","oddR","widestRow","isOffsetRow","rowByAxial","rowByOffset","rowOffset","getTileByAxial","getTileByOffset","getNeighboringTile","evenR","$4029f0d6ba5141b4$export$991dcf7284de63d","$729c2b05fa2dedeb$export$88c9f72b40fcdd85","$df74fd5b33098157$var$configuration","entries","solution","test_infinite_loop","test_layout","$e7b83e5b200e5307$var$layout","test_portal","test_reflector","$df74fd5b33098157$var$traverse","$df74fd5b33098157$var$PuzzleGroup","firstId","lastId","nextId","previousId","$df74fd5b33098157$export$f68871ba002ca835","startsWith","titles","$0ca0e02f0a4bc377$var$history","history","$0ca0e02f0a4bc377$var$localStorage","localStorage","$0ca0e02f0a4bc377$export$7254cc27399e90bd","deltasIndex","updateCache","canRedo","canUndo","getCurrent","getTitle","getSelectedTile","redo","clearCache","setSelectedTile","undo","previousIndex","newState","pushState","fromEncoded","fromId","ParamKeys","pathSegments","localState","cachedVersion","originalVersion","$8010a1f4ac1afb69$export$a337a674d761bdc2","conditions","condition","conditionFactory","replaceChildren","isSolved","isMet","$8010a1f4ac1afb69$var$SolutionCondition","connections","$8010a1f4ac1afb69$var$Connections","$8010a1f4ac1afb69$var$Moves","completed","eventListeners","connectionId","connectionIndex","connection","Operators","equalTo","Updated","greaterThan","lessThan","$b65a2f5625db2a92$var$elements","main","puzzleId","solved","beamsUpdateDelay","interact","isUpdatingBeams","maskQueue","termini","onBeamUpdate","onSelect","onKeyup","delay","onStateUpdate","updateDropdown","select","centerOnTile","clearDebugPoints","reload","updateMessage","updateBeams","previouslySelectedTile","updateActions","addLayers","collisionId","addBeam","otherBeam","cause","onSolved","solvedMask","Solved","removeLayers","viewSize","Loaded","selectedTileId","className","disable","innerText","colorElements","rounded","connectedBeams","$250751c5950a3842$var$script","$250751c5950a3842$var$dataLayer","dataLayer","$250751c5950a3842$var$gtag","$e22b5ab31fbd25da$var$doorbellOptions","doorbellOptions","appKey","hideButton","$e22b5ab31fbd25da$var$script","$2fd5a75c703b0f49$var$puzzle","$2fd5a75c703b0f49$var$beaming","beaming"],"version":3,"file":"index.bb48da16.js.map"} \ No newline at end of file diff --git a/index.ae5e88e1.js b/index.dacb650f.js similarity index 65% rename from index.ae5e88e1.js rename to index.dacb650f.js index 979c477..770a968 100644 --- a/index.ae5e88e1.js +++ b/index.dacb650f.js @@ -28,5 +28,5 @@ let t,e,i,n,r;function s(t,e,i,n){Object.defineProperty(t,e,{get:i,set:n,enumera * Acorn is a tiny, fast JavaScript parser written in JavaScript, * created by Marijn Haverbeke and released under an MIT license. * - */(function(e,i){var n=(e=e||u("gFNhN")).window,r=e.document,s=new function(){var t=/^(statics|enumerable|beans|preserve)$/,e=[],n=e.slice,r=Object.create,s=Object.getOwnPropertyDescriptor,a=Object.defineProperty,o=e.forEach||function(t,e){for(var i=0,n=this.length;i0||l+r0?[["dictionary",n.definitions],r]:r},deserialize:function(t,e,i,n,r){var a=t,o=!i,h=o&&t&&t.length&&"dictionary"===t[0][0];if(i=i||{},Array.isArray(t)){var l=t[0],u="dictionary"===l;if(1==t.length&&/^#/.test(l))return i.dictionary[l];l=s.exports[l],a=[];for(var c=l?1:0,d=t.length;ct.length&&(n=t.length);for(var h=0;h0){var s=e[r],a=s&&s[n];a&&a.call(this,r)}}},statics:{inject:function t(e){var i=e._events;if(i){var n={};s.each(i,function(t,i){var r="string"==typeof t,a=r?t:i,o=s.capitalize(a),h=a.substring(2).toLowerCase();n[h]=r?{}:t,a="_"+a,e["get"+o]=function(){return this[a]},e["set"+o]=function(t){var e=this[a];e&&this.off(h,e),t&&this.on(h,t),this[a]=t}}),e._eventTypes=n}return t.base.apply(this,arguments)}}},o=s.extend({_class:"PaperScope",initialize:function t(){th=this,this.settings=new s({applyMatrix:!0,insertItems:!0,handleSize:4,hitTolerance:0}),this.project=null,this.projects=[],this.tools=[],this._id=t._id++,t._scopes[this._id]=this;var i=t.prototype;if(!this.support){var n=tr.getContext(1,1)||{};i.support={nativeDash:"setLineDash"in n||"mozDash"in n,nativeBlendModes:ts.nativeModes},tr.release(n)}if(!this.agent){var r=e.navigator.userAgent.toLowerCase(),a=(/(darwin|win|mac|linux|freebsd|sunos)/.exec(r)||[])[0],o="darwin"===a?"mac":a,h=i.agent=i.browser={platform:o};o&&(h[o]=!0),r.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\/?\s*([.\d]+)(?:.*version\/([.\d]+))?(?:.*rv\:v?([.\d]+))?/g,function(t,e,i,n,r){if(!h.chrome){var s="opera"===e?n:/^(node|trident)$/.test(e)?r:i;h.version=s,h.versionNumber=parseFloat(s),e=({trident:"msie",jsdom:"node"})[e]||e,h.name=e,h[e]=!0}}),h.chrome&&delete h.webkit,h.atom&&delete h.chrome}},version:"0.12.17",getView:function(){var t=this.project;return t&&t._view},getPaper:function(){return this},execute:function(t,e){var i=th.PaperScript.execute(t,this,e);return K.updateFocus(),i},install:function(t){var e=this;for(var i in s.each(["project","view","tool"],function(i){s.define(t,i,{configurable:!0,get:function(){return e[i]}})}),this)!/^_/.test(i)&&this[i]&&(t[i]=this[i])},setup:function(t){return th=this,this.project=new w(t),this},createCanvas:function(t,e){return tr.getCanvas(t,e)},activate:function(){th=this},clear:function(){for(var t=this.projects,e=this.tools,i=t.length-1;i>=0;i--)t[i].remove();for(var i=e.length-1;i>=0;i--)e[i].remove()},remove:function(){this.clear(),delete o._scopes[this._id]},statics:new function(){function t(t){return t+="Attribute",function(e,i){return e[t](i)||e[t]("data-paper-"+i)}}return{_scopes:{},_id:0,get:function(t){return this._scopes[t]||null},getAttribute:t("get"),hasAttribute:t("has")}}}),h=s.extend(a,{initialize:function(t){this._scope=th,this._index=this._scope[this._list].push(this)-1,(t||!this._scope[this._reference])&&this.activate()},activate:function(){if(!this._scope)return!1;var t=this._scope[this._reference];return t&&t!==this&&t.emit("deactivate"),this._scope[this._reference]=this,this.emit("activate",t),!0},isActive:function(){return this._scope[this._reference]===this},remove:function(){return null!=this._index&&(s.splice(this._scope[this._list],null,this._index,1),this._scope[this._reference]==this&&(this._scope[this._reference]=null),this._scope=null,!0)},getView:function(){return this._scope.getView()}}),l={findItemBoundsCollisions:function(t,e,i){function n(t){for(var e=Array(t.length),i=0;i>>1;a[t[s]][e]=o;(r||(x&&M||w&&P)&&T>=A[d]-i&&E<=A[p]+i)&&(x&&M&&k.push(s?I:I-o),w&&P&&_[I].push(b))}}if(x&&(t===e&&k.push(v),_[v]=k),m.length){var O=y[c],L=l(m,c,O);m.splice(L+1,0,v)}else m.push(v)}for(var g=0;g<_.length;g++){var N=_[g];N&&N.sort(function(t,e){return t-e})}return _}},c=s.extend({initialize:function(t){this.precision=s.pick(t,5),this.multiplier=Math.pow(10,this.precision)},number:function(t){return this.precision<16?Math.round(t*this.multiplier)/this.multiplier:t},pair:function(t,e,i){return this.number(t)+(i||",")+this.number(e)},point:function(t,e){return this.number(t.x)+(e||",")+this.number(t.y)},size:function(t,e){return this.number(t.width)+(e||",")+this.number(t.height)},rectangle:function(t,e){return this.point(t,e)+(e||",")+this.size(t,e)}});c.instance=new c;var d=new function(){var t=[[.5773502691896257],[0,.7745966692414834],[.33998104358485626,.8611363115940526],[0,.5384693101056831,.906179845938664],[.2386191860831969,.6612093864662645,.932469514203152],[0,.4058451513773972,.7415311855993945,.9491079123427585],[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499]],e=[[1],[.8888888888888888,.5555555555555556],[.6521451548625461,.34785484513745385],[.5688888888888889,.47862867049936647,.23692688505618908],[.46791393457269104,.3607615730481386,.17132449237917036],[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096]],i=Math.abs,n=Math.sqrt,r=Math.pow,s=Math.log2||function(t){return Math.log(t)*Math.LOG2E};function a(t,e,i){return ti?i:t}function o(t,e,n){function r(t){var e=134217729*t,i=t-e+e;return[i,t-i]}var s=e*e-t*n,a=e*e+t*n;if(3*i(s)1e8)?r(2,-Math.round(s(t))):0}return{EPSILON:1e-12,MACHINE_EPSILON:112e-18,CURVETIME_EPSILON:1e-8,GEOMETRIC_EPSILON:1e-7,TRIGONOMETRIC_EPSILON:1e-8,ANGULAR_EPSILON:1e-5,KAPPA:4*(n(2)-1)/3,isZero:function(t){return t>=-.000000000001&&t<=1e-12},isMachineZero:function(t){return t>=-.000000000000000112&&t<=112e-18},clamp:a,integrate:function(i,n,r,s){for(var a=t[s-2],o=e[s-2],h=(r-n)*.5,l=h+n,u=0,c=s+1>>1,d=1&s?o[u++]*i(l):0;u0?(s=n,n=d<=r?(r+s)*.5:d):(r=n,n=d>=s?(r+s)*.5:d)}return a(n,r,s)},solveQuadratic:function(t,e,r,s,l,u){var c,d=1/0;if(1e-12>i(t)){if(1e-12>i(e))return 1e-12>i(r)?-1:0;c=-r/e}else{var p=o(t,e*=-.5,r);if(p&&112e-18>i(p)){var f=h(i(t),i(e),i(r));f&&(t*=f,e*=f,r*=f,p=o(t,e,r))}if(p>=-.000000000000000112){var g=p<0?0:n(p),m=e+(e<0?-g:g);0===m?d=-(c=r/t):(c=m/t,d=r/m)}}var _=0,v=null==l,y=l-1e-12,b=u+1e-12;return isFinite(c)&&(v||c>y&&cy&&di(t))t=e,f=s,g=o,p=1/0;else if(1e-12>i(o))f=e,g=s,p=0;else{y(-(e/t)/3);var b=_/t,x=r(i(b),1/3),w=b<0?-1:1,k=-m/t,C=k>0?1.324717957244746*Math.max(x,n(k)):x,S=p-w*C;if(S!==p){do y(S),S=0===m?p:p-_/m/1.0000000000000002;while(w*S>w*p)i(t)*p*p>i(o/p)&&(f=((g=-o/p)-s)/p)}}var I=d.solveQuadratic(t,f,g,l,u,c),T=null==u;return isFinite(p)&&(0===I||I>0&&p!==l[0]&&p!==l[1])&&(T||p>u-1e-12&&p1?a[1]:a[0])):"x"in a?this._set(a.x||0,a.y||0):"width"in a?this._set(a.width||0,a.height||0):"angle"in a?(this._set(a.length||0,0),this.setAngle(a.angle||0)):(this._set(0,0),r=0)}return n&&(this.__read=r),this},set:"#initialize",_set:function(t,e){return this.x=t,this.y=e,this},equals:function(t){return this===t||t&&(this.x===t.x&&this.y===t.y||Array.isArray(t)&&this.x===t[0]&&this.y===t[1])||!1},clone:function(){return new f(this.x,this.y)},toString:function(){var t=c.instance;return"{ x: "+t.number(this.x)+", y: "+t.number(this.y)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.x),e.number(this.y)]},getLength:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setLength:function(t){if(this.isZero()){var e=this._angle||0;this._set(Math.cos(e)*t,Math.sin(e)*t)}else{var i=t/this.getLength();d.isZero(i)&&this.getAngle(),this._set(this.x*i,this.y*i)}},getAngle:function(){return 180*this.getAngleInRadians.apply(this,arguments)/Math.PI},setAngle:function(t){this.setAngleInRadians.call(this,t*Math.PI/180)},getAngleInDegrees:"#getAngle",setAngleInDegrees:"#setAngle",getAngleInRadians:function(){if(!arguments.length)return this.isZero()?this._angle||0:this._angle=Math.atan2(this.y,this.x);var t=f.read(arguments),e=this.getLength()*t.getLength();if(d.isZero(e))return NaN;var i=this.dot(t)/e;return Math.acos(i<-1?-1:i>1?1:i)},setAngleInRadians:function(t){if(this._angle=t,!this.isZero()){var e=this.getLength();this._set(Math.cos(t)*e,Math.sin(t)*e)}},getQuadrant:function(){return this.x>=0?this.y>=0?1:4:this.y>=0?2:3}},{beans:!1,getDirectedAngle:function(){var t=f.read(arguments);return 180*Math.atan2(this.cross(t),this.dot(t))/Math.PI},getDistance:function(){var t=arguments,e=f.read(t),i=e.x-this.x,n=e.y-this.y,r=i*i+n*n;return s.read(t)?r:Math.sqrt(r)},normalize:function(t){t===i&&(t=1);var e=this.getLength(),n=0!==e?t/e:0,r=new f(this.x*n,this.y*n);return n>=0&&(r._angle=this._angle),r},rotate:function(t,e){if(0===t)return this.clone();t=t*Math.PI/180;var i=e?this.subtract(e):this,n=Math.sin(t),r=Math.cos(t);return i=new f(i.x*r-i.y*n,i.x*n+i.y*r),e?i.add(e):i},transform:function(t){return t?t._transformPoint(this):this},add:function(){var t=f.read(arguments);return new f(this.x+t.x,this.y+t.y)},subtract:function(){var t=f.read(arguments);return new f(this.x-t.x,this.y-t.y)},multiply:function(){var t=f.read(arguments);return new f(this.x*t.x,this.y*t.y)},divide:function(){var t=f.read(arguments);return new f(this.x/t.x,this.y/t.y)},modulo:function(){var t=f.read(arguments);return new f(this.x%t.x,this.y%t.y)},negate:function(){return new f(-this.x,-this.y)},isInside:function(){return v.read(arguments).contains(this)},isClose:function(){var t=arguments,e=f.read(t),i=s.read(t);return this.getDistance(e)<=i},isCollinear:function(){var t=f.read(arguments);return f.isCollinear(this.x,this.y,t.x,t.y)},isColinear:"#isCollinear",isOrthogonal:function(){var t=f.read(arguments);return f.isOrthogonal(this.x,this.y,t.x,t.y)},isZero:function(){var t=d.isZero;return t(this.x)&&t(this.y)},isNaN:function(){return isNaN(this.x)||isNaN(this.y)},isInQuadrant:function(t){return this.x*(t>1&&t<4?-1:1)>=0&&this.y*(t>2?-1:1)>=0},dot:function(){var t=f.read(arguments);return this.x*t.x+this.y*t.y},cross:function(){var t=f.read(arguments);return this.x*t.y-this.y*t.x},project:function(){var t=f.read(arguments),e=t.isZero()?0:this.dot(t)/t.dot(t);return new f(t.x*e,t.y*e)},statics:{min:function(){var t=arguments,e=f.read(t),i=f.read(t);return new f(Math.min(e.x,i.x),Math.min(e.y,i.y))},max:function(){var t=arguments,e=f.read(t),i=f.read(t);return new f(Math.max(e.x,i.x),Math.max(e.y,i.y))},random:function(){return new f(Math.random(),Math.random())},isCollinear:function(t,e,i,n){return Math.abs(t*n-e*i)<=1e-8*Math.sqrt((t*t+e*e)*(i*i+n*n))},isOrthogonal:function(t,e,i,n){return Math.abs(t*i+e*n)<=1e-8*Math.sqrt((t*t+e*e)*(i*i+n*n))}}},s.each(["round","ceil","floor","abs"],function(t){var e=Math[t];this[t]=function(){return new f(e(this.x),e(this.y))}},{})),g=f.extend({initialize:function(t,e,i,n){this._x=t,this._y=e,this._owner=i,this._setter=n},_set:function(t,e,i){return this._x=t,this._y=e,i||this._owner[this._setter](this),this},getX:function(){return this._x},setX:function(t){this._x=t,this._owner[this._setter](this)},getY:function(){return this._y},setY:function(t){this._y=t,this._owner[this._setter](this)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(t){this._owner._changeSelection(this._getSelection(),t)},_getSelection:function(){return"setPosition"===this._setter?4:0}}),m=s.extend({_class:"Size",_readIndex:!0,initialize:function(t,e){var i=typeof t,n=this.__read,r=0;if("number"===i){var s="number"==typeof e;this._set(t,s?e:t),n&&(r=s?2:1)}else if("undefined"===i||null===t)this._set(0,0),n&&(r=null===t?1:0);else{var a="string"===i?t.split(/[\s,]+/)||[]:t;r=1,Array.isArray(a)?this._set(+a[0],+(a.length>1?a[1]:a[0])):"width"in a?this._set(a.width||0,a.height||0):"x"in a?this._set(a.x||0,a.y||0):(this._set(0,0),r=0)}return n&&(this.__read=r),this},set:"#initialize",_set:function(t,e){return this.width=t,this.height=e,this},equals:function(t){return t===this||t&&(this.width===t.width&&this.height===t.height||Array.isArray(t)&&this.width===t[0]&&this.height===t[1])||!1},clone:function(){return new m(this.width,this.height)},toString:function(){var t=c.instance;return"{ width: "+t.number(this.width)+", height: "+t.number(this.height)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.width),e.number(this.height)]},add:function(){var t=m.read(arguments);return new m(this.width+t.width,this.height+t.height)},subtract:function(){var t=m.read(arguments);return new m(this.width-t.width,this.height-t.height)},multiply:function(){var t=m.read(arguments);return new m(this.width*t.width,this.height*t.height)},divide:function(){var t=m.read(arguments);return new m(this.width/t.width,this.height/t.height)},modulo:function(){var t=m.read(arguments);return new m(this.width%t.width,this.height%t.height)},negate:function(){return new m(-this.width,-this.height)},isZero:function(){var t=d.isZero;return t(this.width)&&t(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(t,e){return new m(Math.min(t.width,e.width),Math.min(t.height,e.height))},max:function(t,e){return new m(Math.max(t.width,e.width),Math.max(t.height,e.height))},random:function(){return new m(Math.random(),Math.random())}}},s.each(["round","ceil","floor","abs"],function(t){var e=Math[t];this[t]=function(){return new m(e(this.width),e(this.height))}},{})),_=m.extend({initialize:function(t,e,i,n){this._width=t,this._height=e,this._owner=i,this._setter=n},_set:function(t,e,i){return this._width=t,this._height=e,i||this._owner[this._setter](this),this},getWidth:function(){return this._width},setWidth:function(t){this._width=t,this._owner[this._setter](this)},getHeight:function(){return this._height},setHeight:function(t){this._height=t,this._owner[this._setter](this)}}),v=s.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(t,e,n,r){var a,o=arguments,h=typeof t;if("number"===h?(this._set(t,e,n,r),a=4):"undefined"===h||null===t?(this._set(0,0,0,0),a=null===t?1:0):1===o.length&&(Array.isArray(t)?(this._set.apply(this,t),a=1):t.x!==i||t.width!==i?(this._set(t.x||0,t.y||0,t.width||0,t.height||0),a=1):t.from===i&&t.to===i&&(this._set(0,0,0,0),s.readSupported(o,this)&&(a=1))),a===i){var l,u,c=f.readNamed(o,"from"),d=s.peek(o),p=c.x,g=c.y;if(d&&d.x!==i||s.hasNamed(o,"to")){var _=f.readNamed(o,"to");l=_.x-p,u=_.y-g,l<0&&(p=_.x,l=-l),u<0&&(g=_.y,u=-u)}else{var v=m.read(o);l=v.width,u=v.height}this._set(p,g,l,u),a=o.__index}var y=o.__filtered;return y&&(this.__filtered=y),this.__read&&(this.__read=a),this},set:"#initialize",_set:function(t,e,i,n){return this.x=t,this.y=e,this.width=i,this.height=n,this},clone:function(){return new v(this.x,this.y,this.width,this.height)},equals:function(t){var e=s.isPlainValue(t)?v.read(arguments):t;return e===this||e&&this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height||!1},toString:function(){var t=c.instance;return"{ x: "+t.number(this.x)+", y: "+t.number(this.y)+", width: "+t.number(this.width)+", height: "+t.number(this.height)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.x),e.number(this.y),e.number(this.width),e.number(this.height)]},getPoint:function(t){return new(t?f:g)(this.x,this.y,this,"setPoint")},setPoint:function(){var t=f.read(arguments);this.x=t.x,this.y=t.y},getSize:function(t){return new(t?m:_)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var t=m.read(arguments),e=this._sx,i=this._sy,n=t.width,r=t.height;e&&(this.x+=(this.width-n)*e),i&&(this.y+=(this.height-r)*i),this.width=n,this.height=r,this._fw=this._fh=1},getLeft:function(){return this.x},setLeft:function(t){if(!this._fw){var e=t-this.x;this.width-=.5===this._sx?2*e:e}this.x=t,this._sx=this._fw=0},getTop:function(){return this.y},setTop:function(t){if(!this._fh){var e=t-this.y;this.height-=.5===this._sy?2*e:e}this.y=t,this._sy=this._fh=0},getRight:function(){return this.x+this.width},setRight:function(t){if(!this._fw){var e=t-this.x;this.width=.5===this._sx?2*e:e}this.x=t-this.width,this._sx=1,this._fw=0},getBottom:function(){return this.y+this.height},setBottom:function(t){if(!this._fh){var e=t-this.y;this.height=.5===this._sy?2*e:e}this.y=t-this.height,this._sy=1,this._fh=0},getCenterX:function(){return this.x+this.width/2},setCenterX:function(t){this._fw||.5===this._sx?this.x=t-this.width/2:(this._sx&&(this.x+=(t-this.x)*2*this._sx),this.width=(t-this.x)*2),this._sx=.5,this._fw=0},getCenterY:function(){return this.y+this.height/2},setCenterY:function(t){this._fh||.5===this._sy?this.y=t-this.height/2:(this._sy&&(this.y+=(t-this.y)*2*this._sy),this.height=(t-this.y)*2),this._sy=.5,this._fh=0},getCenter:function(t){return new(t?f:g)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var t=f.read(arguments);return this.setCenterX(t.x),this.setCenterY(t.y),this},getArea:function(){return this.width*this.height},isEmpty:function(){return 0===this.width||0===this.height},contains:function(t){return t&&t.width!==i||4===(Array.isArray(t)?t:arguments).length?this._containsRectangle(v.read(arguments)):this._containsPoint(f.read(arguments))},_containsPoint:function(t){var e=t.x,i=t.y;return e>=this.x&&i>=this.y&&e<=this.x+this.width&&i<=this.y+this.height},_containsRectangle:function(t){var e=t.x,i=t.y;return e>=this.x&&i>=this.y&&e+t.width<=this.x+this.width&&i+t.height<=this.y+this.height},intersects:function(){var t=v.read(arguments),e=s.read(arguments)||0;return t.x+t.width>this.x-e&&t.y+t.height>this.y-e&&t.x=4&&(t[1]+=n?"Y":"X");var r=t[n?0:1],s=t[n?1:0],a="get"+r,o="get"+s,h="set"+r,l="set"+s,u="get"+i,c="set"+i;this[u]=function(t){return new(t?f:g)(this[a](),this[o](),this,c)},this[c]=function(){var t=f.read(arguments);this[h](t.x),this[l](t.y)}},{beans:!0})),y=v.extend({initialize:function(t,e,i,n,r,s){this._set(t,e,i,n,!0),this._owner=r,this._setter=s},_set:function(t,e,i,n,r){return this._x=t,this._y=e,this._width=i,this._height=n,r||this._owner[this._setter](this),this}},new function(){var t=v.prototype;return s.each(["x","y","width","height"],function(t){var e=s.capitalize(t),i="_"+t;this["get"+e]=function(){return this[i]},this["set"+e]=function(t){this[i]=t,this._dontNotify||this._owner[this._setter](this)}},s.each(["Point","Size","Center","Left","Top","Right","Bottom","CenterX","CenterY","TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],function(e){var i="set"+e;this[i]=function(){this._dontNotify=!0,t[i].apply(this,arguments),this._dontNotify=!1,this._owner[this._setter](this)}},{isSelected:function(){return!!(2&this._owner._selection)},setSelected:function(t){var e=this._owner;e._changeSelection&&e._changeSelection(2,t)}}))}),b=s.extend({_class:"Matrix",initialize:function t(e,i){var n=arguments,r=n.length,s=!0;if(r>=6?this._set.apply(this,n):1===r||2===r?e instanceof t?this._set(e._a,e._b,e._c,e._d,e._tx,e._ty,i):Array.isArray(e)?this._set.apply(this,i?e.concat([i]):e):s=!1:r?s=!1:this.reset(),!s)throw Error("Unsupported matrix parameters");return this},set:"#initialize",_set:function(t,e,i,n,r,s,a){return this._a=t,this._b=e,this._c=i,this._d=n,this._tx=r,this._ty=s,a||this._changed(),this},_serialize:function(t,e){return s.serialize(this.getValues(),t,!0,e)},_changed:function(){var t=this._owner;t&&(t._applyMatrix?t.transform(null,!0):t._changed(25))},clone:function(){return new b(this._a,this._b,this._c,this._d,this._tx,this._ty)},equals:function(t){return t===this||t&&this._a===t._a&&this._b===t._b&&this._c===t._c&&this._d===t._d&&this._tx===t._tx&&this._ty===t._ty},toString:function(){var t=c.instance;return"[["+[t.number(this._a),t.number(this._c),t.number(this._tx)].join(", ")+"], ["+[t.number(this._b),t.number(this._d),t.number(this._ty)].join(", ")+"]]"},reset:function(t){return this._a=this._d=1,this._b=this._c=this._tx=this._ty=0,t||this._changed(),this},apply:function(t,e){var i=this._owner;return!!i&&(i.transform(null,s.pick(t,!0),e),this.isIdentity())},translate:function(){var t=f.read(arguments),e=t.x,i=t.y;return this._tx+=e*this._a+i*this._c,this._ty+=e*this._b+i*this._d,this._changed(),this},scale:function(){var t=arguments,e=f.read(t),i=f.read(t,0,{readNull:!0});return i&&this.translate(i),this._a*=e.x,this._b*=e.x,this._c*=e.y,this._d*=e.y,i&&this.translate(i.negate()),this._changed(),this},rotate:function(t){t*=Math.PI/180;var e=f.read(arguments,1),i=e.x,n=e.y,r=Math.cos(t),s=Math.sin(t),a=i-i*r+n*s,o=n-i*s-n*r,h=this._a,l=this._b,u=this._c,c=this._d;return this._a=r*h+s*u,this._b=r*l+s*c,this._c=-s*h+r*u,this._d=-s*l+r*c,this._tx+=a*h+o*u,this._ty+=a*l+o*c,this._changed(),this},shear:function(){var t=arguments,e=f.read(t),i=f.read(t,0,{readNull:!0});i&&this.translate(i);var n=this._a,r=this._b;return this._a+=e.y*this._c,this._b+=e.y*this._d,this._c+=e.x*n,this._d+=e.x*r,i&&this.translate(i.negate()),this._changed(),this},skew:function(){var t=arguments,e=f.read(t),i=f.read(t,0,{readNull:!0}),n=Math.PI/180,r=new f(Math.tan(e.x*n),Math.tan(e.y*n));return this.shear(r,i)},append:function(t,e){if(t){var i=this._a,n=this._b,r=this._c,s=this._d,a=t._a,o=t._c,h=t._b,l=t._d,u=t._tx,c=t._ty;this._a=a*i+h*r,this._c=o*i+l*r,this._b=a*n+h*s,this._d=o*n+l*s,this._tx+=u*i+c*r,this._ty+=u*n+c*s,e||this._changed()}return this},prepend:function(t,e){if(t){var i=this._a,n=this._b,r=this._c,s=this._d,a=this._tx,o=this._ty,h=t._a,l=t._c,u=t._b,c=t._d,d=t._tx,p=t._ty;this._a=h*i+l*n,this._c=h*r+l*s,this._b=u*i+c*n,this._d=u*r+c*s,this._tx=h*a+l*o+d,this._ty=u*a+c*o+p,e||this._changed()}return this},appended:function(t){return this.clone().append(t)},prepended:function(t){return this.clone().prepend(t)},invert:function(){var t=this._a,e=this._b,i=this._c,n=this._d,r=this._tx,s=this._ty,a=t*n-e*i,o=null;return a&&!isNaN(a)&&isFinite(r)&&isFinite(s)&&(this._a=n/a,this._b=-e/a,this._c=-i/a,this._d=t/a,this._tx=(i*s-n*r)/a,this._ty=(e*r-t*s)/a,o=this),o},inverted:function(){return this.clone().invert()},concatenate:"#append",preConcatenate:"#prepend",chain:"#appended",_shiftless:function(){return new b(this._a,this._b,this._c,this._d,0,0)},_orNullIfIdentity:function(){return this.isIdentity()?null:this},isIdentity:function(){return 1===this._a&&0===this._b&&0===this._c&&1===this._d&&0===this._tx&&0===this._ty},isInvertible:function(){var t=this._a*this._d-this._c*this._b;return t&&!isNaN(t)&&isFinite(this._tx)&&isFinite(this._ty)},isSingular:function(){return!this.isInvertible()},transform:function(t,e,i){return arguments.length<3?this._transformPoint(f.read(arguments)):this._transformCoordinates(t,e,i)},_transformPoint:function(t,e,i){var n=t.x,r=t.y;return e||(e=new f),e._set(n*this._a+r*this._c+this._tx,n*this._b+r*this._d+this._ty,i)},_transformCoordinates:function(t,e,i){for(var n=0,r=2*i;ns[h]&&(s[h]=o)}return e||(e=new v),e._set(r[0],r[1],s[0]-r[0],s[1]-r[1],i)},inverseTransform:function(){return this._inverseTransform(f.read(arguments))},_inverseTransform:function(t,e,i){var n=this._a,r=this._b,s=this._c,a=this._d,o=this._tx,h=this._ty,l=n*a-r*s,u=null;if(l&&!isNaN(l)&&isFinite(o)&&isFinite(h)){var c=t.x-this._tx,d=t.y-this._ty;e||(e=new f),u=e._set((c*a-d*s)/l,(d*n-c*r)/l,i)}return u},decompose:function(){var t,e,i,n=this._a,r=this._b,s=this._c,a=this._d,o=n*a-r*s,h=Math.sqrt,l=Math.atan2,u=180/Math.PI;if(0!==n||0!==r){var c=h(n*n+r*r);t=Math.acos(n/c)*(r>0?1:-1),e=[c,o/c],i=[l(n*s+r*a,c*c),0]}else if(0!==s||0!==a){var d=h(s*s+a*a);t=Math.asin(s/d)*(a>0?1:-1),e=[o/d,d],i=[0,l(n*s+r*a,d*d)]}else t=0,i=e=[0,0];return{translation:this.getTranslation(),rotation:t*u,scaling:new f(e),skewing:new f(i[0]*u,i[1]*u)}},getValues:function(){return[this._a,this._b,this._c,this._d,this._tx,this._ty]},getTranslation:function(){return new f(this._tx,this._ty)},getScaling:function(){return this.decompose().scaling},getRotation:function(){return this.decompose().rotation},applyToContext:function(t){this.isIdentity()||t.transform(this._a,this._b,this._c,this._d,this._tx,this._ty)}},s.each(["a","b","c","d","tx","ty"],function(t){var e=s.capitalize(t),i="_"+t;this["get"+e]=function(){return this[i]},this["set"+e]=function(t){this[i]=t,this._changed()}},{})),x=s.extend({_class:"Line",initialize:function(t,e,i,n,r){var s=!1;arguments.length>=4?(this._px=t,this._py=e,this._vx=i,this._vy=n,s=r):(this._px=t.x,this._py=t.y,this._vx=e.x,this._vy=e.y,s=i),s||(this._vx-=this._px,this._vy-=this._py)},getPoint:function(){return new f(this._px,this._py)},getVector:function(){return new f(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(t,e){return x.intersect(this._px,this._py,this._vx,this._vy,t._px,t._py,t._vx,t._vy,!0,e)},getSide:function(t,e){return x.getSide(this._px,this._py,this._vx,this._vy,t.x,t.y,!0,e)},getDistance:function(t){return Math.abs(this.getSignedDistance(t))},getSignedDistance:function(t){return x.getSignedDistance(this._px,this._py,this._vx,this._vy,t.x,t.y,!0)},isCollinear:function(t){return f.isCollinear(this._vx,this._vy,t._vx,t._vy)},isOrthogonal:function(t){return f.isOrthogonal(this._vx,this._vy,t._vx,t._vy)},statics:{intersect:function(t,e,i,n,r,s,a,o,h,l){h||(i-=t,n-=e,a-=r,o-=s);var u=i*o-n*a;if(!d.isMachineZero(u)){var c=t-r,p=e-s,g=(a*p-o*c)/u,m=(i*p-n*c)/u;if(l||-.000000000001=1?1:g),new f(t+g*i,e+g*n)}},getSide:function(t,e,i,n,r,s,a,o){a||(i-=t,n-=e);var h=r-t,l=h*n-(s-e)*i;return!o&&d.isMachineZero(l)&&(l=(h*i+h*i)/(i*i+n*n))>=0&&l<=1&&(l=0),l<0?-1:l>0?1:0},getSignedDistance:function(t,e,i,n,r,s,a){return a||(i-=t,n-=e),0===i?n>0?r-t:t-r:0===n?i<0?s-e:e-s:((r-t)*n-(s-e)*i)/(n>i?n*Math.sqrt(1+i*i/(n*n)):i*Math.sqrt(1+n*n/(i*i)))},getDistance:function(t,e,i,n,r,s,a){return Math.abs(x.getSignedDistance(t,e,i,n,r,s,a))}}}),w=h.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(t){h.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new H(null,null,this),this._view=K.create(this,t||tr.getCanvas(1,1)),this._selectionItems={},this._selectionCount=0,this._updateVersion=0},_serialize:function(t,e){return s.serialize(this._children,t,!0,e)},_changed:function(t,e){if(1&t){var i=this._view;i&&(i._needsUpdate=!0,!i._requested&&i._autoUpdate&&i.requestUpdate())}var n=this._changes;if(n&&e){var r=this._changesById,s=e._id,a=r[s];a?a.flags|=t:n.push(r[s]={item:e,flags:t})}},clear:function(){for(var t=this._children,e=t.length-1;e>=0;e--)t[e].remove()},isEmpty:function(){return!this._children.length},remove:function t(){return!!t.base.call(this)&&(this._view&&this._view.remove(),!0)},getView:function(){return this._view},getCurrentStyle:function(){return this._currentStyle},setCurrentStyle:function(t){this._currentStyle.set(t)},getIndex:function(){return this._index},getOptions:function(){return this._scope.settings},getLayers:function(){return this._children},getActiveLayer:function(){return this._activeLayer||new S({project:this,insert:!0})},getSymbolDefinitions:function(){var t=[],e={};return this.getItems({class:E,match:function(i){var n=i._definition,r=n._id;return e[r]||(e[r]=!0,t.push(n)),!1}}),t},getSymbols:"getSymbolDefinitions",getSelectedItems:function(){var t=this._selectionItems,e=[];for(var i in t){var n=t[i],r=n._selection;1&r&&n.isInserted()?e.push(n):r||this._updateSelection(n)}return e},_updateSelection:function(t){var e=t._id,i=this._selectionItems;t._selection?i[e]!==t&&(this._selectionCount++,i[e]=t):i[e]===t&&(this._selectionCount--,delete i[e])},selectAll:function(){for(var t=this._children,e=0,i=t.length;e0){t.save(),t.strokeWidth=1;var h=this._selectionItems,l=this._scope.settings.handleSize,u=this._updateVersion;for(var c in h)h[c]._drawSelection(t,e,l,h,u);t.restore()}}}),k=s.extend(a,{statics:{extend:function t(e){return e._serializeFields&&(e._serializeFields=s.set({},this.prototype._serializeFields,e._serializeFields)),t.base.apply(this,arguments)},INSERT:{insert:!0},NO_INSERT:{insert:!1}},_class:"Item",_name:null,_applyMatrix:!0,_canApplyMatrix:!0,_canScaleStroke:!1,_pivot:null,_visible:!0,_blendMode:"normal",_opacity:1,_locked:!1,_guide:!1,_clipMask:!1,_selection:0,_selectBounds:!0,_selectChildren:!1,_serializeFields:{name:null,applyMatrix:null,matrix:new b,pivot:null,visible:!0,blendMode:"normal",opacity:1,locked:!1,guide:!1,clipMask:!1,selected:!1,data:{}},_prioritize:["applyMatrix"]},new function(){var t=["onMouseDown","onMouseUp","onMouseDrag","onClick","onDoubleClick","onMouseMove","onMouseEnter","onMouseLeave"];return s.each(t,function(t){this._events[t]={install:function(t){this.getView()._countItemEvent(t,1)},uninstall:function(t){this.getView()._countItemEvent(t,-1)}}},{_events:{onFrame:{install:function(){this.getView()._animateItem(this,!0)},uninstall:function(){this.getView()._animateItem(this,!1)}},onLoad:{},onError:{}},statics:{_itemHandlers:t}})},{initialize:function(){},_initialize:function(t,e){var n=t&&s.isPlainObject(t),r=n&&!0===t.internal,a=this._matrix=new b,o=n&&t.project||th.project,h=th.settings;return this._id=r?null:p.get(),this._parent=this._index=null,this._applyMatrix=this._canApplyMatrix&&h.applyMatrix,e&&a.translate(e),a._owner=this,this._style=new H(o._currentStyle,this,o),r||n&&!1==t.insert||!h.insertItems&&!(n&&!0==t.insert)?this._setProject(o):(n&&t.parent||o)._insertItem(i,this,!0),n&&t!==k.NO_INSERT&&t!==k.INSERT&&this.set(t,{internal:!0,insert:!0,project:!0,parent:!0}),n},_serialize:function(t,e){var i={},n=this;function r(r){for(var a in r){var o=n[a];s.equals(o,"leading"===a?1.2*r.fontSize:r[a])||(i[a]=s.serialize(o,t,"data"!==a,e))}}return r(this._serializeFields),this instanceof C||r(this._style._defaults),[this._class,i]},_changed:function(t){var e=this._symbol,n=this._parent||e,r=this._project;8&t&&(this._bounds=this._position=this._decomposed=i),16&t&&(this._globalMatrix=i),n&&72&t&&k._clearBoundsCache(n),2&t&&k._clearBoundsCache(this),r&&r._changed(t,this),e&&e._changed(t)},getId:function(){return this._id},getName:function(){return this._name},setName:function(t){if(this._name&&this._removeNamed(),t===+t+"")throw Error("Names consisting only of numbers are not supported.");var e=this._getOwner();if(t&&e){var n=e._children,r=e._namedChildren;(r[t]=r[t]||[]).push(this),t in n||(n[t]=this)}this._name=t||i,this._changed(256)},getStyle:function(){return this._style},setStyle:function(t){this.getStyle().set(t)}},s.each(["locked","visible","blendMode","opacity","guide"],function(t){var e=s.capitalize(t),i="_"+t,n={locked:256,visible:265};this["get"+e]=function(){return this[i]},this["set"+e]=function(e){e!=this[i]&&(this[i]=e,this._changed(n[t]||257))}},{}),{beans:!0,getSelection:function(){return this._selection},setSelection:function(t){if(t!==this._selection){this._selection=t;var e=this._project;e&&(e._updateSelection(this),this._changed(257))}},_changeSelection:function(t,e){var i=this._selection;this.setSelection(e?i|t:i&~t)},isSelected:function(){if(this._selectChildren){for(var t=this._children,e=0,i=t.length;e=0;i--)if(e[i].contains(t))return!0;return!1}return t.isInside(this.getInternalBounds())},isInside:function(){return v.read(arguments).contains(this.getBounds())},_asPathItem:function(){return new R.Rectangle({rectangle:this.getInternalBounds(),matrix:this._matrix,insert:!1})},intersects:function(t,e){return t instanceof k&&this._asPathItem().getIntersections(t._asPathItem(),null,e,!0).length>0}},new function(){function t(){var t=arguments;return this._hitTest(f.read(t),P.getOptions(t))}function e(){var t=arguments,e=f.read(t),i=P.getOptions(t),n=[];return this._hitTest(e,new s({all:n},i)),n}function i(t,e,i,n){var r=this._children;if(r)for(var s=r.length-1;s>=0;s--){var a=r[s],o=a!==n&&a._hitTest(t,e,i);if(o&&!e.all)return o}return null}return w.inject({hitTest:t,hitTestAll:e,_hitTest:i}),{hitTest:t,hitTestAll:e,_hitTestChildren:i}},{_hitTest:function(t,e,i){if(this._locked||!this._visible||this._guide&&!e.guides||this.isEmpty())return null;var n=this._matrix,r=i?i.appended(n):this.getGlobalMatrix().prepend(this.getView()._matrix),a=Math.max(e.tolerance,1e-12),o=e._tolerancePadding=new m(R._getStrokePadding(a,n._shiftless().invert()));if(!(t=n._inverseTransform(t))||!this._children&&!this.getBounds({internal:!0,stroke:!0,handle:!0}).expand(o.multiply(2))._containsPoint(t))return null;var h,l,u=!(e.guides&&!this._guide||e.selected&&!this.isSelected()||e.type&&e.type!==s.hyphenate(this._class)||e.class&&!(this instanceof e.class)),c=e.match,d=this;function p(t){return t&&c&&!c(t)&&(t=null),t&&e.all&&e.all.push(t),t}function f(e,i){var n=i?h["get"+i]():d.getPosition();if(t.subtract(n).divide(o).length<=1)return new P(e,d,{name:i?s.hyphenate(i):e,point:n})}var g=e.position,_=e.center,v=e.bounds;if(u&&this._parent&&(g||_||v)){if((_||v)&&(h=this.getInternalBounds()),!(l=g&&f("position")||_&&f("center","Center"))&&v)for(var y=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],b=0;b<8&&!l;b++)l=f("bounds",y[b]);l=p(l)}return l||(l=this._hitTestChildren(t,e,r)||u&&p(this._hitTestSelf(t,e,r,this.getStrokeScaling()?null:r._shiftless().invert()))||null),l&&l.point&&(l.point=n.transform(l.point)),l},_hitTestSelf:function(t,e){if(e.fill&&this.hasFill()&&this._contains(t))return new P("fill",this)},matches:function(t,e){var i=typeof t;if("object"===i){for(var n in t)if(t.hasOwnProperty(n)&&!this.matches(n,t[n]))return!1;return!0}if("function"===i)return t(this);if("match"===t)return e(this);var r=/^(empty|editable)$/.test(t)?this["is"+s.capitalize(t)]():"type"===t?s.hyphenate(this._class):this[t];if("class"===t){if("function"==typeof e)return this instanceof e;r=this._class}if("function"==typeof e)return!!e(r);if(e){if(e.test)return e.test(r);if(s.isPlainObject(e))return function t(e,i){for(var n in e)if(e.hasOwnProperty(n)){var r=e[n],a=i[n];if(s.isPlainObject(r)&&s.isPlainObject(a)){if(!t(r,a))return!1}else if(!s.equals(r,a))return!1}return!0}(e,r)}return s.equals(r,e)},getItems:function(t){return k._getItems(this,t,this._matrix)},getItem:function(t){return k._getItems(this,t,this._matrix,null,!0)[0]||null},statics:{_getItems:function t(e,i,n,r,a){if(!r){var o="object"==typeof i&&i,h=o&&o.overlapping,l=o&&o.inside,u=h||l,c=u&&v.read([u]);r={items:[],recursive:o&&!1!==o.recursive,inside:!!l,overlapping:!!h,rect:c,path:h&&new R.Rectangle({rectangle:c,insert:!1})},o&&(i=s.filter({},i,{recursive:!0,inside:!0,overlapping:!0}))}var d=e._children,p=r.items,c=r.rect;n=c&&(n||new b);for(var f=0,g=d&&d.length;f0))break}return p}}},{importJSON:function(t){var e=s.importJSON(t,this);return e!==this?this.addChild(e):e},addChild:function(t){return this.insertChild(i,t)},insertChild:function(t,e){var i=e?this.insertChildren(t,[e]):null;return i&&i[0]},addChildren:function(t){return this.insertChildren(this._children.length,t)},insertChildren:function(t,e){var i=this._children;if(i&&e&&e.length>0){e=s.slice(e);for(var n={},r=e.length-1;r>=0;r--){var a=e[r],o=a&&a._id;!a||n[o]?e.splice(r,1):(a._remove(!1,!0),n[o]=!0)}s.splice(i,e,t,0);for(var h=this._project,l=h._changes,r=0,u=e.length;r=0;n--)i[n]._remove(!0,!1);return i.length>0&&this._changed(11),i},clear:"#removeChildren",reverseChildren:function(){if(this._children){this._children.reverse();for(var t=0,e=this._children.length;t0},isInserted:function(){return!!this._parent&&this._parent.isInserted()},isAbove:function(t){return -1===this._getOrder(t)},isBelow:function(t){return 1===this._getOrder(t)},isParent:function(t){return this._parent===t},isChild:function(t){return t&&t._parent===this},isDescendant:function(t){for(var e=this;e=e._parent;)if(e===t)return!0;return!1},isAncestor:function(t){return!!t&&t.isDescendant(this)},isSibling:function(t){return this._parent===t._parent},isGroupedWith:function(t){for(var e=this._parent;e;){if(e._parent&&/^(Group|Layer|CompoundPath)$/.test(e._class)&&t.isDescendant(e))return!0;e=e._parent}return!1}},s.each(["rotate","scale","shear","skew"],function(t){var e="rotate"===t;this[t]=function(){var i=arguments,n=(e?s:f).read(i),r=f.read(i,0,{readNull:!0});return this.transform(new b()[t](n,r||this.getPosition(!0)))}},{translate:function(){var t=new b;return this.transform(t.translate.apply(t,arguments))},transform:function(t,e,i){var n=this._matrix,r=t&&!t.isIdentity(),s=i&&this._canApplyMatrix||this._applyMatrix&&(r||!n.isIdentity()||e&&this._children);if(!r&&!s)return this;if(r){!t.isInvertible()&&n.isInvertible()&&(n._backup=n.getValues()),n.prepend(t,!0);var a=this._style,o=a.getFillColor(!0),h=a.getStrokeColor(!0);o&&o.transform(t),h&&h.transform(t)}if(s&&(s=this._transformContent(n,e,i))){var l=this._pivot;l&&n._transformPoint(l,l,!0),n.reset(!0),i&&this._canApplyMatrix&&(this._applyMatrix=!0)}var u=this._bounds,c=this._position;(r||s)&&this._changed(25);var d=r&&u&&t.decompose();if(d&&d.skewing.isZero()&&d.rotation%90==0){for(var p in u){var f=u[p];if(f.nonscaling)delete u[p];else if(s||!f.internal){var g=f.rect;t._transformBounds(g,g)}}this._bounds=u;var m=u[this._getBoundsCacheKey(this._boundsOptions||{})];m&&(this._position=this._getPositionFromBounds(m.rect))}else r&&c&&this._pivot&&(this._position=t._transformPoint(c,c));return this},_transformContent:function(t,e,i){var n=this._children;if(n){for(var r=0,s=n.length;rr:n1&&s<4?-1:1,s>2?-1:1),o=a.multiply(r),h=o.subtract(a.multiply(n));if(new v(i?o.add(a.multiply(i)):o,h).contains(e))return{point:h,quadrant:s}}}function e(t,e,i,n){var r=t.divide(e);return(!n||r.isInQuadrant(n))&&r.subtract(r.normalize()).multiply(e).divide(i).length<=1}return{_contains:function e(i){if("rectangle"!==this._type)return .5>=i.divide(this.size).getLength();var n=t(this,i);return n?1>=i.subtract(n.point).divide(this._radius).getLength():e.base.call(this,i)},_hitTestSelf:function i(n,r,s,a){var o=!1,h=this._style,l=r.stroke&&h.hasStroke(),u=r.fill&&h.hasFill();if(l||u){var c=this._type,d=this._radius,p=l?h.getStrokeWidth()/2:0,f=r._tolerancePadding.add(R._getStrokePadding(p,!h.getStrokeScaling()&&a));if("rectangle"===c){var g=f.multiply(2),m=t(this,n,g);if(m)o=e(n.subtract(m.point),d,f,m.quadrant);else{var _=new v(this._size).setCenter(0,0),y=_.expand(g),b=_.expand(g.negate());o=y._containsPoint(n)&&!b._containsPoint(n)}}else o=e(n,d,f)}return o?new P(l?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function t(t,e,i,n,r){var a=s.create(I.prototype);return a._type=t,a._size=i,a._radius=n,a._initialize(s.getNamed(r),e),a}return{Circle:function(){var e=arguments,i=f.readNamed(e,"center"),n=s.readNamed(e,"radius");return t("circle",i,new m(2*n),n,e)},Rectangle:function(){var e=arguments,i=v.readNamed(e,"rectangle"),n=m.min(m.readNamed(e,"radius"),i.getSize(!0).divide(2));return t("rectangle",i.getCenter(!0),i.getSize(!0),n,e)},Ellipse:function(){var e=arguments,i=I._readEllipse(e),n=i.radius;return t("ellipse",i.center,n.multiply(2),n,e)},_readEllipse:function(t){var e,i;if(s.hasNamed(t,"radius"))e=f.readNamed(t,"center"),i=m.readNamed(t,"radius");else{var n=v.readNamed(t,"rectangle");e=n.getCenter(!0),i=n.getSize(!0).divide(2)}return{center:e,radius:i}}}}}),T=k.extend({_class:"Raster",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!1,handle:!1},_serializeFields:{crossOrigin:null,source:null},_prioritize:["crossOrigin"],_smoothing:"low",beans:!0,initialize:function(t,e){if(!this._initialize(t,e!==i&&f.read(arguments))){var n,s=typeof t,a="string"===s?r.getElementById(t):"object"===s?t:null;if(a&&a!==k.NO_INSERT){if(a.getContext||null!=a.naturalHeight)n=a;else if(a){var o=m.read(arguments);o.isZero()||(n=tr.getCanvas(o))}}n?this.setImage(n):this.setSource(t)}this._size||(this._size=new m,this._loaded=!1)},_equals:function(t){return this.getSource()===t.getSource()},copyContent:function(t){var e=t._image,i=t._canvas;if(e)this._setImage(e);else if(i){var n=tr.getCanvas(t._size);n.getContext("2d").drawImage(i,0,0),this._setImage(n)}this._crossOrigin=t._crossOrigin},getSize:function(){var t=this._size;return new _(t?t.width:0,t?t.height:0,this,"setSize")},setSize:function(t,e){var i=m.read(arguments);if(i.equals(this._size))e&&this.clear();else if(i.width>0&&i.height>0){var n=!e&&this.getElement();this._setImage(tr.getCanvas(i)),n&&this.getContext(!0).drawImage(n,0,0,i.width,i.height)}else this._canvas&&tr.release(this._canvas),this._size=i.clone()},getWidth:function(){return this._size?this._size.width:0},setWidth:function(t){this.setSize(t,this.getHeight())},getHeight:function(){return this._size?this._size.height:0},setHeight:function(t){this.setSize(this.getWidth(),t)},getLoaded:function(){return this._loaded},isEmpty:function(){var t=this._size;return!t||0===t.width&&0===t.height},getResolution:function(){var t=this._matrix,e=new f(0,0).transform(t),i=new f(1,0).transform(t).subtract(e),n=new f(0,1).transform(t).subtract(e);return new m(72/i.getLength(),72/n.getLength())},getPpi:"#getResolution",getImage:function(){return this._image},setImage:function(t){var e=this;function i(t){var i=e.getView(),n=t&&t.type||"load";i&&e.responds(n)&&(th=i._scope,e.emit(n,new Y(t)))}this._setImage(t),this._loaded?setTimeout(i,0):t&&W.add(t,{load:function(n){e._setImage(t),i(n)},error:i})},_setImage:function(t){this._canvas&&tr.release(this._canvas),t&&t.getContext?(this._image=null,this._canvas=t,this._loaded=!0):(this._image=t,this._canvas=null,this._loaded=!!(t&&t.src&&t.complete)),this._size=new m(t?t.naturalWidth||t.width:0,t?t.naturalHeight||t.height:0),this._context=null,this._changed(1033)},getCanvas:function(){if(!this._canvas){var t=tr.getContext(this._size);try{this._image&&t.drawImage(this._image,0,0),this._canvas=t.canvas}catch(e){tr.release(t)}}return this._canvas},setCanvas:"#setImage",getContext:function(t){return this._context||(this._context=this.getCanvas().getContext("2d")),t&&(this._image=null,this._changed(1025)),this._context},setContext:function(t){this._context=t},getSource:function(){var t=this._image;return t&&t.src||this.toDataURL()},setSource:function(t){var i=new e.Image,n=this._crossOrigin;n&&(i.crossOrigin=n),t&&(i.src=t),this.setImage(i)},getCrossOrigin:function(){var t=this._image;return t&&t.crossOrigin||this._crossOrigin||""},setCrossOrigin:function(t){this._crossOrigin=t;var e=this._image;e&&(e.crossOrigin=t)},getSmoothing:function(){return this._smoothing},setSmoothing:function(t){this._smoothing="string"==typeof t?t:t?"low":"off",this._changed(257)},getElement:function(){return this._canvas||this._loaded&&this._image}},{beans:!1,getSubCanvas:function(){var t=v.read(arguments),e=tr.getContext(t.getSize());return e.drawImage(this.getCanvas(),t.x,t.y,t.width,t.height,0,0,t.width,t.height),e.canvas},getSubRaster:function(){var t=v.read(arguments),e=new T(k.NO_INSERT);return e._setImage(this.getSubCanvas(t)),e.translate(t.getCenter().subtract(this.getSize().divide(2))),e._matrix.prepend(this._matrix),e.insertAbove(this),e},toDataURL:function(){var t=this._image,e=t&&t.src;if(/^data:/.test(e))return e;var i=this.getCanvas();return i?i.toDataURL.apply(i,arguments):null},drawImage:function(t){var e=f.read(arguments,1);this.getContext(!0).drawImage(t,e.x,e.y)},getAverageColor:function(t){if(t?t instanceof z?(i=t,e=t.getBounds()):"object"==typeof t&&("width"in t?e=new v(t):"x"in t&&(e=new v(t.x-.5,t.y-.5,1,1))):e=this.getBounds(),!e)return null;var e,i,n=Math.min(e.width,32),r=Math.min(e.height,32),a=T._sampleContext;a?a.clearRect(0,0,33,33):a=T._sampleContext=tr.getContext(new m(32)),a.save();var o=new b().scale(n/e.width,r/e.height).translate(-e.x,-e.y);o.applyToContext(a),i&&i.draw(a,new s({clip:!0,matrices:[o]})),this._matrix.applyToContext(a);var h=this.getElement(),l=this._size;h&&a.drawImage(h,-l.width/2,-l.height/2),a.restore();for(var u=a.getImageData(.5,.5,Math.ceil(n),Math.ceil(r)).data,c=[0,0,0],d=0,p=0,f=u.length;p0&&n.height>0){t.globalAlpha=d.clamp(this._opacity,0,1),this._setStyles(t,e,i);var r=this._smoothing,s="off"===r;G.setPrefixed(t,s?"imageSmoothingEnabled":"imageSmoothingQuality",!s&&r),t.drawImage(n,-this._size.width/2,-this._size.height/2)}},_canComposite:function(){return!0}}),E=k.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(t,e){this._initialize(t,e!==i&&f.read(arguments,1))||this.setDefinition(t instanceof A?t:new A(t))},_equals:function(t){return this._definition===t._definition},copyContent:function(t){this.setDefinition(t._definition)},getDefinition:function(){return this._definition},setDefinition:function(t){this._definition=t,this._changed(9)},getSymbol:"#getDefinition",setSymbol:"#setDefinition",isEmpty:function(){return this._definition._item.isEmpty()},_getBounds:function(t,e){var i=this._definition._item;return i._getCachedBounds(i._matrix.prepended(t),e)},_hitTestSelf:function(t,e,i){var n=e.extend({all:!1}),r=this._definition._item._hitTest(t,n,i);return r&&(r.item=this),r},_draw:function(t,e){this._definition._item.draw(t,e)}}),A=s.extend({_class:"SymbolDefinition",initialize:function(t,e){this._id=p.get(),this.project=th.project,t&&this.setItem(t,e)},_serialize:function(t,e){return e.add(this,function(){return s.serialize([this._class,this._item],t,!1,e)})},_changed:function(t){8&t&&k._clearBoundsCache(this),1&t&&this.project._changed(t)},getItem:function(){return this._item},setItem:function(t,e){t._symbol&&(t=t.clone()),this._item&&(this._item._symbol=null),this._item=t,t.remove(),t.setSelected(!1),e||t.setPosition(new f),t._symbol=this,this._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(t){return new E(this,t)},clone:function(){return new A(this._item.clone(!1))},equals:function(t){return t===this||t&&this._item.equals(t._item)||!1}}),P=s.extend({_class:"HitResult",initialize:function(t,e,i){this.type=t,this.item=e,i&&this.inject(i)},statics:{getOptions:function(t){var e=t&&s.read(t);return new s({type:null,tolerance:th.settings.hitTolerance,fill:!e,stroke:!e,segments:!e,handles:!1,ends:!1,position:!1,center:!1,bounds:!1,guides:!1,selected:!1},e)}}}),M=s.extend({_class:"Segment",beans:!0,_selection:0,initialize:function(t,e,n,r,s,a){var o,h,l,u,c=arguments.length;c>0&&(null==t||"object"==typeof t?1===c&&t&&"point"in t?(o=t.point,h=t.handleIn,l=t.handleOut,u=t.selection):(o=t,h=e,l=n,u=r):(o=[t,e],h=n!==i?[n,r]:null,l=s!==i?[s,a]:null)),new O(o,this,"_point"),new O(h,this,"_handleIn"),new O(l,this,"_handleOut"),u&&this.setSelection(u)},_serialize:function(t,e){var i=this._point,n=this._selection,r=n||this.hasHandles()?[i,this._handleIn,this._handleOut]:i;return n&&r.push(n),s.serialize(r,t,!0,e)},_changed:function(t){var e=this._path;if(e){var i,n=e._curves,r=this._index;n&&((!t||t===this._point||t===this._handleIn)&&(i=r>0?n[r-1]:e._closed?n[n.length-1]:null)&&i._changed(),(!t||t===this._point||t===this._handleOut)&&(i=n[r])&&i._changed()),e._changed(41)}},getPoint:function(){return this._point},setPoint:function(){this._point.set(f.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set(f.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set(f.read(arguments))},hasHandles:function(){return!this._handleIn.isZero()||!this._handleOut.isZero()},isSmooth:function(){var t=this._handleIn,e=this._handleOut;return!t.isZero()&&!e.isZero()&&t.isCollinear(e)},clearHandles:function(){this._handleIn._set(0,0),this._handleOut._set(0,0)},getSelection:function(){return this._selection},setSelection:function(t){var e=this._selection,i=this._path;this._selection=t=t||0,i&&t!==e&&(i._updateSelection(this,e,t),i._changed(257))},_changeSelection:function(t,e){var i=this._selection;this.setSelection(e?i|t:i&~t)},isSelected:function(){return!!(7&this._selection)},setSelected:function(t){this._changeSelection(7,t)},getIndex:function(){return this._index!==i?this._index:null},getPath:function(){return this._path||null},getCurve:function(){var t=this._path,e=this._index;return t?(e>0&&!t._closed&&e===t._segments.length-1&&e--,t.getCurves()[e]||null):null},getLocation:function(){var t=this.getCurve();return t?new N(t,this===t._segment1?0:1):null},getNext:function(){var t=this._path&&this._path._segments;return t&&(t[this._index+1]||this._path._closed&&t[0])||null},smooth:function(t,e,n){var r=t||{},s=r.type,a=r.factor,o=this.getPrevious(),h=this.getNext(),l=(o||this)._point,u=this._point,c=(h||this)._point,d=l.getDistance(u),p=u.getDistance(c);if(s&&"catmull-rom"!==s){if("geometric"===s){if(o&&h){var g=l.subtract(c),m=a===i?.4:a,_=m*d/(d+p);e||this.setHandleIn(g.multiply(_)),n||this.setHandleOut(g.multiply(_-m))}}else throw Error("Smoothing method '"+s+"' not supported.")}else{var v=a===i?.5:a,y=Math.pow(d,v),b=y*y,x=Math.pow(p,v),w=x*x;if(!e&&o){var k=2*w+3*x*y+b,C=3*x*(x+y);this.setHandleIn(0!==C?new f((w*l._x+k*u._x-b*c._x)/C-u._x,(w*l._y+k*u._y-b*c._y)/C-u._y):new f)}if(!n&&h){var k=2*b+3*y*x+w,C=3*y*(y+x);this.setHandleOut(0!==C?new f((b*c._x+k*u._x-w*l._x)/C-u._x,(b*c._y+k*u._y-w*l._y)/C-u._y):new f)}}},getPrevious:function(){var t=this._path&&this._path._segments;return t&&(t[this._index-1]||this._path._closed&&t[t.length-1])||null},isFirst:function(){return!this._index},isLast:function(){var t=this._path;return t&&this._index===t._segments.length-1||!1},reverse:function(){var t=this._handleIn,e=this._handleOut,i=t.clone();t.set(e),e.set(i)},reversed:function(){return new M(this._point,this._handleOut,this._handleIn)},remove:function(){return!!this._path&&!!this._path.removeSegment(this._index)},clone:function(){return new M(this._point,this._handleIn,this._handleOut)},equals:function(t){return t===this||t&&this._class===t._class&&this._point.equals(t._point)&&this._handleIn.equals(t._handleIn)&&this._handleOut.equals(t._handleOut)||!1},toString:function(){var t=["point: "+this._point];return this._handleIn.isZero()||t.push("handleIn: "+this._handleIn),this._handleOut.isZero()||t.push("handleOut: "+this._handleOut),"{ "+t.join(", ")+" }"},transform:function(t){this._transformCoordinates(t,Array(6),!0),this._changed()},interpolate:function(t,e,i){var n=1-i,r=t._point,s=e._point,a=t._handleIn,o=e._handleIn,h=e._handleOut,l=t._handleOut;this._point._set(n*r._x+i*s._x,n*r._y+i*s._y,!0),this._handleIn._set(n*a._x+i*o._x,n*a._y+i*o._y,!0),this._handleOut._set(n*l._x+i*h._x,n*l._y+i*h._y,!0),this._changed()},_transformCoordinates:function(t,e,i){var n=this._point,r=i&&this._handleIn.isZero()?null:this._handleIn,s=i&&this._handleOut.isZero()?null:this._handleOut,a=n._x,o=n._y,h=2;return e[0]=a,e[1]=o,r&&(e[h++]=r._x+a,e[h++]=r._y+o),s&&(e[h++]=s._x+a,e[h++]=s._y+o),t&&(t._transformCoordinates(e,e,h/2),a=e[0],o=e[1],i?(n._x=a,n._y=o,h=2,r&&(r._x=e[h++]-a,r._y=e[h++]-o),s&&(s._x=e[h++]-a,s._y=e[h++]-o)):(r||(e[h++]=a,e[h++]=o),s||(e[h++]=a,e[h++]=o))),e}}),O=f.extend({initialize:function(t,e,n){var r,s,a;if(t){if((r=t[0])!==i)s=t[1];else{var o=t;(r=o.x)===i&&(o=f.read(arguments),r=o.x),s=o.y,a=o.selected}}else r=s=0;this._x=r,this._y=s,this._owner=e,e[n]=this,a&&this.setSelected(!0)},_set:function(t,e){return this._x=t,this._y=e,this._owner._changed(this),this},getX:function(){return this._x},setX:function(t){this._x=t,this._owner._changed(this)},getY:function(){return this._y},setY:function(t){this._y=t,this._owner._changed(this)},isZero:function(){var t=d.isZero;return t(this._x)&&t(this._y)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(t){this._owner._changeSelection(this._getSelection(),t)},_getSelection:function(){var t=this._owner;return this===t._point?1:this===t._handleIn?2:this===t._handleOut?4:0}}),L=s.extend({_class:"Curve",beans:!0,initialize:function(t,e,i,n,r,s,a,o){var h,l,u,c,d,p,f=arguments.length;3===f?(this._path=t,h=e,l=i):f?1===f?"segment1"in t?(h=new M(t.segment1),l=new M(t.segment2)):"point1"in t?(u=t.point1,d=t.handle1,p=t.handle2,c=t.point2):Array.isArray(t)&&(u=[t[0],t[1]],c=[t[6],t[7]],d=[t[2]-t[0],t[3]-t[1]],p=[t[4]-t[6],t[5]-t[7]]):2===f?(h=new M(t),l=new M(e)):4===f?(u=t,d=e,p=i,c=n):8===f&&(u=[t,e],c=[a,o],d=[i-t,n-e],p=[r-a,s-o]):(h=new M,l=new M),this._segment1=h||new M(u,null,d),this._segment2=l||new M(c,p,null)},_serialize:function(t,e){return s.serialize(this.hasHandles()?[this.getPoint1(),this.getHandle1(),this.getHandle2(),this.getPoint2()]:[this.getPoint1(),this.getPoint2()],t,!0,e)},_changed:function(){this._length=this._bounds=i},clone:function(){return new L(this._segment1,this._segment2)},toString:function(){var t=["point1: "+this._segment1._point];return this._segment1._handleOut.isZero()||t.push("handle1: "+this._segment1._handleOut),this._segment2._handleIn.isZero()||t.push("handle2: "+this._segment2._handleIn),t.push("point2: "+this._segment2._point),"{ "+t.join(", ")+" }"},classify:function(){return L.classify(this.getValues())},remove:function(){var t=!1;if(this._path){var e=this._segment2,i=e._handleOut;(t=e.remove())&&this._segment1._handleOut.set(i)}return t},getPoint1:function(){return this._segment1._point},setPoint1:function(){this._segment1._point.set(f.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set(f.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set(f.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set(f.read(arguments))},getSegment1:function(){return this._segment1},getSegment2:function(){return this._segment2},getPath:function(){return this._path},getIndex:function(){return this._segment1._index},getNext:function(){var t=this._path&&this._path._curves;return t&&(t[this._segment1._index+1]||this._path._closed&&t[0])||null},getPrevious:function(){var t=this._path&&this._path._curves;return t&&(t[this._segment1._index-1]||this._path._closed&&t[t.length-1])||null},isFirst:function(){return!this._segment1._index},isLast:function(){var t=this._path;return t&&this._segment1._index===t._curves.length-1||!1},isSelected:function(){return this.getPoint1().isSelected()&&this.getHandle1().isSelected()&&this.getHandle2().isSelected()&&this.getPoint2().isSelected()},setSelected:function(t){this.getPoint1().setSelected(t),this.getHandle1().setSelected(t),this.getHandle2().setSelected(t),this.getPoint2().setSelected(t)},getValues:function(t){return L.getValues(this._segment1,this._segment2,t)},getPoints:function(){for(var t=this.getValues(),e=[],i=0;i<8;i+=2)e.push(new f(t[i],t[i+1]));return e}},{getLength:function(){return null==this._length&&(this._length=L.getLength(this.getValues(),0,1)),this._length},getArea:function(){return L.getArea(this.getValues())},getLine:function(){return new x(this._segment1._point,this._segment2._point)},getPart:function(t,e){return new L(L.getPart(this.getValues(),t,e))},getPartLength:function(t,e){return L.getLength(this.getValues(),t,e)},divideAt:function(t){return this.divideAtTime(t&&t.curve===this?t.time:this.getTimeAt(t))},divideAtTime:function(t,e){var i=null;if(t>=1e-8&&t<=.99999999){var n=L.subdivide(this.getValues(),t),r=n[0],s=n[1],a=e||this.hasHandles(),o=this._segment1,h=this._segment2,l=this._path;a&&(o._handleOut._set(r[2]-r[0],r[3]-r[1]),h._handleIn._set(s[4]-s[6],s[5]-s[7]));var u=r[6],c=r[7],d=new M(new f(u,c),a&&new f(r[4]-u,r[5]-c),a&&new f(s[2]-u,s[3]-c));l?(l.insert(o._index+1,d),i=this.getNext()):(this._segment2=d,this._changed(),i=new L(d,h))}return i},splitAt:function(t){var e=this._path;return e?e.splitAt(t):null},splitAtTime:function(t){return this.splitAt(this.getLocationAtTime(t))},divide:function(t,e){return this.divideAtTime(t===i?.5:e?t:this.getTimeAt(t))},split:function(t,e){return this.splitAtTime(t===i?.5:e?t:this.getTimeAt(t))},reversed:function(){return new L(this._segment2.reversed(),this._segment1.reversed())},clearHandles:function(){this._segment1._handleOut._set(0,0),this._segment2._handleIn._set(0,0)},statics:{getValues:function(t,e,i,n){var r=t._point,s=t._handleOut,a=e._handleIn,o=e._point,h=r.x,l=r.y,u=o.x,c=o.y,d=n?[h,l,h,l,u,c,u,c]:[h,l,h+s._x,l+s._y,u+a._x,c+a._y,u,c];return i&&i._transformCoordinates(d,d,4),d},subdivide:function(t,e){var n=t[0],r=t[1],s=t[2],a=t[3],o=t[4],h=t[5],l=t[6],u=t[7];e===i&&(e=.5);var c=1-e,d=c*n+e*s,p=c*r+e*a,f=c*s+e*o,g=c*a+e*h,m=c*o+e*l,_=c*h+e*u,v=c*d+e*f,y=c*p+e*g,b=c*f+e*m,x=c*g+e*_,w=c*v+e*b,k=c*y+e*x;return[[n,r,d,p,v,y,w,k],[w,k,b,x,m,_,l,u]]},getMonoCurves:function(t,e){var i=[],n=e?0:1,r=t[n+0],s=t[n+2],a=t[n+4],o=t[n+6];if(r>=s==s>=a&&s>=a==a>=o||L.isStraight(t))i.push(t);else{var h=[],l=d.solveQuadratic(3*(s-a)-r+o,2*(r+a)-4*s,s-r,h,1e-8,.99999999);if(l){h.sort();var u=h[0],c=L.subdivide(t,u);i.push(c[0]),l>1&&(u=(h[1]-u)/(1-u),c=L.subdivide(c[1],u),i.push(c[0])),i.push(c[1])}else i.push(t)}return i},solveCubic:function(t,e,i,n,r,s){var a=t[e],o=t[e+2],h=t[e+4],l=t[e+6],u=0;if(!(ai&&l>i&&o>i&&h>i)){var c=3*(o-a),p=3*(h-o)-c;u=d.solveCubic(l-a-c-p,p,c,a-i,n,r,s)}return u},getTimeOf:function(t,e){var i=new f(t[0],t[1]),n=new f(t[6],t[7]);if(null===(e.isClose(i,1e-12)?0:e.isClose(n,1e-12)?1:null))for(var r=[e.x,e.y],s=[],a=0;a<2;a++)for(var o=L.solveCubic(t,a,r[a],s,0,1),h=0;h.999999999999?1:L.getTimeOf(t,new f(i+l*a,n+l*o))}var u=1/0,c=0;function d(i){if(i>=0&&i<=1){var n=e.getDistance(L.getPoint(t,i),!0);if(n1e-8;)d(c-g)||d(c+g)||(g/=2);return c},getPart:function(t,e,i){var n=e>i;if(n){var r=e;e=i,i=r}return e>0&&(t=L.subdivide(t,e)[1]),i<1&&(t=L.subdivide(t,(i-e)/(1-e))[0]),n?[t[6],t[7],t[4],t[5],t[2],t[3],t[0],t[1]]:t},isFlatEnough:function(t,e){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],l=t[7],u=3*r-2*i-h,c=3*s-2*n-l,d=3*a-2*h-i,p=3*o-2*l-n;return Math.max(u*u,d*d)+Math.max(c*c,p*p)<=16*e*e},getArea:function(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7];return 3*((h-i)*(n+s)-(o-e)*(r+a)+r*(e-s)-n*(i-a)+h*(s+e/3)-o*(a+i/3))/20},getBounds:function(t){for(var e=t.slice(0,2),i=e.slice(),n=[0,0],r=0;r<2;r++)L._addBounds(t[r],t[r+2],t[r+4],t[r+6],r,0,e,i,n);return new v(e[0],e[1],i[0]-e[0],i[1]-e[1])},_addBounds:function(t,e,i,n,r,s,a,o,h){function l(t,e){var i=t-e,n=t+e;io[r]&&(o[r]=n)}s/=2;var u=a[r]+s,c=o[r]-s;if(tc||e>c||i>c||n>c){if(es.getDistance(t.add(e))&&1e-7>s.getDistance(n.add(i))){var a=r.dot(r),o=r.dot(e)/a,h=r.dot(i)/a;return o>=0&&o<=1&&h<=0&&h>=-1}}return!1},isLinear:function(t,e,i,n){var r=n.subtract(t).divide(3);return e.equals(r)&&i.negate().equals(r)}},function(t,e){this[e]=function(e){var i=this._segment1,n=this._segment2;return t(i._point,i._handleOut,n._handleIn,n._point,e)},this.statics[e]=function(e,i){var n=e[0],r=e[1],s=e[6],a=e[7];return t(new f(n,r),new f(e[2]-n,e[3]-r),new f(e[4]-s,e[5]-a),new f(s,a),i)}},{statics:{},hasHandles:function(){return!this._segment1._handleOut.isZero()||!this._segment2._handleIn.isZero()},hasLength:function(t){return(!this.getPoint1().equals(this.getPoint2())||this.hasHandles())&&this.getLength()>(t||0)},isCollinear:function(t){return t&&this.isStraight()&&t.isStraight()&&this.getLine().isCollinear(t.getLine())},isHorizontal:function(){return this.isStraight()&&1e-8>Math.abs(this.getTangentAtTime(.5).y)},isVertical:function(){return this.isStraight()&&1e-8>Math.abs(this.getTangentAtTime(.5).x)}}),{beans:!1,getLocationAt:function(t,e){return this.getLocationAtTime(e?t:this.getTimeAt(t))},getLocationAtTime:function(t){return null!=t&&t>=0&&t<=1?new N(this,t):null},getTimeAt:function(t,e){return L.getTimeAt(this.getValues(),t,e)},getParameterAt:"#getTimeAt",getTimesWithTangent:function(){var t=f.read(arguments);return t.isZero()?[]:L.getTimesWithTangent(this.getValues(),t)},getOffsetAtTime:function(t){return this.getPartLength(0,t)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf(f.read(arguments)))},getOffsetOf:function(){var t=this.getLocationOf.apply(this,arguments);return t?t.getOffset():null},getTimeOf:function(){return L.getTimeOf(this.getValues(),f.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var t=f.read(arguments),e=this.getValues(),i=L.getNearestTime(e,t),n=L.getPoint(e,i);return new N(this,i,n,null,t.getDistance(n))},getNearestPoint:function(){var t=this.getNearestLocation.apply(this,arguments);return t?t.getPoint():t}},new function(){var t=["getPoint","getTangent","getNormal","getWeightedTangent","getWeightedNormal","getCurvature"];return s.each(t,function(t){this[t+"At"]=function(e,i){var n=this.getValues();return L[t](n,i?e:L.getTimeAt(n,e))},this[t+"AtTime"]=function(e){return L[t](this.getValues(),e)}},{statics:{_evaluateMethods:t}})},new function(){function t(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7],l=9*(n-s)+3*(o-e),u=6*(e+s)-12*n,c=3*(n-e),d=9*(r-a)+3*(h-i),p=6*(i+a)-12*r,f=3*(r-i);return function(t){var e=(l*t+u)*t+c,i=(d*t+p)*t+f;return Math.sqrt(e*e+i*i)}}function e(t,e){return Math.max(2,Math.min(16,Math.ceil(32*Math.abs(e-t))))}function n(t,e,i,n){if(null==e||e<0||e>1)return null;var r=t[0],s=t[1],a=t[2],o=t[3],h=t[4],l=t[5],u=t[6],c=t[7],p=d.isZero;p(a-r)&&p(o-s)&&(a=r,o=s),p(h-u)&&p(l-c)&&(h=u,l=c);var g,m,_=3*(a-r),v=3*(h-a)-_,y=u-r-_-v,b=3*(o-s),x=3*(l-o)-b,w=c-s-b-x;if(0===i)g=0===e?r:1===e?u:((y*e+v)*e+_)*e+r,m=0===e?s:1===e?c:((w*e+x)*e+b)*e+s;else{if(e<1e-8?(g=_,m=b):e>.99999999?(g=3*(u-h),m=3*(c-l)):(g=(3*y*e+2*v)*e+_,m=(3*w*e+2*x)*e+b),n){0===g&&0===m&&(e<1e-8||e>.99999999)&&(g=h-a,m=l-o);var k=Math.sqrt(g*g+m*m);k&&(g/=k,m/=k)}if(3===i){var h=6*y*e+2*v,l=6*w*e+2*x,C=Math.pow(g*g+m*m,1.5);g=0!==C?(g*l-m*h)/C:0,m=0}}return 2===i?new f(m,-g):new f(g,m)}return{statics:{classify:function(t){var e=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],l=t[7],u=r*(n-l)+s*(h-e)+e*l-n*h,c=3*(a*(s-n)+o*(e-r)+r*n-s*e),p=c-u,f=p-u+(e*(l-o)+n*(a-h)+h*o-l*a),g=Math.sqrt(f*f+p*p+c*c),m=0!==g?1/g:0,_=d.isZero,v="serpentine";function y(t,e,n){var r=e!==i,s=r&&e>0&&e<1,a=r&&n>0&&n<1;return!r||(s||a)&&("loop"!==t||s&&a)||(t="arch",s=a=!1),{type:t,roots:s||a?s&&a?e0?Math.sqrt(b/3):Math.sqrt(-b),w=2*f;return y(b>0?v:"loop",(p+x)/w,(p-x)/w)},getLength:function(n,r,s,a){if(r===i&&(r=0),s===i&&(s=1),L.isStraight(n)){var o=n;s<1&&(o=L.subdivide(o,s)[0],r/=s),r>0&&(o=L.subdivide(o,r)[1]);var h=o[6]-o[0],l=o[7]-o[1];return Math.sqrt(h*h+l*l)}return d.integrate(a||t(n),r,s,e(r,s))},getTimeAt:function(n,r,s){if(s===i&&(s=r<0?1:0),0===r)return s;var a=Math.abs,o=r>0,h=o?s:0,l=o?1:s,u=t(n),c=L.getLength(n,h,l,u),p=a(r)-c;if(1e-12>a(p))return o?l:h;if(p>1e-12)return null;var f=r/c,g=0;return d.findRoot(function(t){return g+=d.integrate(u,s,t,e(s,t)),s=t,g-r},u,s+f,h,l,32,1e-12)},getPoint:function(t,e){return n(t,e,0,!1)},getTangent:function(t,e){return n(t,e,1,!0)},getWeightedTangent:function(t,e){return n(t,e,1,!1)},getNormal:function(t,e){return n(t,e,2,!0)},getWeightedNormal:function(t,e){return n(t,e,2,!1)},getCurvature:function(t,e){return n(t,e,3,!1).x},getPeaks:function(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7],l=-e+3*n-3*s+o,u=3*e-6*n+3*s,c=-3*e+3*n,p=-i+3*r-3*a+h,f=3*i-6*r+3*a,g=-3*i+3*r,m=[];return d.solveCubic(9*(l*l+p*p),9*(l*u+f*p),2*(u*u+f*f)+3*(c*l+g*p),c*u+f*g,m,1e-8,.99999999),m.sort()}}}},new function(){function t(t,e,i,n,r,s,a){var o=!a&&i.getPrevious()===r,h=!a&&i!==r&&i.getNext()===r;if(null!==n&&n>=(o?1e-8:0)&&n<=(h?.99999999:1)&&null!==s&&s>=(h?1e-8:0)&&s<=(o?.99999999:1)){var l=new N(i,n,null,a),u=new N(r,s,null,a);l._intersection=u,u._intersection=l,(!e||e(l))&&N.insert(t,l,!0)}}function e(t,e,n,r){return t[0][1]r?i(e,!1,r):t[0][0]}function i(t,e,i){for(var n=t[0][0],r=t[0][1],s=1,a=t.length;s=i:h<=i)return h===i?o:n+(i-r)*(o-n)/(h-r);n=o,r=h}return null}function n(t,e,i,n,r){var s=d.isZero;if(s(n)&&s(r)){var a=L.getTimeOf(t,new f(e,i));return null===a?[]:[a]}for(var o=Math.atan2(-r,n),h=Math.sin(o),l=Math.cos(o),u=[],c=[],p=0;p<8;p+=2){var g=t[p]-e,m=t[p+1]-i;u.push(g*l-m*h,g*h+m*l)}return L.solveCubic(u,1,0,c,0,1),c}function r(i,r,s,o,h,l){var u=Math.min,c=Math.max;if(c(i[0],i[2],i[4],i[6])+1e-12>u(r[0],r[2],r[4],r[6])&&u(i[0],i[2],i[4],i[6])-1e-12u(r[1],r[3],r[5],r[7])&&u(i[1],i[3],i[5],i[7])-1e-12=4096||++u>=40)return c;var m,_,v=r[0],y=r[1],b=r[6],w=r[7],k=x.getSignedDistance,C=k(v,y,b,w,r[2],r[3]),S=k(v,y,b,w,r[4],r[5]),I=C*S>0?3/4:4/9,T=I*Math.min(0,C,S),E=I*Math.max(0,C,S),A=k(v,y,b,w,n[0],n[1]),P=k(v,y,b,w,n[2],n[3]),M=k(v,y,b,w,n[4],n[5]),O=k(v,y,b,w,n[6],n[7]),N=function(t,e,i,n){var r,s=[0,t],a=[1/3,e],o=[2/3,i],h=[1,n],l=e-(2*t+n)/3,u=i-(t+2*n)/3;if(l*u<0)r=[[s,a,h],[s,o,h]];else{var c=l/u;r=[c>=2?[s,a,h]:c<=.5?[s,o,h]:[s,a,o,h],[s,h]]}return 0>(l||u)?r.reverse():r}(A,P,M,O),z=N[0],R=N[1];if(0===C&&0===S&&0===A&&0===P&&0===M&&0===O||null==(m=e(z,R,T,E))||null==(_=e(z.reverse(),R.reverse(),T,E)))return c;var B=d+(p-d)*m,D=d+(p-d)*_;if(1e-9>Math.max(g-f,D-B)){var F=(B+D)/2,V=(f+g)/2;t(o,h,l?a:s,l?V:F,l?s:a,l?F:V)}else{n=L.getPart(n,m,_);var j=g-f;if(_-m>.8){if(D-B>j){var U=L.subdivide(n,.5),F=(B+D)/2;c=i(r,U[0],a,s,o,h,!l,u,c,f,g,B,F),c=i(r,U[1],a,s,o,h,!l,u,c,f,g,F,D)}else{var U=L.subdivide(r,.5),V=(f+g)/2;c=i(U[0],n,a,s,o,h,!l,u,c,f,V,B,D),c=i(U[1],n,a,s,o,h,!l,u,c,V,g,B,D)}}else c=0===j||j>=1e-9?i(r,n,a,s,o,h,!l,u,c,f,g,B,D):i(n,r,s,a,o,h,l,u,c,B,D,f,g)}return c})(y?r:i,y?i:r,y?o:s,y?s:o,h,l,y,0,0,0,1,0,1),!v||h.length===b)for(var p=0;p<4;p++){var w=p>>1,k=1&p,C=6*w,S=6*k,I=new f(i[C],i[C+1]),T=new f(r[S],r[S+1]);I.isClose(T,1e-12)&&t(h,l,s,w,o,k)}}}return h}function s(e,i,n,r){var s=L.classify(e);if("loop"===s.type){var a=s.roots;t(n,r,i,a[0],i,a[1])}return n}function a(t,e){function i(t){var e=t[6]-t[0],i=t[7]-t[1];return e*e+i*i}var n=Math.abs,r=x.getDistance,s=L.isStraight(t),a=L.isStraight(e),o=s&&a,h=i(t)r(c,d,p,g,u[0],u[1],!0)&&1e-7>r(c,d,p,g,u[6],u[7],!0))!o&&1e-7>r(c,d,p,g,l[2],l[3],!0)&&1e-7>r(c,d,p,g,l[4],l[5],!0)&&1e-7>r(c,d,p,g,u[2],u[3],!0)&&1e-7>r(c,d,p,g,u[4],u[5],!0)&&(s=a=o=!0);else if(o)return null;if(s^a)return null;for(var m=[t,e],_=[],v=0;v<4&&_.length<2;v++){var y=1&v,b=1^y,w=v>>1,k=L.getTimeOf(m[y],new f(m[b][w?6:0],m[b][w?7:1]));if(null!=k){var C=y?[w,k]:[k,w];(!_.length||n(C[0]-_[0][0])>1e-8&&n(C[1]-_[0][1])>1e-8)&&_.push(C)}if(v>2&&!_.length)break}if(2!==_.length)_=null;else if(!o){var S=L.getPart(t,_[0][0],_[1][0]),I=L.getPart(e,_[0][1],_[1][1]);(n(I[2]-S[2])>1e-7||n(I[3]-S[3])>1e-7||n(I[4]-S[4])>1e-7||n(I[5]-S[5])>1e-7)&&(_=null)}return _}return{getIntersections:function(t){var e=this.getValues(),i=t&&t!==this&&t.getValues();return i?r(e,i,this,t,[]):s(e,this,[])},statics:{getOverlaps:a,getIntersections:function(t,e,i,n,a,o){var h=!e;h&&(e=t);for(var u=t.length,c=e.length,d=Array(u),p=h?d:Array(c),f=[],g=0;g_){var k=e[w];r(y,p[w],v,k,f,i)}}}return f},getCurveLineIntersections:n,getTimesWithTangent:function(t,e){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],l=t[7],u=e.normalize(),c=u.x,p=u.y,f=3*h-9*a+9*r-3*i,g=3*l-9*o+9*s-3*n,m=6*a-12*r+6*i,_=6*o-12*s+6*n,v=3*r-3*i,y=3*s-3*n,b=2*f*p-2*g*c,x=[];if(Math.abs(b)=0&&w<=1&&x.push(w)}}else{var k=(m*m-4*f*v)*p*p+(-2*m*_+4*g*v+4*f*y)*c*p+(_*_-4*g*y)*c*c,C=m*p-_*c;if(k>=0&&0!=b){var S=Math.sqrt(k),I=-(C+S)/b,T=(-C+S)/b;I>=0&&I<=1&&x.push(I),T>=0&&T<=1&&x.push(T)}}return x}}}}),N=s.extend({_class:"CurveLocation",initialize:function(t,e,i,n,r){if(e>=.99999999){var s=t.getNext();s&&(e=0,t=s)}this._setCurve(t),this._time=e,this._point=i||t.getPointAtTime(e),this._overlap=n,this._distance=r,this._intersection=this._next=this._previous=null},_setPath:function(t){this._path=t,this._version=t?t._version:0},_setCurve:function(t){this._setPath(t._path),this._curve=t,this._segment=null,this._segment1=t._segment1,this._segment2=t._segment2},_setSegment:function(t){var e=t.getCurve();e?this._setCurve(e):(this._setPath(t._path),this._segment1=t,this._segment2=null),this._segment=t,this._time=t===this._segment1?0:1,this._point=t._point.clone()},getSegment:function(){var t=this._segment;if(!t){var e=this.getCurve(),i=this.getTime();0===i?t=e._segment1:1===i?t=e._segment2:null!=i&&(t=e.getPartLength(0,i)a(s.getLength()-o))&&(!h&&!l||h&&l&&h.equals(l,!0))}}return i},toString:function(){var t=[],e=this.getPoint(),i=c.instance;e&&t.push("point: "+e);var n=this.getIndex();null!=n&&t.push("index: "+n);var r=this.getTime();return null!=r&&t.push("time: "+i.number(r)),null!=this._distance&&t.push("distance: "+i.number(this._distance)),"{ "+t.join(", ")+" }"},isTouching:function(){var t=this._intersection;if(t&&this.getTangent().isCollinear(t.getTangent())){var e=this.getCurve(),i=t.getCurve();return!(e.isStraight()&&i.isStraight()&&e.getLine().intersect(i.getLine()))}return!1},isCrossing:function(){var t=this._intersection;if(!t)return!1;var e=this.getTime(),i=t.getTime(),n=e>=1e-8&&e<=.99999999,r=i>=1e-8&&i<=.99999999;if(n&&r)return!this.isTouching();var s=this.getCurve(),a=s&&e<1e-8?s.getPrevious():s,o=t.getCurve(),h=o&&i<1e-8?o.getPrevious():o;if(e>.99999999&&(s=s.getNext()),i>.99999999&&(o=o.getNext()),!a||!s||!h||!o)return!1;var l=[];function u(t,e){var i=t.getValues(),n=L.classify(i).roots||L.getPeaks(i),r=n.length,s=L.getLength(i,e&&r?n[r-1]:0,!e&&r?n[0]:1);l.push(r?s:s/32)}function c(t,e,i){return ee&&te||t=-1&&s<=n;s+=r){var a=t[(s%n+n)%n];if(!e.getPoint().isClose(a.getPoint(),1e-7))break;if(e.equals(a))return a}return null}for(;r<=s;){var o,h=r+s>>>1,l=t[h];if(i&&(o=e.equals(l)?l:a(h,-1)||a(h,1)))return e._overlap&&(o._overlap=o._intersection._overlap=!0),o;var u=e.getPath(),c=l.getPath();(u!==c?u._id-c._id:e.getIndex()+e.getTime()-(l.getIndex()+l.getTime()))<0?s=h-1:r=h+1}return t.splice(r,0,e),e}return{statics:{insert:t,expand:function(e){for(var i=e.slice(),n=e.length-1;n>=0;n--)t(i,e[n]._intersection,!1);return i}}}}),z=k.extend({_class:"PathItem",_selectBounds:!1,_canScaleStroke:!0,beans:!0,initialize:function(){},statics:{create:function(t){if(s.isPlainObject(t)?(i=t.segments,e=t.pathData):Array.isArray(t)?i=t:"string"==typeof t&&(e=t),i){var e,i,n,r=i[0];n=r&&Array.isArray(r[0])}else e&&(n=(e.match(/m/gi)||[]).length>1||/z\s*\S+/i.test(e));return new(n?B:R)(t)}},_asPathItem:function(){return this},isClockwise:function(){return this.getArea()>=0},setClockwise:function(t){this.isClockwise()!=(t=!!t)&&this.reverse()},setPathData:function(t){var e,i,n,r=t&&t.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),s=!1,a=new f,o=new f;function h(t,i){var n=+e[t];return s&&(n+=a[i]),n}function l(t){return new f(h(t,"x"),h(t+1,"y"))}this.clear();for(var u=0,c=r&&r.length;ul&&this[n?"removeSegments":"removeChildren"](l,h);for(var c=0;c=0&&e;u--){var c=i[u];e=!1;var p=h[u];if(p)for(var f=p.length-1;f>=0&&!e;f--)c.compare(n[p[f]])&&(!a[p[f]]&&(a[p[f]]=!0,o++),e=!0)}e=e&&o===s}return e}}),R=z.extend({_class:"Path",_serializeFields:{segments:[],closed:!1},initialize:function(t){this._closed=!1,this._segments=[],this._version=0;var e=arguments,n=Array.isArray(t)?"object"==typeof t[0]?t:e:t&&t.size===i&&(t.x!==i||t.point!==i)?e:null;n&&n.length>0?this.setSegments(n):(this._curves=i,this._segmentSelection=0,n||"string"!=typeof t||(this.setPathData(t),t=null)),this._initialize(!n&&t)},_equals:function(t){return this._closed===t._closed&&s.equals(this._segments,t._segments)},copyContent:function(t){this.setSegments(t._segments),this._closed=t._closed},_changed:function t(e){if(t.base.call(this,e),8&e){if(this._length=this._area=i,32&e)this._version++;else if(this._curves)for(var n=0,r=this._curves.length;n0&&(_(u[0],!0),m.push("z")),m.join("")},isEmpty:function(){return!this._segments.length},_transformContent:function(t){for(var e=this._segments,i=Array(6),n=0,r=e.length;n0&&e+r-1===u?e-1:e,d=c,p=Math.min(c+r,u);t._curves&&(n.splice.apply(n,[c,0].concat(t._curves)),d+=t._curves.length);for(var o=d;o0?t-1:t},add:function(t){var e=arguments;return e.length>1&&"number"!=typeof t?this._add(M.readList(e)):this._add([M.read(e)])[0]},insert:function(t,e){var i=arguments;return i.length>2&&"number"!=typeof e?this._add(M.readList(i,1),t):this._add([M.read(i,1)],t)[0]},addSegment:function(){return this._add([M.read(arguments)])[0]},insertSegment:function(t){return this._add([M.read(arguments,1)],t)[0]},addSegments:function(t){return this._add(M.readList(t))},insertSegments:function(t,e){return this._add(M.readList(e),t)},removeSegment:function(t){return this.removeSegments(t,t+1)[0]||null},removeSegments:function(t,e,i){t=t||0,e=s.pick(e,this._segments.length);var n=this._segments,r=this._curves,a=n.length,o=n.splice(t,e-t),h=o.length;if(!h)return o;for(var l=0;l0&&e===a+(this._closed?1:0)?t-1:t,r=r.splice(d,h),l=r.length-1;l>=0;l--)r[l]._path=null;i&&(o._curves=r.slice(1)),this._adjustCurves(d,d)}return this._changed(41),o},clear:"#removeSegments",hasHandles:function(){for(var t=this._segments,e=0,i=t.length;e0&&this._segmentSelection===7*t},setFullySelected:function(t){t&&this._selectSegments(!0),this.setSelected(t)},setSelection:function t(e){1&e||this._selectSegments(!1),t.base.call(this,e)},_selectSegments:function(t){var e=this._segments,i=e.length,n=t?7:0;this._segmentSelection=n*i;for(var r=0;r0&&this.setSelected(!0)},divideAt:function(t){var e,i=this.getLocationAt(t);return i&&(e=i.getCurve().divideAt(i.getCurveOffset()))?e._segment1:null},splitAt:function(t){var e=this.getLocationAt(t),i=e&&e.index,n=e&&e.time;n>.99999999&&(i++,n=0);var r=this.getCurves();if(i>=0&&i=1e-8&&r[i++].divideAtTime(n);var s,a=this.removeSegments(i,this._segments.length,!0);return this._closed?(this.setClosed(!1),s=this):((s=new R(k.NO_INSERT)).insertAbove(this),s.copyAttributes(this)),s._add(a,0),this.addSegment(a[0]),s}return null},split:function(t,e){var n,r=e===i?t:(n=this.getCurves()[t])&&n.getLocationAtTime(e);return null!=r?this.splitAt(r):null},join:function(t,e){var i=e||0;if(t&&t!==this){var n=t._segments,r=this.getLastSegment(),s=t.getLastSegment();if(!s)return this;r&&r._point.isClose(s._point,i)&&t.reverse();var a=t.getFirstSegment();if(r&&r._point.isClose(a._point,i))r.setHandleOut(a._handleOut),this._add(n.slice(1));else{var o=this.getFirstSegment();o&&o._point.isClose(a._point,i)&&t.reverse(),s=t.getLastSegment(),o&&o._point.isClose(s._point,i)?(o.setHandleIn(s._handleIn),this._add(n.slice(0,n.length-1),0)):this._add(n.slice())}t._closed&&this._add([n[0]]),t.remove()}var h=this.getFirstSegment(),l=this.getLastSegment();return h!==l&&h._point.isClose(l._point,i)&&(h.setHandleIn(l._handleIn),l.remove(),this.setClosed(!0)),this},reduce:function(t){for(var e=this.getCurves(),i=t&&t.simplify,n=i?1e-7:0,r=e.length-1;r>=0;r--){var s=e[r];!s.hasHandles()&&(!s.hasLength(n)||i&&s.isCollinear(s.getNext()))&&s.remove()}return this},reverse:function(){this._segments.reverse();for(var t=0,e=this._segments.length;t0&&n.push(new M(e[i-1].curve.slice(6))),this.setSegments(n)},simplify:function(t){var e=new F(this).fit(t||2.5);return e&&this.setSegments(e),!!e},smooth:function(t){var e=this,n=t||{},r=n.type||"asymmetric",s=this._segments,a=s.length,o=this._closed;function h(t,i){var n=t&&t.index;if(null!=n){var r=t.path;if(r&&r!==e)throw Error(t._class+" "+n+" of "+r+" is not part of "+e);i&&t instanceof L&&n++}else n="number"==typeof t?t:i;return Math.min(n<0&&o?n%a:n<0?n+a:n,a-1)}var l=o&&n.from===i&&n.to===i,u=h(n.from,0),c=h(n.to,a-1);if(u>c){if(o)u-=a;else{var d=u;u=c,c=d}}if(/^(?:asymmetric|continuous)$/.test(r)){var p="asymmetric"===r,f=Math.min,g=c-u+1,m=g-1,_=l?f(g,4):1,v=_,y=_,b=[];if(o||(v=f(1,u),y=f(1,a-c-1)),(m+=v+y)<=1)return;for(var x=0,w=u-v;x<=m;x++,w++)b[x]=s[(w<0?w+a:w)%a]._point;for(var k=b[0]._x+2*b[1]._x,C=b[0]._y+2*b[1]._y,S=2,I=m-1,T=[k],E=[C],A=[2],P=[],M=[],x=1;x=0;x--)P[x]=(T[x]-P[x+1])/A[x],M[x]=(E[x]-M[x+1])/A[x];P[m]=(3*b[m]._x-P[I])/2,M[m]=(3*b[m]._y-M[I])/2;for(var x=v,F=m-y,w=u;x<=F;x++,w++){var V=s[w<0?w+a:w],j=V._point,U=P[x]-j._x,q=M[x]-j._y;(l||xv)&&V.setHandleIn(-U,-q)}}else for(var x=u;x<=c;x++)s[x<0?x+a:x].smooth(n,!l&&x===u,!l&&x===c)},toShape:function(t){if(!this._closed)return null;var e,n,r,s,a,o,h,l=this._segments;function u(t,e){var i=l[t],n=i.getNext(),r=l[e],s=r.getNext();return i._handleOut.isZero()&&n._handleIn.isZero()&&r._handleOut.isZero()&&s._handleIn.isZero()&&n._point.subtract(i._point).isCollinear(s._point.subtract(r._point))}function c(t){var e=l[t],i=e.getNext(),n=e._handleOut,r=i._handleIn;if(n.isOrthogonal(r)){var s=e._point,a=i._point,o=new x(s,n,!0).intersect(new x(a,r,!0),!0);return o&&d.isZero(n.getLength()/o.subtract(s).getLength()-.5522847498307936)&&d.isZero(r.getLength()/o.subtract(a).getLength()-.5522847498307936)}return!1}function p(t,e){return l[t]._point.getDistance(l[e]._point)}if(!this.hasHandles()&&4===l.length&&u(0,2)&&u(1,3)&&(n=(e=l[1]).getPrevious(),r=e.getNext(),n._handleOut.isZero()&&e._handleIn.isZero()&&e._handleOut.isZero()&&r._handleIn.isZero()&&e._point.subtract(n._point).isOrthogonal(r._point.subtract(e._point)))?(s=I.Rectangle,a=new m(p(0,3),p(0,1)),h=l[1]._point.add(l[2]._point).divide(2)):8===l.length&&c(0)&&c(2)&&c(4)&&c(6)&&u(1,5)&&u(3,7)?(s=I.Rectangle,o=(a=new m(p(1,6),p(0,3))).subtract(new m(p(0,7),p(1,2))).divide(2),h=l[3]._point.add(l[4]._point).divide(2)):4===l.length&&c(0)&&c(1)&&c(2)&&c(3)&&(d.isZero(p(0,2)-p(1,3))?(s=I.Circle,o=p(0,2)/2):(s=I.Ellipse,o=new m(p(2,0)/2,p(3,1)/2)),h=l[1]._point),s){var f=this.getPosition(!0),g=new s({center:f,size:a,radius:o,insert:!1});return g.copyAttributes(this,!0),g._matrix.prepend(this._matrix),g.rotate(h.subtract(f).getAngle()+90),(t===i||t)&&g.insertAbove(this),g}return null},toPath:"#clone",compare:function t(e){if(!e||e instanceof B)return t.base.call(this,e);var i=this.getCurves(),n=e.getCurves(),r=i.length,s=n.length;if(!r||!s)return r==s;for(var a,o,h=i[0].getValues(),l=[],u=0,c=0,d=0;d0?s-1:d,o=f[0][1];break}}for(var g,m=Math.abs,p=l[a];h&&p;){var f=L.getOverlaps(h,p);if(f&&1e-8>m(f[0][0]-c)){1===(c=f[1][0])&&(h=++um(_-o)){if(g||(g=[a,_]),1===(o=f[1][1])&&(++a>=s&&(a=0),p=l[a]||n[a].getValues(),o=0),!h)return g[0]===a&&g[1]===o;continue}}break}return!1},_hitTestSelf:function(t,e,i,n){var r,s,a,o,h,l,u=this,c=this.getStyle(),d=this._segments,p=d.length,f=this._closed,g=e._tolerancePadding,m=g,_=e.stroke&&c.hasStroke(),v=e.fill&&c.hasFill(),y=e.curves,b=_?c.getStrokeWidth()/2:v&&e.tolerance>0||y?0:null;function x(e,i){return t.subtract(e).divide(i).length<=1}function w(t,i,n){if(!e.selected||i.isSelected()){var r=t._point;if(i!==r&&(i=i.add(r)),x(i,m))return new P(n,u,{segment:t,point:i})}}function k(t,i){return(i||e.segments)&&w(t,t._point,"segment")||!i&&e.handles&&(w(t,t._handleIn,"handle-in")||w(t,t._handleOut,"handle-out"))}function C(t){o.add(t)}function S(e){var i,h=f||e._index>0&&e._index0?(r=c.getStrokeJoin(),s=c.getStrokeCap(),a=c.getMiterLimit(),m=m.add(R._getStrokePadding(b,n))):r=s="round"),!e.ends||e.segments||f){if(e.segments||e.handles){for(var I=0;I1?S(h.getSegment())||(h=null):x(h.getPoint(),m)||(h=null)}if(!h&&"miter"===r&&p>1)for(var I=0;It)return a.getLocationAt(t-s)}if(e.length>0&&t<=this.getLength())return new N(e[e.length-1],1)}else if(t&&t.getPath&&t.getPath()===this)return t;return null},getOffsetsWithTangent:function(){var t=f.read(arguments);if(t.isZero())return[];for(var e=[],i=0,n=this.getCurves(),r=0,s=n.length;re.indexOf(u)&&e.push(u)}i+=a.length}return e}}),new function(){function t(t,e,i){var n,r,s,a,o,h,l,u,c=e._segments,d=c.length,p=Array(6),f=!0;function g(e){if(i)e._transformCoordinates(i,p),n=p[0],r=p[1];else{var c=e._point;n=c._x,r=c._y}if(f)t.moveTo(n,r),f=!1;else{if(i)o=p[2],h=p[3];else{var d=e._handleIn;o=n+d._x,h=r+d._y}o===n&&h===r&&l===s&&u===a?t.lineTo(n,r):t.bezierCurveTo(l,u,o,h,n,r)}if(s=n,a=r,i)l=p[4],u=p[5];else{var d=e._handleOut;l=s+d._x,u=a+d._y}}for(var m=0;m0&&g(c[0])}return{_draw:function(e,i,n,r){var s=i.dontStart,a=i.dontFinish||i.clip,o=this.getStyle(),h=o.hasFill(),l=o.hasStroke(),u=o.getDashArray(),c=!th.support.nativeDash&&l&&u&&u.length;function d(t){return u[(t%c+c)%c]}if(s||e.beginPath(),(h||l&&!c||a)&&(t(e,this,r),this._closed&&e.closePath()),!a&&(h||l)&&(this._setStyles(e,i,n),h&&(e.fill(o.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),l)){if(c){s||e.beginPath();for(var p,f=new D(this,.25,32,!1,r),g=f.length,m=-o.getDashOffset(),_=0;m>0;)m-=d(_--)+d(_--);for(;m0||p>0)&&f.drawPart(e,Math.max(m,0),Math.max(p,0)),m=p+d(_++)}e.stroke()}},_drawSelected:function(e,i){e.beginPath(),t(e,this,i),e.stroke(),function(t,e,i,n){if(!(n<=0))for(var r,s,a=n/2,o=n-2,h=a-1,l=Array(6),u=0,c=e.length;u0&&!(1&p)){var f=t.fillStyle;t.fillStyle="#ffffff",t.fillRect(r-h,s-h,o,o),t.fillStyle=f}}function g(e){var i=l[e],n=l[e+1];(r!=i||s!=n)&&(t.beginPath(),t.moveTo(r,s),t.lineTo(i,n),t.stroke(),t.beginPath(),t.arc(i,n,a,0,2*Math.PI,!0),t.fill())}}(e,this._segments,i,th.settings.handleSize)}}},new function(){function t(t){var e=t._segments;if(!e.length)throw Error("Use a moveTo() command first");return e[e.length-1]}return{moveTo:function(){var t=this._segments;1===t.length&&this.removeSegment(0),t.length||this._add([new M(f.read(arguments))])},moveBy:function(){throw Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new M(f.read(arguments))])},cubicCurveTo:function(){var e=arguments,i=f.read(e),n=f.read(e),r=f.read(e),s=t(this);s.setHandleOut(i.subtract(s._point)),this._add([new M(r,n.subtract(r))])},quadraticCurveTo:function(){var e=arguments,i=f.read(e),n=f.read(e),r=t(this)._point;this.cubicCurveTo(i.add(r.subtract(i).multiply(1/3)),i.add(n.subtract(i).multiply(1/3)),n)},curveTo:function(){var e=arguments,i=f.read(e),n=f.read(e),r=s.pick(s.read(e),.5),a=1-r,o=t(this)._point,h=i.subtract(o.multiply(a*a)).subtract(n.multiply(r*r)).divide(2*r*a);if(h.isNaN())throw Error("Cannot put a curve through points with parameter = "+r);this.quadraticCurveTo(h,n)},arcTo:function(){var e,i,n,r,a,o=arguments,h=Math.abs,l=Math.sqrt,u=t(this),c=u._point,p=f.read(o),g=s.peek(o),_=s.pick(g,!0);if("boolean"==typeof _)var v=c.add(p).divide(2),e=v.add(v.subtract(c).rotate(_?-90:90));else if(2>=s.remain(o))e=p,p=f.read(o);else if(!c.equals(p)){var y=m.read(o),w=d.isZero;if(w(y.width)||w(y.height))return this.lineTo(p);var k=s.read(o),_=!!s.read(o),C=!!s.read(o),v=c.add(p).divide(2),S=c.subtract(v).rotate(-k),I=S.x,T=S.y,E=h(y.width),A=h(y.height),P=E*E,O=A*A,L=I*I,N=T*T,z=l(L/P+N/O);if(z>1&&(E*=z,A*=z,P=E*E,O=A*A),1e-12>h(z=(P*O-P*N-O*L)/(P*N+O*L))&&(z=0),z<0)throw Error("Cannot create an arc with the given arguments");i=new f(E*T/A,-A*I/E).multiply((C===_?-1:1)*l(z)).rotate(k).add(v),n=(r=(a=new b().translate(i).rotate(k).scale(E,A))._inverseTransform(c)).getDirectedAngle(a._inverseTransform(p)),!_&&n>0?n-=360:_&&n<0&&(n+=360)}if(e){var R=new x(c.add(e).divide(2),e.subtract(c).rotate(90),!0),B=new x(e.add(p).divide(2),p.subtract(e).rotate(90),!0),D=new x(c,p),F=D.getSide(e);if(!(i=R.intersect(B,!0))){if(!F)return this.lineTo(p);throw Error("Cannot create an arc with the given arguments")}n=(r=c.subtract(i)).getDirectedAngle(p.subtract(i));var V=D.getSide(i,!0);0===V?n=F*h(n):F===V&&(n+=n<0?360:-360)}if(n){for(var j=h(n),U=j>=360?4:Math.ceil((j-1e-5)/90),q=n/U,Z=q*Math.PI/360,H=4/3*Math.sin(Z)/(1+Math.cos(Z)),G=[],W=0;W<=U;W++){var S=p,K=null;if(W0){for(var k=1;k=180)&&(c=c.negate(),d=d.negate()),o&&a(u),a(u.add(c)),"miter"===e){var g=new x(u.add(c),new f(-c.y,c.x),!0).intersect(new x(u.add(d),new f(-d.y,d.x),!0),!0);g&&u.getDistance(g)<=n*i&&a(g)}a(u.add(d))},_addSquareCap:function(t,e,i,n,r,s,a){var o=t._point.transform(n),h=t.getLocation(),l=h.getNormal().multiply(0===h.getTime()?i:-i).transform(r);"square"===e&&(a&&(s(o.subtract(l)),s(o.add(l))),o=o.add(l.rotate(-90))),s(o.add(l)),s(o.subtract(l))},getHandleBounds:function(t,e,i,n,r){var s,a,o=i.getStyle();if(r.stroke&&o.hasStroke()){var h=i._getStrokeMatrix(n,r),l=o.getStrokeWidth()/2,u=l;"miter"===o.getStrokeJoin()&&(u=l*o.getMiterLimit()),"square"===o.getStrokeCap()&&(u=Math.max(u,l*Math.SQRT2)),s=R._getStrokePadding(l,h),a=R._getStrokePadding(u,h)}for(var c=Array(6),d=1/0,p=-1/0,f=1/0,g=p,m=0,_=t.length;m<_;m++){t[m]._transformCoordinates(n,c);for(var y=0;y<6;y+=2){var b=y?s:a,x=b?b[0]:0,w=b?b[1]:0,k=c[y],C=c[y+1],S=k-x,I=k+x,T=C-w,E=C+w;Sp&&(p=I),Tg&&(g=E)}}return new v(d,f,p-d,g-f)}}});R.inject({statics:new function(){var t=[new M([-1,0],[0,.5522847498307936],[0,-.5522847498307936]),new M([0,-1],[-.5522847498307936,0],[.5522847498307936,0]),new M([1,0],[0,-.5522847498307936],[0,.5522847498307936]),new M([0,1],[.5522847498307936,0],[-.5522847498307936,0])];function e(t,e,i){var n=s.getNamed(i),r=new R(n&&(!0==n.insert?k.INSERT:!1==n.insert?k.NO_INSERT:null));return r._add(t),r._closed=e,r.set(n,k.INSERT)}function i(i,n,r){for(var s=[,,,,],a=0;a<4;a++){var o=t[a];s[a]=new M(o._point.multiply(n).add(i),o._handleIn.multiply(n),o._handleOut.multiply(n))}return e(s,!0,r)}return{Line:function(){var t=arguments;return e([new M(f.readNamed(t,"from")),new M(f.readNamed(t,"to"))],!1,t)},Circle:function(){var t=arguments;return i(f.readNamed(t,"center"),new m(s.readNamed(t,"radius")),t)},Rectangle:function(){var t,i=arguments,n=v.readNamed(i,"rectangle"),r=m.readNamed(i,"radius",0,{readNull:!0}),s=n.getBottomLeft(!0),a=n.getTopLeft(!0),o=n.getTopRight(!0),h=n.getBottomRight(!0);if(!r||r.isZero())t=[new M(s),new M(a),new M(o),new M(h)];else{var l=(r=m.min(r,n.getSize(!0).divide(2))).width,u=r.height,c=.5522847498307936*l,d=.5522847498307936*u;t=[new M(s.add(l,0),null,[-c,0]),new M(s.subtract(0,u),[0,d]),new M(a.add(0,u),null,[0,-d]),new M(a.add(l,0),[-c,0],null),new M(o.subtract(l,0),null,[c,0]),new M(o.add(0,u),[0,-d],null),new M(h.subtract(0,u),null,[0,d]),new M(h.subtract(l,0),[c,0])]}return e(t,!0,i)},RoundRectangle:"#Rectangle",Ellipse:function(){var t=arguments,e=I._readEllipse(t);return i(e.center,e.radius,t)},Oval:"#Ellipse",Arc:function(){var t=arguments,e=f.readNamed(t,"from"),i=f.readNamed(t,"through"),n=f.readNamed(t,"to"),r=s.getNamed(t),a=new R(r&&!1==r.insert&&k.NO_INSERT);return a.moveTo(e),a.arcTo(i,n),a.set(r)},RegularPolygon:function(){for(var t=arguments,i=f.readNamed(t,"center"),n=s.readNamed(t,"sides"),r=s.readNamed(t,"radius"),a=360/n,o=n%3==0,h=new f(0,o?-r:r),l=o?-1:.5,u=Array(n),c=0;c=0;a--){var o=n[a];n!==i||o instanceof R||(n=s.slice(n)),Array.isArray(o)?n[a]=new R({segments:o,insert:!1}):o instanceof B&&(n.splice.apply(n,[a,1].concat(o.removeChildren())),o.remove())}return t.base.call(this,e,n)},reduce:function t(e){for(var i=this._children,n=i.length-1;n>=0;n--){var r=i[n].reduce(e);r.isEmpty()&&r.remove()}if(!i.length){var r=new R(k.NO_INSERT);return r.copyAttributes(this),r.insertAbove(this),this.remove(),r}return t.base.call(this)},isClosed:function(){for(var t=this._children,e=0,i=t.length;e=0;f--){var g=s[f].split();g&&(p(g)&&g.getFirstSegment().setHandleIn(0,0),n.getLastSegment().setHandleOut(0,0))}return p(n),h(d,!1,t,e)}function f(t,e){for(var i=t;i;){if(i===e)return;i=i._previous}for(;t._next&&t._next!==e;)t=t._next;if(!t._next){for(;e._previous;)e=e._previous;t._next=e,e._previous=t}}function g(t){for(var e=t.length-1;e>=0;e--)t[e].clearHandles()}function m(t,e,i){var r=t&&t.length;if(r){var a=s.each(t,function(t,e){this[t._id]={container:null,winding:t.isClockwise()?1:-1,index:e}},{}),o=t.slice().sort(function(t,e){return n(e.getArea())-n(t.getArea())}),h=o[0],u=l.findItemBoundsCollisions(o,null,d.GEOMETRIC_EPSILON);null==i&&(i=h.isClockwise());for(var c=0;c=0;v--)if(m[v]=0;c--){var d=i[c];d._path&&(l[u(d)]=!0)}for(var c=t.length-1;c>=0;c--){var p,m=t[c],_=m._time,v=_,y=e&&!e(m),d=m._curve;if(d&&(d!==r?(o=!d.hasHandles()||l&&l[u(d)],n=[],s=null,r=d):s>=1e-8&&(_/=s)),y){n&&n.push(m);continue}if(e&&a.unshift(m),s=v,_<1e-8)p=d._segment1;else if(_>.99999999)p=d._segment2;else{var b=d.divideAtTime(_,!0);o&&h.push(d,b),p=b._segment1;for(var x=n.length-1;x>=0;x--){var w=n[x];w._time=(w._time-_)/(1-_)}}m._setSegment(p);var k=p._intersection,C=m._intersection;if(k){f(k,C);for(var S=k;S;)f(S._intersection,k),S=S._next}else p._intersection=C}return i||g(h),a||t}function v(i,r,s,a,o){var h,l,u=Array.isArray(r)?r:r[s?"hor":"ver"],c=s?1:0,d=1^c,p=[i.x,i.y],f=p[c],g=p[d],m=f-1e-9,_=f+1e-9,y=0,b=0,x=0,w=0,k=!1,C=!1,S=1,I=[];function T(n){var l=n[d+0],u=n[d+2],p=n[d+4],y=n[d+6];if(g<=e(l,u,p,y)&&g>=t(l,u,p,y)){for(var b,C=n[c+0],T=n[c+2],E=n[c+4],A=n[c+6],P=m>e(C,T,E,A)||_e(l,u))){var p=n[c+0],y=n[c+2],b=n[c+4],C=n[c+6];if(l===u){(p<_&&C>m||C<_&&p>m)&&(k=!0);return}var T=g===l?0:g===u?1:m>e(p,y,b,C)||_0?I[0]:1,E=0===T?p:1===T?C:L.getPoint(n,T)[s?"y":"x"],A=l>u?1:-1,P=h[d]>h[d+6]?1:-1,M=h[c+6];return g!==l?(E_?w+=A:k=!0,E>f-1e-6&&E_&&(w+=A):p!=M&&(M<_&&E>_?(w+=A,k=!0):M>m&&Em&&E<_&&0===L.getTangent(n,T)[s?"x":"y"]&&v(i,r,!s,a,!0)}}(P[M]))return b}}for(var E=0,A=u.length;Ea.quality&&(a=I);break}c-=y}for(var g=o.length-1;g>=0;g--)o[g].segment._winding=a}function b(t,e){var i,n=[];function r(t){var i;return!!(t&&!t._visited&&(!e||e[(i=t._winding||{}).winding]&&!(e.unite&&2===i.winding&&i.windingL&&i.windingR)))}function s(t){if(t){for(var e=0,n=i.length;e=0;l--){var u=h[l],c=u._path,d=u._segment,p=d.getPrevious(),f=d.getNext();i(p,c)&&i(f,c)&&(d.remove(),p._handleOut._set(0,0),f._handleIn._set(0,0),p===d||p.getCurve().hasLength()||(f._handleIn.set(p._handleIn),p.remove()))}r&&(_(a,n&&function(t){var e=t.getCurve(),i=t.getSegment(),n=t._intersection,r=n._curve,s=n._segment;if(e&&r&&e._path&&r._path)return!0;i&&(i._intersection=null),s&&(s._intersection=null)},o),o&&g(o),e=b(s.each(e,function(t){s.push(this,t._segments)},[])));var m,v=e.length;return v>1&&t?(e!==t&&this.setChildren(e),m=this):1!==v||t||(e[0]!==this&&this.setSegments(e[0].removeSegments()),m=this),m||((m=new B(k.NO_INSERT)).addChildren(e),(m=m.reduce()).copyAttributes(this),this.replaceWith(m)),m},reorient:function(t,e){var n=this._children;return n&&n.length?this.setChildren(m(this.removeChildren(),function(e){return!!(t?e:1&e)},e)):e!==i&&this.setClockwise(e),this},getInteriorPoint:function(){var i=this.getBounds().getCenter(!0);if(!this.contains(i)){for(var n=this.getCurves(),r=i.y,s=[],a=[],o=0,h=n.length;o=t(u,c,d,p)&&r<=e(u,c,d,p))for(var f=L.getMonoCurves(l),g=0,m=f.length;g=v&&r<=y||r>=y&&r<=v)){var b=r===v?_[0]:r===y?_[6]:1===L.solveCubic(_,1,r,a,0,1)?L.getPoint(_,a[0]).x:(_[0]+_[6])/2;s.push(b)}}}s.length>1&&(s.sort(function(t,e){return t-e}),i.x=(s[0]+s[1])/2)}return i}}});var D=s.extend({_class:"PathFlattener",initialize:function(t,e,i,n,r){var s,a=[],o=[],h=0,l=1/(i||32),u=t._segments,c=u[0];function d(t,i){var s=L.getValues(t,i,r);a.push(s),function t(i,r,s,a){if(!(a-s>l)||n&&L.isStraight(i)||L.isFlatEnough(i,e||.25)){var u=i[6]-i[0],c=i[7]-i[1],d=Math.sqrt(u*u+c*c);d>0&&(h+=d,o.push({offset:h,curve:i,index:r,time:a}))}else{var p=L.subdivide(i,.5),f=(s+a)/2;t(p[0],r,s,f),t(p[1],r,f,a)}}(s,t._index,0,1)}for(var p=1,f=u.length;p=t){this.index=e;var a=i[e-1],o=a&&a.index===s.index?a.time:0,h=a?a.offset:0;return{index:s.index,time:o+(s.time-o)*(t-h)/(s.offset-h)}}}return{index:i[n-1].index,time:1}},drawPart:function(t,e,i){for(var n=this._get(e),r=this._get(i),s=n.index,a=r.index;s<=a;s++){var o=L.getPart(this.curves[s],s===n.index?n.time:0,s===r.index?r.time:1);s===n.index&&t.moveTo(o[0],o[1]),t.bezierCurveTo.apply(t,o.slice(2))}}},s.each(L._evaluateMethods,function(t){this[t+"At"]=function(e){var i=this._get(e);return L[t](this.curves[i.index],i.time)}},{})),F=s.extend({initialize:function(t){for(var e,i=this.points=[],n=t._segments,r=t._closed,s=0,a=n.length;s0&&(n=[new M(e[0])],i>1&&(this.fitCubic(n,t,0,i-1,e[1].subtract(e[0]),e[i-2].subtract(e[i-1])),this.closed&&(n.shift(),n.pop()))),n},fitCubic:function(t,e,i,n,r,s){var a=this.points;if(n-i==1){var o=a[i],h=a[n],l=o.getDistance(h)/3;this.addCurve(t,[o,o.add(r.normalize(l)),h.add(s.normalize(l)),h]);return}for(var u,c=this.chordLengthParameterize(i,n),d=Math.max(e,e*e),p=!0,f=0;f<=4;f++){var g=this.generateBezier(i,n,c,r,s),m=this.findMaxError(i,n,g,c);if(m.error=d)break;p=this.reparameterize(i,n,c,g),d=m.error}var _=a[u-1].subtract(a[u+1]);this.fitCubic(t,e,i,u,r,_),this.fitCubic(t,e,u,n,_.negate(),s)},addCurve:function(t,e){t[t.length-1].setHandleOut(e[1].subtract(e[0])),t.push(new M(e[3],e[2].subtract(e[3])))},generateBezier:function(t,e,i,n,r){for(var s=Math.abs,a=this.points,o=a[t],h=a[e],l=[[0,0],[0,0]],u=[0,0],c=0,d=e-t+1;c1e-12){var I=l[0][0]*u[1]-l[1][0]*u[0];k=(u[0]*l[1][1]-u[1]*l[0][1])/S,C=I/S}else{var T=l[0][0]+l[0][1],E=l[1][0]+l[1][1];k=C=s(T)>1e-12?u[0]/T:s(E)>1e-12?u[1]/E:0}var A,P,M=h.getDistance(o),O=1e-12*M;if(kM*M&&(k=C=M/3,A=P=null)}return[o,o.add(A||n.normalize(k)),h.add(P||r.normalize(C)),h]},reparameterize:function(t,e,i,n){for(var r=t;r<=e;r++)i[r-t]=this.findRoot(n,this.points[r],i[r-t]);for(var r=1,s=i.length;r=s&&(s=h,r=a)}return{error:s,index:r}}}),V=k.extend({_class:"TextItem",_applyMatrix:!1,_canApplyMatrix:!1,_serializeFields:{content:null},_boundsOptions:{stroke:!1,handle:!1},initialize:function(t){this._content="",this._lines=[];var e=t&&s.isPlainObject(t)&&t.x===i&&t.y===i;this._initialize(e&&t,!e&&f.read(arguments))},_equals:function(t){return this._content===t._content},copyContent:function(t){this.setContent(t._content)},getContent:function(){return this._content},setContent:function(t){this._content=""+t,this._lines=this._content.split(/\r\n|\n|\r/mg),this._changed(521)},isEmpty:function(){return!this._content},getCharacterStyle:"#getStyle",setCharacterStyle:"#setStyle",getParagraphStyle:"#getStyle",setParagraphStyle:"#setStyle"}),j=V.extend({_class:"PointText",initialize:function(){V.apply(this,arguments)},getPoint:function(){var t=this._matrix.getTranslation();return new g(t.x,t.y,this,"setPoint")},setPoint:function(){var t=f.read(arguments);this.translate(t.subtract(this._matrix.getTranslation()))},_draw:function(t,e,i){if(this._content){this._setStyles(t,e,i);var n=this._lines,r=this._style,s=r.hasFill(),a=r.hasStroke(),o=r.getLeading(),h=t.shadowColor;t.font=r.getFontStyle(),t.textAlign=r.getJustification();for(var l=0,u=n.length;l1&&(h-=1),a[o]=6*h<1?s+(r-s)*6*h:2*h<1?r:3*h<2?s+(r-s)*(2/3-h)*6:s}return a},"rgb-gray":function(t,e,i){return[.2989*t+.587*e+.114*i]},"gray-rgb":function(t){return[t,t,t]},"gray-hsb":function(t){return[0,0,t]},"gray-hsl":function(t){return[0,0,t]},"gradient-rgb":function(){return[]},"rgb-gradient":function(){return[]}};return s.each(e,function(t,n){i[n]=[],s.each(t,function(t,r){var a=s.capitalize(t),o=/^(hue|saturation)$/.test(t),h=i[n][r]="gradient"===n?"gradient"===t?function(t){var e=this._components[0];return t=q.read(Array.isArray(t)?t:arguments,0,{readNull:!0}),e!==t&&(e&&e._removeOwner(this),t&&t._addOwner(this)),t}:function(){return f.read(arguments,0,{readNull:"highlight"===t,clone:!0})}:function(t){return null==t||isNaN(t)?0:+t};this["get"+a]=function(){return this._type===n||o&&/^hs[bl]$/.test(this._type)?this._components[r]:this._convert(n)[r]},this["set"+a]=function(t){this._type===n||o&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(n),this._properties=e[n],this._type=n),this._components[r]=h.call(this,t),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function a(o){var h,l,u,c,d=arguments,p=this.__read,f=0;Array.isArray(o)&&(o=(d=o)[0]);var g=null!=o&&typeof o;if("string"===g&&o in e&&(h=o,Array.isArray(o=d[1])?(l=o,u=d[2]):(p&&(f=1),d=s.slice(d,1),g=typeof o)),!l){if(c="number"===g?d:"object"===g&&null!=o.length?o:null){h||(h=c.length>=3?"rgb":"gray");var m=e[h].length;u=c[m],p&&(f+=c===arguments?m+(null!=u?1:0):1),c.length>m&&(c=s.slice(c,0,m))}else if("string"===g){var _=function(e){var i,s=e.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i)||e.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i),a="rgb";if(s){var o=s[4]?4:3;i=Array(o);for(var h=0;h1?1:t)*255)}return e=[n(e[0]),n(e[1]),n(e[2])],i<1&&e.push(i<0?0:i),t?"#"+(16777216+(e[0]<<16)+(e[1]<<8)+e[2]).toString(16).slice(1):(4==e.length?"rgba(":"rgb(")+e.join(",")+")"},toCanvasStyle:function(t,e){if(this._canvasStyle)return this._canvasStyle;if("gradient"!==this._type)return this._canvasStyle=this.toCSS();var i,n=this._components,r=n[0],s=r._stops,a=n[1],o=n[2],h=n[3],l=e&&e.inverted();if(l&&(a=l._transformPoint(a),o=l._transformPoint(o),h&&(h=l._transformPoint(h))),r._radial){var u=o.getDistance(a);if(h){var c=h.subtract(a);c.getLength()>u&&(h=a.add(c.normalize(u-.1)))}var d=h||a;i=t.createRadialGradient(d.x,d.y,0,a.x,a.y,u)}else i=t.createLinearGradient(a.x,a.y,o.x,o.y);for(var p=0,f=s.length;p0&&!(i instanceof B);if(s)for(var a=0,o=r.length;a0&&!(a instanceof B);if(l&&!t)for(var u=0,p=o.length;u0},hasStroke:function(){var t=this.getStrokeColor();return!!t&&t.alpha>0&&this.getStrokeWidth()>0},hasShadow:function(){var t=this.getShadowColor();return!!t&&t.alpha>0&&(this.getShadowBlur()>0||!this.getShadowOffset().isZero())},getView:function(){return this._project._view},getFontStyle:function(){var t=this.getFontSize();return this.getFontWeight()+" "+t+(/[a-z]/i.test(t+"")?" ":"px ")+this.getFontFamily()},getFont:"#getFontFamily",setFont:"#setFontFamily",getLeading:function t(){var e=t.base.call(this),i=this.getFontSize();return/pt|em|%|px/.test(i)&&(i=this.getView().getPixelSize(i)),null!=e?e:1.2*i}}),G=new function(){function t(t,e,i,n){for(var r=["","webkit","moz","Moz","ms","o"],s=e[0].toUpperCase()+e.substring(1),a=0;a<6;a++){var o=r[a],h=o?o+s:e;if(h in t){if(!i)return t[h];t[h]=n;break}}}return{getStyles:function(t){var e=t&&9!==t.nodeType?t.ownerDocument:t,i=e&&e.defaultView;return i&&i.getComputedStyle(t,"")},getBounds:function(t,e){var i,n=t.ownerDocument,r=n.body,s=n.documentElement;try{i=t.getBoundingClientRect()}catch(t){i={left:0,top:0,width:0,height:0}}var a=i.left-(s.clientLeft||r.clientLeft||0),o=i.top-(s.clientTop||r.clientTop||0);if(!e){var h=n.defaultView;a+=h.pageXOffset||s.scrollLeft||r.scrollLeft,o+=h.pageYOffset||s.scrollTop||r.scrollTop}return new v(a,o,i.width,i.height)},getViewportBounds:function(t){var e=t.ownerDocument,i=e.defaultView,n=e.documentElement;return new v(0,0,i.innerWidth||n.clientWidth,i.innerHeight||n.clientHeight)},getOffset:function(t,e){return G.getBounds(t,e).getPoint()},getSize:function(t){return G.getBounds(t,!0).getSize()},isInvisible:function(t){return G.getSize(t).equals(new m(0,0))},isInView:function(t){return!G.isInvisible(t)&&G.getViewportBounds(t).intersects(G.getBounds(t,!0))},isInserted:function(t){return r.body.contains(t)},getPrefixed:function(e,i){return e&&t(e,i)},setPrefixed:function(e,i,n){if("object"==typeof i)for(var r in i)t(e,r,!0,i[r]);else t(e,i,!0,n)}}},W={add:function(t,e){if(t)for(var i in e)for(var n=e[i],s=i.split(/[\s,]+/g),a=0,o=s.length;a1?s.hyphenate(e):e.toLowerCase())}function d(e,i,n,r){var a,o=K._focused;if(h[i]=e,e?l[i]=n:delete l[i],i.length>1&&(a=s.camelize(i))in u){u[a]=e;var c=th&&th.agent;if("meta"===a&&c&&c.mac){if(e)t={};else{for(var p in t)p in l&&d(!1,p,t[p],r);t=null}}}else e&&t&&(t[i]=n);o&&o._handleKeyEvent(e?"keydown":"keyup",r,i,n)}return W.add(r,{keydown:function(t){var i=c(t),n=th&&th.agent;i.length>1||n&&n.chrome&&(t.altKey||n.mac&&t.metaKey||!n.mac&&t.ctrlKey)?d(!0,i,o[i]||(i.length>1?"":i),t):e=i},keypress:function(t){if(e){var i=c(t),n=t.charCode,r=n>=32?String.fromCharCode(n):i.length>1?"":i;i!==e&&(i=r.toLowerCase()),d(!0,i,r,t),e=null}},keyup:function(t){var e=c(t);e in l&&d(!1,e,l[e],t)}}),W.add(n,{blur:function(t){for(var e in l)d(!1,e,l[e],t)}}),{modifiers:u,isDown:function(t){return!!h[t]}}},J=Y.extend({_class:"MouseEvent",initialize:function(t,e,i,n,r){this.type=t,this.event=e,this.point=i,this.target=n,this.delta=r},toString:function(){return"{ type: '"+this.type+"', point: "+this.point+", target: "+this.target+(this.delta?", delta: "+this.delta:"")+", modifiers: "+this.getModifiers()+" }"}}),tt=Y.extend({_class:"ToolEvent",_item:null,initialize:function(t,e,i){this.tool=t,this.type=e,this.event=i},_choosePoint:function(t,e){return t||(e?e.clone():null)},getPoint:function(){return this._choosePoint(this._point,this.tool._point)},setPoint:function(t){this._point=t},getLastPoint:function(){return this._choosePoint(this._lastPoint,this.tool._lastPoint)},setLastPoint:function(t){this._lastPoint=t},getDownPoint:function(){return this._choosePoint(this._downPoint,this.tool._downPoint)},setDownPoint:function(t){this._downPoint=t},getMiddlePoint:function(){return!this._middlePoint&&this.tool._lastPoint?this.tool._point.add(this.tool._lastPoint).divide(2):this._middlePoint},setMiddlePoint:function(t){this._middlePoint=t},getDelta:function(){return!this._delta&&this.tool._lastPoint?this.tool._point.subtract(this.tool._lastPoint):this._delta},setDelta:function(t){this._delta=t},getCount:function(){return this.tool[/^mouse(down|up)$/.test(this.type)?"_downCount":"_moveCount"]},setCount:function(t){this.tool[/^mouse(down|up)$/.test(this.type)?"downCount":"count"]=t},getItem:function(){if(!this._item){var t=this.tool._scope.project.hitTest(this.getPoint());if(t){for(var e=t.item,i=e._parent;/^(Group|CompoundPath)$/.test(i._class);)e=i,i=i._parent;this._item=e}}return this._item},setItem:function(t){this._item=t},toString:function(){return"{ type: "+this.type+", point: "+this.getPoint()+", count: "+this.getCount()+", modifiers: "+this.getModifiers()+" }"}}),te=h.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(t){h.call(this),this._moveCount=-1,this._downCount=-1,this.set(t)},getMinDistance:function(){return this._minDistance},setMinDistance:function(t){this._minDistance=t,null!=t&&null!=this._maxDistance&&t>this._maxDistance&&(this._maxDistance=t)},getMaxDistance:function(){return this._maxDistance},setMaxDistance:function(t){this._maxDistance=t,null!=this._minDistance&&null!=t&&t=0&&s.equals(a))return!1;if(a&&(null!=t||null!=e)){var o=s.subtract(a),h=o.getLength();if(h<(t||0))return!1;e&&(s=a.add(o.normalize(Math.min(h,e))))}l._moveCount++}return l._point=s,l._lastPoint=a||s,n.down&&(l._moveCount=-1,l._downPoint=s,l._downCount++),!0}function c(){s&&(h=l.emit(t,new tt(l,t,e))||h)}if(n.down)u(),c();else if(n.up)u(null,o),c();else if(s)for(;u(a,o);)c();return h}}),ti=s.extend(a,{_class:"Tween",statics:{easings:new s({linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:-1+2*(2-t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}})},initialize:function t(e,i,n,r,s,a){this.object=e;var o=typeof s,h="function"===o;this.type=h?o:"string"===o?s:"linear",this.easing=h?s:t.easings[this.type],this.duration=r,this.running=!1,this._then=null,this._startTime=null;var l=i||n;this._keys=l?Object.keys(l):[],this._parsedKeys=this._parseKeys(this._keys),this._from=l&&this._getState(i),this._to=l&&this._getState(n),!1!==a&&this.start()},then:function(t){return this._then=t,this},start:function(){return this._startTime=null,this.running=!0,this},stop:function(){return this.running=!1,this},update:function(t){if(this.running){t>=1&&(t=1,this.running=!1);for(var e=this.easing(t),i=this._keys,n=function(i){return"function"==typeof i?i(e,t):i},r=0,a=i&&i.length;r255){var h=255-n,f=a-n;l=n+(l-n)*h/f,u=n+(u-n)*h/f,c=n+(c-n)*h/f}}function _(t,e,i){return p(t,e,i)-d(t,e,i)}function v(t,e,i,n){var r,s=[t,e,i],a=p(t,e,i),o=d(t,e,i);r=0===d(o=o===t?0:o===e?1:2,a=a===t?0:a===e?1:2)?1===p(o,a)?2:1:0,s[a]>s[o]?(s[r]=(s[r]-s[o])*n/(s[a]-s[o]),s[a]=n):s[r]=s[a]=0,s[o]=0,l=s[0],u=s[1],c=s[2]}var y={multiply:function(){l=r*t/255,u=a*e/255,c=o*i/255},screen:function(){l=r+t-r*t/255,u=a+e-a*e/255,c=o+i-o*i/255},overlay:function(){l=r<128?2*r*t/255:255-2*(255-r)*(255-t)/255,u=a<128?2*a*e/255:255-2*(255-a)*(255-e)/255,c=o<128?2*o*i/255:255-2*(255-o)*(255-i)/255},"soft-light":function(){var n=t*r/255;l=n+r*(255-(255-r)*(255-t)/255-n)/255,u=(n=e*a/255)+a*(255-(255-a)*(255-e)/255-n)/255,c=(n=i*o/255)+o*(255-(255-o)*(255-i)/255-n)/255},"hard-light":function(){l=t<128?2*t*r/255:255-2*(255-t)*(255-r)/255,u=e<128?2*e*a/255:255-2*(255-e)*(255-a)/255,c=i<128?2*i*o/255:255-2*(255-i)*(255-o)/255},"color-dodge":function(){l=0===r?0:255===t?255:d(255,255*r/(255-t)),u=0===a?0:255===e?255:d(255,255*a/(255-e)),c=0===o?0:255===i?255:d(255,255*o/(255-i))},"color-burn":function(){l=255===r?255:0===t?0:p(0,255-(255-r)*255/t),u=255===a?255:0===e?0:p(0,255-(255-a)*255/e),c=255===o?255:0===i?0:p(0,255-(255-o)*255/i)},darken:function(){l=rt?r:t,u=a>e?a:e,c=o>i?o:i},difference:function(){(l=r-t)<0&&(l=-l),(u=a-e)<0&&(u=-u),(c=o-i)<0&&(c=-c)},exclusion:function(){l=r+t*(255-r-r)/255,u=a+e*(255-a-a)/255,c=o+i*(255-o-o)/255},hue:function(){v(t,e,i,_(r,a,o)),m(l,u,c,g(r,a,o))},saturation:function(){v(r,a,o,_(t,e,i)),m(l,u,c,g(r,a,o))},luminosity:function(){m(r,a,o,g(t,e,i))},color:function(){m(t,e,i,g(r,a,o))},add:function(){l=d(r+t,255),u=d(a+e,255),c=d(o+i,255)},subtract:function(){l=p(r-t,0),u=p(a-e,0),c=p(o-i,0)},average:function(){l=(r+t)/2,u=(a+e)/2,c=(o+i)/2},negation:function(){l=255-f(255-t-r),u=255-f(255-e-a),c=255-f(255-i-o)}},b=this.nativeModes=s.each(["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","darker","copy","xor"],function(t){this[t]=!0},{}),x=tr.getContext(1,1,{willReadFrequently:!0});x&&(s.each(y,function(t,e){var i="darken"===e,n=!1;x.save();try{x.fillStyle=i?"#300":"#a00",x.fillRect(0,0,1,1),x.globalCompositeOperation=e,x.globalCompositeOperation===e&&(x.fillStyle=i?"#a00":"#300",x.fillRect(0,0,1,1),n=x.getImageData(0,0,1,1).data[0]!==i?170:51)}catch(t){}x.restore(),b[e]=n}),tr.release(x)),this.process=function(s,d,p,f,g){var m=d.canvas,_="normal"===s;if(_||b[s])p.save(),p.setTransform(1,0,0,1,0,0),p.globalAlpha=f,_||(p.globalCompositeOperation=s),p.drawImage(m,g.x,g.y),p.restore();else{var v=y[s];if(!v)return;for(var x=p.getImageData(g.x,g.y,m.width,m.height),w=x.data,k=d.getImageData(0,0,m.width,m.height).data,C=0,S=w.length;C=2&&!e.hasHandles()){if(l>2){o=e._closed?"polygon":"polyline";for(var c=[],d=0;d3){i.sort(function(t,e){return e.length-t.length}),e+="switch(str.length){";for(var n=0;n=170&&tF.test(String.fromCharCode(t)))},tZ=t.isIdentifierChar=function(t){return t<48?36===t:t<58||!(t<65)&&(t<91||(t<97?95===t:t<123||t>=170&&tV.test(String.fromCharCode(t))))};function tH(){this.line=p,this.column=s-f}function tG(){p=1,s=f=0,d=!0,t$()}function tW(t,i){o=s,e.locations&&(l=new tH),u=t,t$(),c=i,d=t.beforeExpr}function tK(){for(var t=s,r=e.onComment&&e.locations&&new tH,a=i.charCodeAt(s+=2);s8&&t<14)++s;else if(47===t){var r=i.charCodeAt(s+1);if(42===r)!function(){var t,n=e.onComment&&e.locations&&new tH,r=s,a=i.indexOf("*/",s+=2);if(-1===a&&S(s-2,"Unterminated comment"),s=a+2,e.locations)for(tU.lastIndex=r;(t=tU.exec(i))&&t.index=5760&&tB.test(String.fromCharCode(t)))++s;else break}}function tY(t){if(t?s=a+1:a=s,e.locations&&(h=new tH),t)return tX();if(s>=n)return tW(M);var r=i.charCodeAt(s);if(tq(r)||92===r)return t5();var o=function(t){switch(t){case 46:return(u=i.charCodeAt(s+1))>=48&&u<=57?t0(!0):(++s,tW(tp));case 40:return++s,tW(th);case 41:return++s,tW(tl);case 59:return++s,tW(tc);case 44:return++s,tW(tu);case 91:return++s,tW(tr);case 93:return++s,tW(ts);case 123:return++s,tW(ta);case 125:return++s,tW(to);case 58:return++s,tW(td);case 63:return++s,tW(tf);case 48:var r,o,h,l,u,c,g,_=i.charCodeAt(s+1);if(120===_||88===_)return s+=2,null==(l=tJ(16))&&S(a+2,"Expected hexadecimal number"),tq(i.charCodeAt(s))&&S(s,"Identifier directly after number"),tW(T,l);case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return t0(!1);case 34:case 39:return function(t){s++;for(var r="";;){s>=n&&S(a,"Unterminated string constant");var o=i.charCodeAt(s);if(o===t)return++s,tW(A,r);if(92===o){o=i.charCodeAt(++s);var h=/^[0-7]+/.exec(i.slice(s,s+3));for(h&&(h=h[0]);h&&parseInt(h,8)>255;)h=h.slice(0,-1);if("0"===h&&(h=null),++s,h)b&&S(s-2,"Octal literal in strict mode"),r+=String.fromCharCode(parseInt(h,8)),s+=h.length-1;else switch(o){case 110:r+="\n";break;case 114:r+="\r";break;case 120:r+=String.fromCharCode(t1(2));break;case 117:r+=String.fromCharCode(t1(4));break;case 85:r+=String.fromCharCode(t1(8));break;case 116:r+=" ";break;case 98:r+="\b";break;case 118:r+="\v";break;case 102:r+="\f";break;case 48:r+="\x00";break;case 13:10===i.charCodeAt(s)&&++s;case 10:e.locations&&(f=s,++p);break;default:r+=String.fromCharCode(o)}}else(13===o||10===o||8232===o||8233===o)&&S(a,"Unterminated string constant"),r+=String.fromCharCode(o),++s}}(t);case 47:return c=i.charCodeAt(s+1),d?(++s,tX()):61===c?tQ(t_,2):tQ(tg,1);case 37:case 42:return 61===i.charCodeAt(s+1)?tQ(t_,2):tQ(tA,1);case 124:case 38:return(g=i.charCodeAt(s+1))===t?tQ(124===t?tb:tx,2):61===g?tQ(t_,2):tQ(124===t?tw:tC,1);case 94:return 61===i.charCodeAt(s+1)?tQ(t_,2):tQ(tk,1);case 43:case 45:return(r=i.charCodeAt(s+1))===t?45==r&&62==i.charCodeAt(s+2)&&tj.test(i.slice(m,s))?(s+=3,tK(),t$(),tY()):tQ(tv,2):61===r?tQ(t_,2):tQ(tE,1);case 60:case 62:return o=i.charCodeAt(s+1),h=1,o===t?(h=62===t&&62===i.charCodeAt(s+2)?3:2,61===i.charCodeAt(s+h))?tQ(t_,h+1):tQ(tT,h):33==o&&60==t&&45==i.charCodeAt(s+2)&&45==i.charCodeAt(s+3)?(s+=4,tK(),t$(),tY()):(61===o&&(h=61===i.charCodeAt(s+2)?3:2),tQ(tI,h));case 61:case 33:return 61===i.charCodeAt(s+1)?tQ(tS,61===i.charCodeAt(s+2)?3:2):tQ(61===t?tm:ty,1);case 126:return tQ(ty,1)}return!1}(r);if(!1===o){var l=String.fromCharCode(r);if("\\"===l||tF.test(l))return t5();S(s,"Unexpected character '"+l+"'")}return o}function tQ(t,e){var n=i.slice(s,s+e);s+=e,tW(t,n)}function tX(){for(var t,e,r="",a=s;;){s>=n&&S(a,"Unterminated regular expression");var o=i.charAt(s);if(tj.test(o)&&S(a,"Unterminated regular expression"),t)t=!1;else{if("["===o)e=!0;else if("]"===o&&e)e=!1;else if("/"===o&&!e)break;t="\\"===o}++s}var r=i.slice(a,s);++s;var h=t2();h&&!/^[gmsiy]*$/.test(h)&&S(a,"Invalid regexp flag");try{var l=new RegExp(r,h)}catch(t){t instanceof SyntaxError&&S(a,t.message),S(t)}return tW(E,l)}function tJ(t,e){for(var n=s,r=0,a=0,o=null==e?1/0:e;a=97?l-97+10:l>=65?l-65+10:l>=48&&l<=57?l-48:1/0)>=t)break;++s,r=r*t+h}return s===n||null!=e&&s-n!==e?null:r}function t0(t){var e=s,n=!1,r=48===i.charCodeAt(s);t||null!==tJ(10)||S(e,"Invalid number"),46===i.charCodeAt(s)&&(++s,tJ(10),n=!0);var a=i.charCodeAt(s);(69===a||101===a)&&((43===(a=i.charCodeAt(++s))||45===a)&&++s,null===tJ(10)&&S(e,"Invalid number"),n=!0),tq(i.charCodeAt(s))&&S(s,"Identifier directly after number");var o,h=i.slice(e,s);return n?o=parseFloat(h):r&&1!==h.length?/[89]/.test(h)||b?S(e,"Invalid number"):o=parseInt(h,8):o=parseInt(h,10),tW(T,o)}function t1(t){var e=tJ(16,t);return null===e&&S(a,"Bad character escape sequence"),e}function t2(){x=!1;for(var t,e=!0,n=s;;){var r=i.charCodeAt(s);if(tZ(r))x&&(t+=i.charAt(s)),++s;else if(92===r){x||(t=i.slice(n,s)),x=!0,117!=i.charCodeAt(++s)&&S(s,"Expecting Unicode escape sequence \\uXXXX"),++s;var a=t1(4),o=String.fromCharCode(a);o||S(s-1,"Invalid Unicode escape"),(e?tq(a):tZ(a))||S(s-4,"Invalid Unicode escape"),t+=o}else break;e=!1}return x?t:i.slice(n,s)}function t5(){var t=t2(),e=P;return!x&&tR(t)&&(e=tn[t]),tW(e,t)}function t3(){g=a,m=o,_=l,tY()}function t6(t){if(b=t,s=a,e.locations)for(;s=5&&"ExpressionStatement"===t.type&&"Literal"===t.expression.type&&"use strict"===t.expression.value}function ei(t){if(u===t)return t3(),!0}function en(){return!e.strictSemicolons&&(u===M||u===to||tj.test(i.slice(m,a)))}function er(){ei(tc)||en()||ea()}function es(t){u===t?t3():ea()}function ea(){S(a,"Unexpected token")}function eo(t){"Identifier"!==t.type&&"MemberExpression"!==t.type&&S(t.start,"Assigning to rvalue"),b&&"Identifier"===t.type&&tz(t.name)&&S(t.start,"Assigning to "+t.name+" in strict mode")}var eh={kind:"loop"},el={kind:"switch"};function eu(){(u===tg||u===t_&&"/="==c)&&tY(!0);var t,n,r=u,s=t8();switch(r){case O:case z:t3();var o=r===O;ei(tc)||en()?s.label=null:u!==P?ea():(s.label=eC(),er());for(var h=0;hi){var s=t7(e);s.left=e,s.operator=c;var a=u;return t3(),s.right=t(ev(),r,n),t(et(s,a===tb||a===tx?"LogicalExpression":"BinaryExpression"),i,n)}return e}(ev(),-1,t);if(ei(tf)){var i=t7(e);return i.test=e,i.consequent=em(!0),es(td),i.alternate=em(!0,t),et(i,"ConditionalExpression")}return e}(t);if(u.isAssign){var i=t7(e);return i.operator=c,i.left=e,t3(),i.right=e_(t),eo(e),et(i,"AssignmentExpression")}return e}function ev(){if(u.prefix){var t=t8(),e=u.isUpdate;return t.operator=c,t.prefix=!0,d=!0,t3(),t.argument=ev(),e?eo(t.argument):b&&"delete"===t.operator&&"Identifier"===t.argument.type&&S(t.start,"Deleting local variable in strict mode"),et(t,e?"UpdateExpression":"UnaryExpression")}for(var i=ey(eb());u.postfix&&!en();){var t=t7(i);t.operator=c,t.prefix=!1,t.argument=i,eo(i),t3(),i=et(t,"UpdateExpression")}return i}function ey(t,e){if(ei(tp)){var i=t7(t);return i.object=t,i.property=eC(!0),i.computed=!1,ey(et(i,"MemberExpression"),e)}if(ei(tr)){var i=t7(t);return i.object=t,i.property=em(),i.computed=!0,es(ts),ey(et(i,"MemberExpression"),e)}if(!(!e&&ei(th)))return t;var i=t7(t);return i.callee=t,i.arguments=ek(tl,!1),ey(et(i,"CallExpression"),e)}function eb(){switch(u){case X:var t,n=t8();return t3(),et(n,"ThisExpression");case P:return eC();case T:case A:case E:var n=t8();return n.value=c,n.raw=i.slice(a,o),t3(),et(n,"Literal");case J:case tt:case te:var n=t8();return n.value=u.atomValue,n.raw=u.keyword,t3(),et(n,"Literal");case th:var r=h,s=a;t3();var d=em();return d.start=s,d.end=o,e.locations&&(d.loc.start=r,d.loc.end=l),e.ranges&&(d.range=[s,o]),es(tl),d;case tr:var n=t8();return t3(),n.elements=ek(ts,!0,!0),et(n,"ArrayExpression");case ta:return function(){var t=t8(),i=!0,n=!1;for(t.properties=[],t3();!ei(to);){if(i)i=!1;else if(es(tu),e.allowTrailingCommas&&ei(to))break;var r,s={key:ex()},a=!1;if(ei(td)?(s.value=em(!0),r=s.kind="init"):e.ecmaVersion>=5&&"Identifier"===s.key.type&&("get"===s.key.name||"set"===s.key.name)?(a=n=!0,r=s.kind=s.key.name,s.key=ex(),u!==th&&ea(),s.value=ew(t8(),!1)):ea(),"Identifier"===s.key.type&&(b||n))for(var o=0;o=0)for(var o=0;o=t)break;t+=n[1]}return t}function o(e){return t.substring(a(e.range[0]),a(e.range[1]))}function h(e,i){for(var n=a(e.range[0]),r=a(e.range[1]),o=0,h=s.length-1;h>=0;h--)if(n>s[h][0]){o=h+1;break}s.splice(o,0,[n,i.length-r+n]),t=t.substring(0,n)+i+t.substring(r)}var u,p=(i=i||{}).url||"",f=i.sourceMaps,g=i.paperFeatures||{},m=i.source||t,_=i.offset||0,v=th.agent,y=v.versionNumber,b=!1,x=/\r\n|\n|\r/mg;if(f&&(v.chrome&&y>=30||v.webkit&&y>=537.76||v.firefox&&y>=23||v.node)){if(v.node)_-=2;else if(n&&p&&!n.location.href.indexOf(p)){var w=r.getElementsByTagName("html")[0].innerHTML;_=w.substr(0,w.indexOf(t)+1).match(x).length+1}var k=["AA"+function(t){var e="";for(t=(Math.abs(t)<<1)+(t<0?1:0);t||!e;){var i=31&t;(t>>=5)&&(i|=32),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[i]}return e}((b=_>0&&!(v.chrome&&y>=36||v.safari&&y>=600||v.firefox&&y>=40||v.node))?0:_)+"A"];k.length=(t.match(x)||[]).length+1+(b?_:0),u={version:3,file:p,names:[],mappings:k.join(";AACA"),sourceRoot:"",sources:[p],sourcesContent:[m]}}return(!1!==g.operatorOverloading||!1!==g.moduleExports)&&function e(i,n,r){if(i){for(var s in i)if("range"!==s&&"loc"!==s){var l=i[s];if(Array.isArray(l))for(var u=0,p=l.length;u]/.test(i.operator)||"MemberExpression"===g&&i.computed)){if("UpdateExpression"===e.type){var n=o(e.argument),m="__$__("+n+', "'+e.operator[0]+'", 1)',_=n+" = "+m;e.prefix?_="("+_+")":("AssignmentExpression"===g||"VariableDeclarator"===g||"BinaryExpression"===g)&&(o(i.left||i.id)===n&&(_=m),_=n+"; "+_),h(e,_)}else if(/^.=$/.test(e.operator)&&"Literal"!==e.left.type){var l=o(e.left),u=o(e.right),m=l+" = __$__("+l+', "'+e.operator[0]+'", '+u+")";h(e,/^\(.*\)$/.test(o(e))?"("+m+")":m)}}}}(i,n),!1!==r.moduleExports&&function(t){switch(t.type){case"ExportDefaultDeclaration":h({range:[t.start,t.declaration.start]},"module.exports = ");break;case"ExportNamedDeclaration":var e=t.declaration,i=t.specifiers;if(e){var n=e.declarations;n&&(n.forEach(function(t){h(t,"module.exports."+o(t))}),h({range:[t.start,e.start+e.kind.length]},""))}else if(i){var r=i.map(function(t){var e=o(t);return"module.exports."+e+" = "+e+"; "}).join("");r&&h(t,r)}}}(i)}}(l(t,{ranges:!0,preserveParens:!0,sourceType:"module"}),null,g),u&&(b&&(t=Array(_+1).join("\n")+t),/^(inline|both)$/.test(f)&&(t+="\n//# sourceMappingURL=data:application/json;base64,"+e.btoa(unescape(encodeURIComponent(JSON.stringify(u))))),t+="\n//# sourceURL="+(p||"paperscript")),{url:p,source:m,code:t,map:u}}function y(t,e,i){th=e;var n,a=e.getView(),o=/\btool\.\w+|\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\b/.test(t)&&!/\bnew\s+Tool\b/.test(t)?new te:null,h=o?o._events:[],l=["onFrame","onResize"].concat(h),u=[],c=[];function d(e,i){for(var n in e)(i||!/^_/.test(n))&&RegExp("([\\b\\s\\W]|^)"+n.replace(/\$/g,"\\$")+"\\b").test(t)&&(u.push(n),c.push(e[n]))}t=("object"==typeof t?t:v(t,i)).code,d({__$__:g,$__:_,paper:e,tool:o},!0),d(e),t="var module = { exports: {} }; "+t;var p=s.each(l,function(e){RegExp("\\s+"+e+"\\b").test(t)&&(u.push(e),this.push("module.exports."+e+" = "+e+";"))},[]).join("\n");p&&(t+="\n"+p),t+="\nreturn module.exports;";var m=th.agent;if(r&&(m.chrome||m.firefox&&m.versionNumber<40)){var y=r.createElement("script"),b=r.head||r.getElementsByTagName("head")[0];m.firefox&&(t="\n"+t),y.appendChild(r.createTextNode("document.__paperscript__ = function("+u+") {"+t+"\n}")),b.appendChild(y),n=r.__paperscript__,delete r.__paperscript__,b.removeChild(y)}else n=Function(u,t);var p=n&&n.apply(e,c),x=p||{};return s.each(h,function(t){var e=x[t];e&&(o[t]=e)}),a&&(x.onResize&&a.setOnResize(x.onResize),a.emit("resize",{size:a.size,delta:new f}),x.onFrame&&a.setOnFrame(x.onFrame),a.requestUpdate()),p}function b(t){if(/^text\/(?:x-|)paperscript$/.test(t.type)&&"true"!==o.getAttribute(t,"ignore")){var e=o.getAttribute(t,"canvas"),i=r.getElementById(e),n=t.src||t.getAttribute("data-src"),s=o.hasAttribute(t,"async"),a="data-paper-scope";if(!i)throw Error('Unable to find canvas with id "'+e+'"');var h=o.get(i.getAttribute(a))||new o().setup(i);return i.setAttribute(a,h._id),n?tn.request({url:n,async:s,mimeType:"text/plain",onLoad:function(t){y(t,h,n)}}):y(t.innerHTML,h,t.baseURI),t.setAttribute("data-paper-ignore","true"),h}}function x(){s.each(r&&r.getElementsByTagName("script"),b)}return f.inject(p),m.inject(p),U.inject(p),n&&("complete"===r.readyState?setTimeout(x):W.add(n,{load:x})),{compile:v,execute:y,load:function(t){return t?b(t):x()},parse:l,calculateBinary:g,calculateUnary:_}}).call(this);var th=new(o.inject(s.exports,{Base:s,Numerical:d,Key:X,DomEvent:W,DomElement:G,document:r,window:n,Symbol:A,PlacedSymbol:E}));return th.agent.node&&u("gFNhN")(th),"function"==typeof define&&define.amd?define("paper",th):t&&(t.exports=th),th}).call(this,"object"==typeof self?self:null)}),c("gFNhN",function(t,e){}),c("7bbl5",function(t,e){s(t.exports,"isIdentifierStart",function(){return p}),s(t.exports,"isIdentifierChar",function(){return f}),s(t.exports,"TokenType",function(){return g}),s(t.exports,"keywordTypes",function(){return y}),s(t.exports,"tokTypes",function(){return x}),s(t.exports,"lineBreak",function(){return w}),s(t.exports,"lineBreakG",function(){return k}),s(t.exports,"isNewLine",function(){return C}),s(t.exports,"nonASCIIwhitespace",function(){return I}),s(t.exports,"Position",function(){return R}),s(t.exports,"SourceLocation",function(){return B}),s(t.exports,"getLineInfo",function(){return D}),s(t.exports,"defaultOptions",function(){return F}),s(t.exports,"Parser",function(){return U}),s(t.exports,"TokContext",function(){return te}),s(t.exports,"tokContexts",function(){return ti}),s(t.exports,"Node",function(){return tl}),s(t.exports,"Token",function(){return tR}),s(t.exports,"version",function(){return tV}),s(t.exports,"parse",function(){return tj}),s(t.exports,"parseExpressionAt",function(){return tU}),s(t.exports,"tokenizer",function(){return tq});var i=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239],n=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191],r="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",a={3:"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",5:"class enum extends super const export import",6:"enum",strict:"implements interface let package private protected public static yield",strictBind:"eval arguments"},o="break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this",h={5:o,"5module":o+" export import",6:o+" const class extends export import super"},l=/^in(stanceof)?$/,u=RegExp("["+r+"]"),c=RegExp("["+r+"‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࢘-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ-ᫎᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_]");function d(t,e){for(var i=65536,n=0;nt);n+=2)if((i+=e[n+1])>=t)return!0;return!1}function p(t,e){return t<65?36===t:t<91||(t<97?95===t:t<123||(t<=65535?t>=170&&u.test(String.fromCharCode(t)):!1!==e&&d(t,n)))}function f(t,e){return t<48?36===t:t<58||!(t<65)&&(t<91||(t<97?95===t:t<123||(t<=65535?t>=170&&c.test(String.fromCharCode(t)):!1!==e&&(d(t,n)||d(t,i)))))}var g=function(t,e){void 0===e&&(e={}),this.label=t,this.keyword=e.keyword,this.beforeExpr=!!e.beforeExpr,this.startsExpr=!!e.startsExpr,this.isLoop=!!e.isLoop,this.isAssign=!!e.isAssign,this.prefix=!!e.prefix,this.postfix=!!e.postfix,this.binop=e.binop||null,this.updateContext=null};function m(t,e){return new g(t,{beforeExpr:!0,binop:e})}var _={beforeExpr:!0},v={startsExpr:!0},y={};function b(t,e){return void 0===e&&(e={}),e.keyword=t,y[t]=new g(t,e)}var x={num:new g("num",v),regexp:new g("regexp",v),string:new g("string",v),name:new g("name",v),privateId:new g("privateId",v),eof:new g("eof"),bracketL:new g("[",{beforeExpr:!0,startsExpr:!0}),bracketR:new g("]"),braceL:new g("{",{beforeExpr:!0,startsExpr:!0}),braceR:new g("}"),parenL:new g("(",{beforeExpr:!0,startsExpr:!0}),parenR:new g(")"),comma:new g(",",_),semi:new g(";",_),colon:new g(":",_),dot:new g("."),question:new g("?",_),questionDot:new g("?."),arrow:new g("=>",_),template:new g("template"),invalidTemplate:new g("invalidTemplate"),ellipsis:new g("...",_),backQuote:new g("`",v),dollarBraceL:new g("${",{beforeExpr:!0,startsExpr:!0}),eq:new g("=",{beforeExpr:!0,isAssign:!0}),assign:new g("_=",{beforeExpr:!0,isAssign:!0}),incDec:new g("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new g("!/~",{beforeExpr:!0,prefix:!0,startsExpr:!0}),logicalOR:m("||",1),logicalAND:m("&&",2),bitwiseOR:m("|",3),bitwiseXOR:m("^",4),bitwiseAND:m("&",5),equality:m("==/!=/===/!==",6),relational:m("/<=/>=",7),bitShift:m("<>/>>>",8),plusMin:new g("+/-",{beforeExpr:!0,binop:9,prefix:!0,startsExpr:!0}),modulo:m("%",10),star:m("*",10),slash:m("/",10),starstar:new g("**",{beforeExpr:!0}),coalesce:m("??",1),_break:b("break"),_case:b("case",_),_catch:b("catch"),_continue:b("continue"),_debugger:b("debugger"),_default:b("default",_),_do:b("do",{isLoop:!0,beforeExpr:!0}),_else:b("else",_),_finally:b("finally"),_for:b("for",{isLoop:!0}),_function:b("function",v),_if:b("if"),_return:b("return",_),_switch:b("switch"),_throw:b("throw",_),_try:b("try"),_var:b("var"),_const:b("const"),_while:b("while",{isLoop:!0}),_with:b("with"),_new:b("new",{beforeExpr:!0,startsExpr:!0}),_this:b("this",v),_super:b("super",v),_class:b("class",v),_extends:b("extends",_),_export:b("export"),_import:b("import",v),_null:b("null",v),_true:b("true",v),_false:b("false",v),_in:b("in",{beforeExpr:!0,binop:7}),_instanceof:b("instanceof",{beforeExpr:!0,binop:7}),_typeof:b("typeof",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_void:b("void",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_delete:b("delete",{beforeExpr:!0,prefix:!0,startsExpr:!0})},w=/\r\n?|\n|\u2028|\u2029/,k=RegExp(w.source,"g");function C(t){return 10===t||13===t||8232===t||8233===t}function S(t,e,i){void 0===i&&(i=t.length);for(var n=e;n>10)+55296,(1023&t)+56320)}var z=/(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/,R=function(t,e){this.line=t,this.column=e};R.prototype.offset=function(t){return new R(this.line,this.column+t)};var B=function(t,e,i){this.start=e,this.end=i,null!==t.sourceFile&&(this.source=t.sourceFile)};function D(t,e){for(var i=1,n=0;;){var r=S(t,n,e);if(r<0)return new R(i,e-n);++i,n=r}}var F={ecmaVersion:null,sourceType:"script",onInsertedSemicolon:null,onTrailingComma:null,allowReserved:null,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowAwaitOutsideFunction:null,allowSuperOutsideMethod:null,allowHashBang:!1,checkPrivateFields:!0,locations:!1,onToken:null,onComment:null,ranges:!1,program:null,sourceFile:null,directSourceFile:null,preserveParens:!1},V=!1;function j(t,e){return 2|(t?4:0)|(e?8:0)}var U=function(t,e,i){this.options=t=function(t){var e,i={};for(var n in F)i[n]=t&&M(t,n)?t[n]:F[n];if("latest"===i.ecmaVersion?i.ecmaVersion=1e8:null==i.ecmaVersion?(!V&&"object"==typeof console&&console.warn&&(V=!0,console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future.")),i.ecmaVersion=11):i.ecmaVersion>=2015&&(i.ecmaVersion-=2009),null==i.allowReserved&&(i.allowReserved=i.ecmaVersion<5),t&&null!=t.allowHashBang||(i.allowHashBang=i.ecmaVersion>=14),O(i.onToken)){var r=i.onToken;i.onToken=function(t){return r.push(t)}}return O(i.onComment)&&(i.onComment=(e=i.onComment,function(t,n,r,s,a,o){var h={type:t?"Block":"Line",value:n,start:r,end:s};i.locations&&(h.loc=new B(this,a,o)),i.ranges&&(h.range=[r,s]),e.push(h)})),i}(t),this.sourceFile=t.sourceFile,this.keywords=L(h[t.ecmaVersion>=6?6:"module"===t.sourceType?"5module":5]);var n="";!0!==t.allowReserved&&(n=a[t.ecmaVersion>=6?6:5===t.ecmaVersion?5:3],"module"===t.sourceType&&(n+=" await")),this.reservedWords=L(n);var r=(n?n+" ":"")+a.strict;this.reservedWordsStrict=L(r),this.reservedWordsStrictBind=L(r+" "+a.strictBind),this.input=String(e),this.containsEsc=!1,i?(this.pos=i,this.lineStart=this.input.lastIndexOf("\n",i-1)+1,this.curLine=this.input.slice(0,this.lineStart).split(w).length):(this.pos=this.lineStart=0,this.curLine=1),this.type=x.eof,this.value=null,this.start=this.end=this.pos,this.startLoc=this.endLoc=this.curPosition(),this.lastTokEndLoc=this.lastTokStartLoc=null,this.lastTokStart=this.lastTokEnd=this.pos,this.context=this.initialContext(),this.exprAllowed=!0,this.inModule="module"===t.sourceType,this.strict=this.inModule||this.strictDirective(this.pos),this.potentialArrowAt=-1,this.potentialArrowInForAwait=!1,this.yieldPos=this.awaitPos=this.awaitIdentPos=0,this.labels=[],this.undefinedExports=Object.create(null),0===this.pos&&t.allowHashBang&&"#!"===this.input.slice(0,2)&&this.skipLineComment(2),this.scopeStack=[],this.enterScope(1),this.regexpState=null,this.privateNameStack=[]},q={inFunction:{configurable:!0},inGenerator:{configurable:!0},inAsync:{configurable:!0},canAwait:{configurable:!0},allowSuper:{configurable:!0},allowDirectSuper:{configurable:!0},treatFunctionsAsVar:{configurable:!0},allowNewDotTarget:{configurable:!0},inClassStaticBlock:{configurable:!0}};U.prototype.parse=function(){var t=this.options.program||this.startNode();return this.nextToken(),this.parseTopLevel(t)},q.inFunction.get=function(){return(2&this.currentVarScope().flags)>0},q.inGenerator.get=function(){return(8&this.currentVarScope().flags)>0&&!this.currentVarScope().inClassFieldInit},q.inAsync.get=function(){return(4&this.currentVarScope().flags)>0&&!this.currentVarScope().inClassFieldInit},q.canAwait.get=function(){for(var t=this.scopeStack.length-1;t>=0;t--){var e=this.scopeStack[t];if(e.inClassFieldInit||256&e.flags)return!1;if(2&e.flags)return(4&e.flags)>0}return this.inModule&&this.options.ecmaVersion>=13||this.options.allowAwaitOutsideFunction},q.allowSuper.get=function(){var t=this.currentThisScope(),e=t.flags,i=t.inClassFieldInit;return(64&e)>0||i||this.options.allowSuperOutsideMethod},q.allowDirectSuper.get=function(){return(128&this.currentThisScope().flags)>0},q.treatFunctionsAsVar.get=function(){return this.treatFunctionsAsVarInScope(this.currentScope())},q.allowNewDotTarget.get=function(){var t=this.currentThisScope(),e=t.flags,i=t.inClassFieldInit;return(258&e)>0||i},q.inClassStaticBlock.get=function(){return(256&this.currentVarScope().flags)>0},U.extend=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=this,n=0;n=,?^&]/.test(r)||"!"===r&&"="===this.input.charAt(n+1))}t+=e[0].length,T.lastIndex=t,t+=T.exec(this.input)[0].length,";"===this.input[t]&&t++}},Z.eat=function(t){return this.type===t&&(this.next(),!0)},Z.isContextual=function(t){return this.type===x.name&&this.value===t&&!this.containsEsc},Z.eatContextual=function(t){return!!this.isContextual(t)&&(this.next(),!0)},Z.expectContextual=function(t){this.eatContextual(t)||this.unexpected()},Z.canInsertSemicolon=function(){return this.type===x.eof||this.type===x.braceR||w.test(this.input.slice(this.lastTokEnd,this.start))},Z.insertSemicolon=function(){if(this.canInsertSemicolon())return this.options.onInsertedSemicolon&&this.options.onInsertedSemicolon(this.lastTokEnd,this.lastTokEndLoc),!0},Z.semicolon=function(){this.eat(x.semi)||this.insertSemicolon()||this.unexpected()},Z.afterTrailingComma=function(t,e){if(this.type===t)return this.options.onTrailingComma&&this.options.onTrailingComma(this.lastTokStart,this.lastTokStartLoc),e||this.next(),!0},Z.expect=function(t){this.eat(t)||this.unexpected()},Z.unexpected=function(t){this.raise(null!=t?t:this.start,"Unexpected token")};var G=function(){this.shorthandAssign=this.trailingComma=this.parenthesizedAssign=this.parenthesizedBind=this.doubleProto=-1};Z.checkPatternErrors=function(t,e){if(t){t.trailingComma>-1&&this.raiseRecoverable(t.trailingComma,"Comma is not permitted after the rest element");var i=e?t.parenthesizedAssign:t.parenthesizedBind;i>-1&&this.raiseRecoverable(i,e?"Assigning to rvalue":"Parenthesized pattern")}},Z.checkExpressionErrors=function(t,e){if(!t)return!1;var i=t.shorthandAssign,n=t.doubleProto;if(!e)return i>=0||n>=0;i>=0&&this.raise(i,"Shorthand property assignments are valid only in destructuring patterns"),n>=0&&this.raiseRecoverable(n,"Redefinition of __proto__ property")},Z.checkYieldAwaitInDefaultParams=function(){this.yieldPos&&(!this.awaitPos||this.yieldPos55295&&n<56320)return!0;if(p(n,!0)){for(var r=i+1;f(n=this.input.charCodeAt(r),!0);)++r;if(92===n||n>55295&&n<56320)return!0;var s=this.input.slice(i,r);if(!l.test(s))return!0}return!1},W.isAsyncFunction=function(){if(this.options.ecmaVersion<8||!this.isContextual("async"))return!1;T.lastIndex=this.pos;var t,e=T.exec(this.input),i=this.pos+e[0].length;return!w.test(this.input.slice(this.pos,i))&&"function"===this.input.slice(i,i+8)&&(i+8===this.input.length||!(f(t=this.input.charCodeAt(i+8))||t>55295&&t<56320))},W.parseStatement=function(t,e,i){var n,r=this.type,s=this.startNode();switch(this.isLet(t)&&(r=x._var,n="let"),r){case x._break:case x._continue:return this.parseBreakContinueStatement(s,r.keyword);case x._debugger:return this.parseDebuggerStatement(s);case x._do:return this.parseDoStatement(s);case x._for:return this.parseForStatement(s);case x._function:return t&&(this.strict||"if"!==t&&"label"!==t)&&this.options.ecmaVersion>=6&&this.unexpected(),this.parseFunctionStatement(s,!1,!t);case x._class:return t&&this.unexpected(),this.parseClass(s,!0);case x._if:return this.parseIfStatement(s);case x._return:return this.parseReturnStatement(s);case x._switch:return this.parseSwitchStatement(s);case x._throw:return this.parseThrowStatement(s);case x._try:return this.parseTryStatement(s);case x._const:case x._var:return n=n||this.value,t&&"var"!==n&&this.unexpected(),this.parseVarStatement(s,n);case x._while:return this.parseWhileStatement(s);case x._with:return this.parseWithStatement(s);case x.braceL:return this.parseBlock(!0,s);case x.semi:return this.parseEmptyStatement(s);case x._export:case x._import:if(this.options.ecmaVersion>10&&r===x._import){T.lastIndex=this.pos;var a=T.exec(this.input),o=this.pos+a[0].length,h=this.input.charCodeAt(o);if(40===h||46===h)return this.parseExpressionStatement(s,this.parseExpression())}return this.options.allowImportExportEverywhere||(e||this.raise(this.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.start,"'import' and 'export' may appear only with 'sourceType: module'")),r===x._import?this.parseImport(s):this.parseExport(s,i);default:if(this.isAsyncFunction())return t&&this.unexpected(),this.next(),this.parseFunctionStatement(s,!0,!t);var l=this.value,u=this.parseExpression();if(r===x.name&&"Identifier"===u.type&&this.eat(x.colon))return this.parseLabeledStatement(s,l,u,t);return this.parseExpressionStatement(s,u)}},W.parseBreakContinueStatement=function(t,e){var i="break"===e;this.next(),this.eat(x.semi)||this.insertSemicolon()?t.label=null:this.type!==x.name?this.unexpected():(t.label=this.parseIdent(),this.semicolon());for(var n=0;n=6?this.eat(x.semi):this.semicolon(),this.finishNode(t,"DoWhileStatement")},W.parseForStatement=function(t){this.next();var e=this.options.ecmaVersion>=9&&this.canAwait&&this.eatContextual("await")?this.lastTokStart:-1;if(this.labels.push(K),this.enterScope(0),this.expect(x.parenL),this.type===x.semi)return e>-1&&this.unexpected(e),this.parseFor(t,null);var i=this.isLet();if(this.type===x._var||this.type===x._const||i){var n=this.startNode(),r=i?"let":this.value;return(this.next(),this.parseVar(n,!0,r),this.finishNode(n,"VariableDeclaration"),(this.type===x._in||this.options.ecmaVersion>=6&&this.isContextual("of"))&&1===n.declarations.length)?(this.options.ecmaVersion>=9&&(this.type===x._in?e>-1&&this.unexpected(e):t.await=e>-1),this.parseForIn(t,n)):(e>-1&&this.unexpected(e),this.parseFor(t,n))}var s=this.isContextual("let"),a=!1,o=new G,h=this.parseExpression(!(e>-1)||"await",o);return this.type===x._in||(a=this.options.ecmaVersion>=6&&this.isContextual("of"))?(this.options.ecmaVersion>=9&&(this.type===x._in?e>-1&&this.unexpected(e):t.await=e>-1),s&&a&&this.raise(h.start,"The left-hand side of a for-of loop may not start with 'let'."),this.toAssignable(h,!1,o),this.checkLValPattern(h),this.parseForIn(t,h)):(this.checkExpressionErrors(o,!0),e>-1&&this.unexpected(e),this.parseFor(t,h))},W.parseFunctionStatement=function(t,e,i){return this.next(),this.parseFunction(t,Q|(i?0:X),!1,e)},W.parseIfStatement=function(t){return this.next(),t.test=this.parseParenExpression(),t.consequent=this.parseStatement("if"),t.alternate=this.eat(x._else)?this.parseStatement("if"):null,this.finishNode(t,"IfStatement")},W.parseReturnStatement=function(t){return this.inFunction||this.options.allowReturnOutsideFunction||this.raise(this.start,"'return' outside of function"),this.next(),this.eat(x.semi)||this.insertSemicolon()?t.argument=null:(t.argument=this.parseExpression(),this.semicolon()),this.finishNode(t,"ReturnStatement")},W.parseSwitchStatement=function(t){this.next(),t.discriminant=this.parseParenExpression(),t.cases=[],this.expect(x.braceL),this.labels.push($),this.enterScope(0);for(var e,i=!1;this.type!==x.braceR;)if(this.type===x._case||this.type===x._default){var n=this.type===x._case;e&&this.finishNode(e,"SwitchCase"),t.cases.push(e=this.startNode()),e.consequent=[],this.next(),n?e.test=this.parseExpression():(i&&this.raiseRecoverable(this.lastTokStart,"Multiple default clauses"),i=!0,e.test=null),this.expect(x.colon)}else e||this.unexpected(),e.consequent.push(this.parseStatement(null));return this.exitScope(),e&&this.finishNode(e,"SwitchCase"),this.next(),this.labels.pop(),this.finishNode(t,"SwitchStatement")},W.parseThrowStatement=function(t){return this.next(),w.test(this.input.slice(this.lastTokEnd,this.start))&&this.raise(this.lastTokEnd,"Illegal newline after throw"),t.argument=this.parseExpression(),this.semicolon(),this.finishNode(t,"ThrowStatement")};var Y=[];W.parseCatchClauseParam=function(){var t=this.parseBindingAtom(),e="Identifier"===t.type;return this.enterScope(e?32:0),this.checkLValPattern(t,e?4:2),this.expect(x.parenR),t},W.parseTryStatement=function(t){if(this.next(),t.block=this.parseBlock(),t.handler=null,this.type===x._catch){var e=this.startNode();this.next(),this.eat(x.parenL)?e.param=this.parseCatchClauseParam():(this.options.ecmaVersion<10&&this.unexpected(),e.param=null,this.enterScope(0)),e.body=this.parseBlock(!1),this.exitScope(),t.handler=this.finishNode(e,"CatchClause")}return t.finalizer=this.eat(x._finally)?this.parseBlock():null,t.handler||t.finalizer||this.raise(t.start,"Missing catch or finally clause"),this.finishNode(t,"TryStatement")},W.parseVarStatement=function(t,e,i){return this.next(),this.parseVar(t,!1,e,i),this.semicolon(),this.finishNode(t,"VariableDeclaration")},W.parseWhileStatement=function(t){return this.next(),t.test=this.parseParenExpression(),this.labels.push(K),t.body=this.parseStatement("while"),this.labels.pop(),this.finishNode(t,"WhileStatement")},W.parseWithStatement=function(t){return this.strict&&this.raise(this.start,"'with' in strict mode"),this.next(),t.object=this.parseParenExpression(),t.body=this.parseStatement("with"),this.finishNode(t,"WithStatement")},W.parseEmptyStatement=function(t){return this.next(),this.finishNode(t,"EmptyStatement")},W.parseLabeledStatement=function(t,e,i,n){for(var r=0,s=this.labels;r=0;o--){var h=this.labels[o];if(h.statementStart===t.start)h.statementStart=this.start,h.kind=a;else break}return this.labels.push({name:e,kind:a,statementStart:this.start}),t.body=this.parseStatement(n?-1===n.indexOf("label")?n+"label":n:"label"),this.labels.pop(),t.label=i,this.finishNode(t,"LabeledStatement")},W.parseExpressionStatement=function(t,e){return t.expression=e,this.semicolon(),this.finishNode(t,"ExpressionStatement")},W.parseBlock=function(t,e,i){for(void 0===t&&(t=!0),void 0===e&&(e=this.startNode()),e.body=[],this.expect(x.braceL),t&&this.enterScope(0);this.type!==x.braceR;){var n=this.parseStatement(null);e.body.push(n)}return i&&(this.strict=!1),this.next(),t&&this.exitScope(),this.finishNode(e,"BlockStatement")},W.parseFor=function(t,e){return t.init=e,this.expect(x.semi),t.test=this.type===x.semi?null:this.parseExpression(),this.expect(x.semi),t.update=this.type===x.parenR?null:this.parseExpression(),this.expect(x.parenR),t.body=this.parseStatement("for"),this.exitScope(),this.labels.pop(),this.finishNode(t,"ForStatement")},W.parseForIn=function(t,e){var i=this.type===x._in;return this.next(),"VariableDeclaration"===e.type&&null!=e.declarations[0].init&&(!i||this.options.ecmaVersion<8||this.strict||"var"!==e.kind||"Identifier"!==e.declarations[0].id.type)&&this.raise(e.start,(i?"for-in":"for-of")+" loop variable declaration may not have an initializer"),t.left=e,t.right=i?this.parseExpression():this.parseMaybeAssign(),this.expect(x.parenR),t.body=this.parseStatement("for"),this.exitScope(),this.labels.pop(),this.finishNode(t,i?"ForInStatement":"ForOfStatement")},W.parseVar=function(t,e,i,n){for(t.declarations=[],t.kind=i;;){var r=this.startNode();if(this.parseVarId(r,i),this.eat(x.eq)?r.init=this.parseMaybeAssign(e):n||"const"!==i||this.type===x._in||this.options.ecmaVersion>=6&&this.isContextual("of")?n||"Identifier"===r.id.type||e&&(this.type===x._in||this.isContextual("of"))?r.init=null:this.raise(this.lastTokEnd,"Complex binding patterns require an initialization value"):this.unexpected(),t.declarations.push(this.finishNode(r,"VariableDeclarator")),!this.eat(x.comma))break}return t},W.parseVarId=function(t,e){t.id=this.parseBindingAtom(),this.checkLValPattern(t.id,"var"===e?1:2,!1)};var Q=1,X=2;function J(t,e){var i=t.computed,n=t.key;return!i&&("Identifier"===n.type&&n.name===e||"Literal"===n.type&&n.value===e)}W.parseFunction=function(t,e,i,n,r){this.initFunction(t),(this.options.ecmaVersion>=9||this.options.ecmaVersion>=6&&!n)&&(this.type===x.star&&e&X&&this.unexpected(),t.generator=this.eat(x.star)),this.options.ecmaVersion>=8&&(t.async=!!n),e&Q&&(t.id=4&e&&this.type!==x.name?null:this.parseIdent(),t.id&&!(e&X)&&this.checkLValSimple(t.id,this.strict||t.generator||t.async?this.treatFunctionsAsVar?1:2:3));var s=this.yieldPos,a=this.awaitPos,o=this.awaitIdentPos;return this.yieldPos=0,this.awaitPos=0,this.awaitIdentPos=0,this.enterScope(j(t.async,t.generator)),e&Q||(t.id=this.type===x.name?this.parseIdent():null),this.parseFunctionParams(t),this.parseFunctionBody(t,i,!1,r),this.yieldPos=s,this.awaitPos=a,this.awaitIdentPos=o,this.finishNode(t,e&Q?"FunctionDeclaration":"FunctionExpression")},W.parseFunctionParams=function(t){this.expect(x.parenL),t.params=this.parseBindingList(x.parenR,!1,this.options.ecmaVersion>=8),this.checkYieldAwaitInDefaultParams()},W.parseClass=function(t,e){this.next();var i=this.strict;this.strict=!0,this.parseClassId(t,e),this.parseClassSuper(t);var n=this.enterClassBody(),r=this.startNode(),s=!1;for(r.body=[],this.expect(x.braceL);this.type!==x.braceR;){var a=this.parseClassElement(null!==t.superClass);a&&(r.body.push(a),"MethodDefinition"===a.type&&"constructor"===a.kind?(s&&this.raiseRecoverable(a.start,"Duplicate constructor in the same class"),s=!0):a.key&&"PrivateIdentifier"===a.key.type&&function(t,e){var i=e.key.name,n=t[i],r="true";return("MethodDefinition"===e.type&&("get"===e.kind||"set"===e.kind)&&(r=(e.static?"s":"i")+e.kind),"iget"===n&&"iset"===r||"iset"===n&&"iget"===r||"sget"===n&&"sset"===r||"sset"===n&&"sget"===r)?(t[i]="true",!1):!!n||(t[i]=r,!1)}(n,a)&&this.raiseRecoverable(a.key.start,"Identifier '#"+a.key.name+"' has already been declared"))}return this.strict=i,this.next(),t.body=this.finishNode(r,"ClassBody"),this.exitClassBody(),this.finishNode(t,e?"ClassDeclaration":"ClassExpression")},W.parseClassElement=function(t){if(this.eat(x.semi))return null;var e=this.options.ecmaVersion,i=this.startNode(),n="",r=!1,s=!1,a="method",o=!1;if(this.eatContextual("static")){if(e>=13&&this.eat(x.braceL))return this.parseClassStaticBlock(i),i;this.isClassElementNameStart()||this.type===x.star?o=!0:n="static"}if(i.static=o,!n&&e>=8&&this.eatContextual("async")&&((this.isClassElementNameStart()||this.type===x.star)&&!this.canInsertSemicolon()?s=!0:n="async"),!n&&(e>=9||!s)&&this.eat(x.star)&&(r=!0),!n&&!s&&!r){var h=this.value;(this.eatContextual("get")||this.eatContextual("set"))&&(this.isClassElementNameStart()?a=h:n=h)}if(n?(i.computed=!1,i.key=this.startNodeAt(this.lastTokStart,this.lastTokStartLoc),i.key.name=n,this.finishNode(i.key,"Identifier")):this.parseClassElementName(i),e<13||this.type===x.parenL||"method"!==a||r||s){var l=!i.static&&J(i,"constructor");l&&"method"!==a&&this.raise(i.key.start,"Constructor can't have get/set modifier"),i.kind=l?"constructor":a,this.parseClassMethod(i,r,s,l&&t)}else this.parseClassField(i);return i},W.isClassElementNameStart=function(){return this.type===x.name||this.type===x.privateId||this.type===x.num||this.type===x.string||this.type===x.bracketL||this.type.keyword},W.parseClassElementName=function(t){this.type===x.privateId?("constructor"===this.value&&this.raise(this.start,"Classes can't have an element named '#constructor'"),t.computed=!1,t.key=this.parsePrivateIdent()):this.parsePropertyName(t)},W.parseClassMethod=function(t,e,i,n){var r=t.key;"constructor"===t.kind?(e&&this.raise(r.start,"Constructor can't be a generator"),i&&this.raise(r.start,"Constructor can't be an async method")):t.static&&J(t,"prototype")&&this.raise(r.start,"Classes may not have a static property named prototype");var s=t.value=this.parseMethod(e,i,n);return"get"===t.kind&&0!==s.params.length&&this.raiseRecoverable(s.start,"getter should have no params"),"set"===t.kind&&1!==s.params.length&&this.raiseRecoverable(s.start,"setter should have exactly one param"),"set"===t.kind&&"RestElement"===s.params[0].type&&this.raiseRecoverable(s.params[0].start,"Setter cannot use rest params"),this.finishNode(t,"MethodDefinition")},W.parseClassField=function(t){if(J(t,"constructor")?this.raise(t.key.start,"Classes can't have a field named 'constructor'"):t.static&&J(t,"prototype")&&this.raise(t.key.start,"Classes can't have a static field named 'prototype'"),this.eat(x.eq)){var e=this.currentThisScope(),i=e.inClassFieldInit;e.inClassFieldInit=!0,t.value=this.parseMaybeAssign(),e.inClassFieldInit=i}else t.value=null;return this.semicolon(),this.finishNode(t,"PropertyDefinition")},W.parseClassStaticBlock=function(t){t.body=[];var e=this.labels;for(this.labels=[],this.enterScope(320);this.type!==x.braceR;){var i=this.parseStatement(null);t.body.push(i)}return this.next(),this.exitScope(),this.labels=e,this.finishNode(t,"StaticBlock")},W.parseClassId=function(t,e){this.type===x.name?(t.id=this.parseIdent(),e&&this.checkLValSimple(t.id,2,!1)):(!0===e&&this.unexpected(),t.id=null)},W.parseClassSuper=function(t){t.superClass=this.eat(x._extends)?this.parseExprSubscripts(null,!1):null},W.enterClassBody=function(){var t={declared:Object.create(null),used:[]};return this.privateNameStack.push(t),t.declared},W.exitClassBody=function(){var t=this.privateNameStack.pop(),e=t.declared,i=t.used;if(this.options.checkPrivateFields)for(var n=this.privateNameStack.length,r=0===n?null:this.privateNameStack[n-1],s=0;s=11&&(this.eatContextual("as")?(t.exported=this.parseModuleExportName(),this.checkExport(e,t.exported,this.lastTokStart)):t.exported=null),this.expectContextual("from"),this.type!==x.string&&this.unexpected(),t.source=this.parseExprAtom(),this.semicolon(),this.finishNode(t,"ExportAllDeclaration")},W.parseExport=function(t,e){if(this.next(),this.eat(x.star))return this.parseExportAllDeclaration(t,e);if(this.eat(x._default))return this.checkExport(e,"default",this.lastTokStart),t.declaration=this.parseExportDefaultDeclaration(),this.finishNode(t,"ExportDefaultDeclaration");if(this.shouldParseExportStatement())t.declaration=this.parseExportDeclaration(t),"VariableDeclaration"===t.declaration.type?this.checkVariableExport(e,t.declaration.declarations):this.checkExport(e,t.declaration.id,t.declaration.id.start),t.specifiers=[],t.source=null;else{if(t.declaration=null,t.specifiers=this.parseExportSpecifiers(e),this.eatContextual("from"))this.type!==x.string&&this.unexpected(),t.source=this.parseExprAtom();else{for(var i=0,n=t.specifiers;i=13&&this.type===x.string){var t=this.parseLiteral(this.value);return z.test(t.value)&&this.raise(t.start,"An export name cannot include a lone surrogate."),t}return this.parseIdent(!0)},W.adaptDirectivePrologue=function(t){for(var e=0;e=5&&"ExpressionStatement"===t.type&&"Literal"===t.expression.type&&"string"==typeof t.expression.value&&('"'===this.input[t.start]||"'"===this.input[t.start])};var tt=U.prototype;tt.toAssignable=function(t,e,i){if(this.options.ecmaVersion>=6&&t)switch(t.type){case"Identifier":this.inAsync&&"await"===t.name&&this.raise(t.start,"Cannot use 'await' as identifier inside an async function");break;case"ObjectPattern":case"ArrayPattern":case"AssignmentPattern":case"RestElement":break;case"ObjectExpression":t.type="ObjectPattern",i&&this.checkPatternErrors(i,!0);for(var n=0,r=t.properties;n=8&&!o&&"async"===h.name&&!this.canInsertSemicolon()&&this.eat(x._function))return this.overrideContext(ti.f_expr),this.parseFunction(this.startNodeAt(s,a),0,!1,!0,e);if(r&&!this.canInsertSemicolon()){if(this.eat(x.arrow))return this.parseArrowExpression(this.startNodeAt(s,a),[h],!1,e);if(this.options.ecmaVersion>=8&&"async"===h.name&&this.type===x.name&&!o&&(!this.potentialArrowInForAwait||"of"!==this.value||this.containsEsc))return h=this.parseIdent(!1),(this.canInsertSemicolon()||!this.eat(x.arrow))&&this.unexpected(),this.parseArrowExpression(this.startNodeAt(s,a),[h],!0,e)}return h;case x.regexp:var l=this.value;return(n=this.parseLiteral(l.value)).regex={pattern:l.pattern,flags:l.flags},n;case x.num:case x.string:return this.parseLiteral(this.value);case x._null:case x._true:case x._false:return(n=this.startNode()).value=this.type===x._null?null:this.type===x._true,n.raw=this.type.keyword,this.next(),this.finishNode(n,"Literal");case x.parenL:var u=this.start,c=this.parseParenAndDistinguishExpression(r,e);return t&&(t.parenthesizedAssign<0&&!this.isSimpleAssignTarget(c)&&(t.parenthesizedAssign=u),t.parenthesizedBind<0&&(t.parenthesizedBind=u)),c;case x.bracketL:return n=this.startNode(),this.next(),n.elements=this.parseExprList(x.bracketR,!0,!0,t),this.finishNode(n,"ArrayExpression");case x.braceL:return this.overrideContext(ti.b_expr),this.parseObj(!1,t);case x._function:return n=this.startNode(),this.next(),this.parseFunction(n,0);case x._class:return this.parseClass(this.startNode(),!1);case x._new:return this.parseNew();case x.backQuote:return this.parseTemplate();case x._import:if(this.options.ecmaVersion>=11)return this.parseExprImport(i);return this.unexpected();default:return this.parseExprAtomDefault()}},tr.parseExprAtomDefault=function(){this.unexpected()},tr.parseExprImport=function(t){var e=this.startNode();this.containsEsc&&this.raiseRecoverable(this.start,"Escape sequence in keyword import");var i=this.parseIdent(!0);return this.type!==x.parenL||t?this.type===x.dot?(e.meta=i,this.parseImportMeta(e)):void this.unexpected():this.parseDynamicImport(e)},tr.parseDynamicImport=function(t){if(this.next(),t.source=this.parseMaybeAssign(),!this.eat(x.parenR)){var e=this.start;this.eat(x.comma)&&this.eat(x.parenR)?this.raiseRecoverable(e,"Trailing comma is not allowed in import()"):this.unexpected(e)}return this.finishNode(t,"ImportExpression")},tr.parseImportMeta=function(t){this.next();var e=this.containsEsc;return t.property=this.parseIdent(!0),"meta"!==t.property.name&&this.raiseRecoverable(t.property.start,"The only valid meta property for import is 'import.meta'"),e&&this.raiseRecoverable(t.start,"'import.meta' must not contain escaped characters"),"module"===this.options.sourceType||this.options.allowImportExportEverywhere||this.raiseRecoverable(t.start,"Cannot use 'import.meta' outside a module"),this.finishNode(t,"MetaProperty")},tr.parseLiteral=function(t){var e=this.startNode();return e.value=t,e.raw=this.input.slice(this.start,this.end),110===e.raw.charCodeAt(e.raw.length-1)&&(e.bigint=e.raw.slice(0,-1).replace(/_/g,"")),this.next(),this.finishNode(e,"Literal")},tr.parseParenExpression=function(){this.expect(x.parenL);var t=this.parseExpression();return this.expect(x.parenR),t},tr.shouldParseArrow=function(t){return!this.canInsertSemicolon()},tr.parseParenAndDistinguishExpression=function(t,e){var i,n=this.start,r=this.startLoc,s=this.options.ecmaVersion>=8;if(this.options.ecmaVersion>=6){this.next();var a,o=this.start,h=this.startLoc,l=[],u=!0,c=!1,d=new G,p=this.yieldPos,f=this.awaitPos;for(this.yieldPos=0,this.awaitPos=0;this.type!==x.parenR;){if(u?u=!1:this.expect(x.comma),s&&this.afterTrailingComma(x.parenR,!0)){c=!0;break}if(this.type===x.ellipsis){a=this.start,l.push(this.parseParenItem(this.parseRestBinding())),this.type===x.comma&&this.raiseRecoverable(this.start,"Comma is not permitted after the rest element");break}l.push(this.parseMaybeAssign(!1,d,this.parseParenItem))}var g=this.lastTokEnd,m=this.lastTokEndLoc;if(this.expect(x.parenR),t&&this.shouldParseArrow(l)&&this.eat(x.arrow))return this.checkPatternErrors(d,!1),this.checkYieldAwaitInDefaultParams(),this.yieldPos=p,this.awaitPos=f,this.parseParenArrowList(n,r,l,e);(!l.length||c)&&this.unexpected(this.lastTokStart),a&&this.unexpected(a),this.checkExpressionErrors(d,!0),this.yieldPos=p||this.yieldPos,this.awaitPos=f||this.awaitPos,l.length>1?((i=this.startNodeAt(o,h)).expressions=l,this.finishNodeAt(i,"SequenceExpression",g,m)):i=l[0]}else i=this.parseParenExpression();if(!this.options.preserveParens)return i;var _=this.startNodeAt(n,r);return _.expression=i,this.finishNode(_,"ParenthesizedExpression")},tr.parseParenItem=function(t){return t},tr.parseParenArrowList=function(t,e,i,n){return this.parseArrowExpression(this.startNodeAt(t,e),i,!1,n)};var ts=[];tr.parseNew=function(){this.containsEsc&&this.raiseRecoverable(this.start,"Escape sequence in keyword new");var t=this.startNode(),e=this.parseIdent(!0);if(this.options.ecmaVersion>=6&&this.eat(x.dot)){t.meta=e;var i=this.containsEsc;return t.property=this.parseIdent(!0),"target"!==t.property.name&&this.raiseRecoverable(t.property.start,"The only valid meta property for new is 'new.target'"),i&&this.raiseRecoverable(t.start,"'new.target' must not contain escaped characters"),this.allowNewDotTarget||this.raiseRecoverable(t.start,"'new.target' can only be used in functions and class static block"),this.finishNode(t,"MetaProperty")}var n=this.start,r=this.startLoc;return t.callee=this.parseSubscripts(this.parseExprAtom(null,!1,!0),n,r,!0,!1),this.eat(x.parenL)?t.arguments=this.parseExprList(x.parenR,this.options.ecmaVersion>=8,!1):t.arguments=ts,this.finishNode(t,"NewExpression")},tr.parseTemplateElement=function(t){var e=t.isTagged,i=this.startNode();return this.type===x.invalidTemplate?(e||this.raiseRecoverable(this.start,"Bad escape sequence in untagged template literal"),i.value={raw:this.value,cooked:null}):i.value={raw:this.input.slice(this.start,this.end).replace(/\r\n?/g,"\n"),cooked:this.value},this.next(),i.tail=this.type===x.backQuote,this.finishNode(i,"TemplateElement")},tr.parseTemplate=function(t){void 0===t&&(t={});var e=t.isTagged;void 0===e&&(e=!1);var i=this.startNode();this.next(),i.expressions=[];var n=this.parseTemplateElement({isTagged:e});for(i.quasis=[n];!n.tail;)this.type===x.eof&&this.raise(this.pos,"Unterminated template literal"),this.expect(x.dollarBraceL),i.expressions.push(this.parseExpression()),this.expect(x.braceR),i.quasis.push(n=this.parseTemplateElement({isTagged:e}));return this.next(),this.finishNode(i,"TemplateLiteral")},tr.isAsyncProp=function(t){return!t.computed&&"Identifier"===t.key.type&&"async"===t.key.name&&(this.type===x.name||this.type===x.num||this.type===x.string||this.type===x.bracketL||this.type.keyword||this.options.ecmaVersion>=9&&this.type===x.star)&&!w.test(this.input.slice(this.lastTokEnd,this.start))},tr.parseObj=function(t,e){var i=this.startNode(),n=!0,r={};for(i.properties=[],this.next();!this.eat(x.braceR);){if(n)n=!1;else if(this.expect(x.comma),this.options.ecmaVersion>=5&&this.afterTrailingComma(x.braceR))break;var s=this.parseProperty(t,e);t||this.checkPropClash(s,r,e),i.properties.push(s)}return this.finishNode(i,t?"ObjectPattern":"ObjectExpression")},tr.parseProperty=function(t,e){var i,n,r,s,a=this.startNode();if(this.options.ecmaVersion>=9&&this.eat(x.ellipsis))return t?(a.argument=this.parseIdent(!1),this.type===x.comma&&this.raiseRecoverable(this.start,"Comma is not permitted after the rest element"),this.finishNode(a,"RestElement")):(a.argument=this.parseMaybeAssign(!1,e),this.type===x.comma&&e&&e.trailingComma<0&&(e.trailingComma=this.start),this.finishNode(a,"SpreadElement"));this.options.ecmaVersion>=6&&(a.method=!1,a.shorthand=!1,(t||e)&&(r=this.start,s=this.startLoc),t||(i=this.eat(x.star)));var o=this.containsEsc;return this.parsePropertyName(a),!t&&!o&&this.options.ecmaVersion>=8&&!i&&this.isAsyncProp(a)?(n=!0,i=this.options.ecmaVersion>=9&&this.eat(x.star),this.parsePropertyName(a)):n=!1,this.parsePropertyValue(a,t,i,n,r,s,e,o),this.finishNode(a,"Property")},tr.parseGetterSetter=function(t){t.kind=t.key.name,this.parsePropertyName(t),t.value=this.parseMethod(!1);var e="get"===t.kind?0:1;if(t.value.params.length!==e){var i=t.value.start;"get"===t.kind?this.raiseRecoverable(i,"getter should have no params"):this.raiseRecoverable(i,"setter should have exactly one param")}else"set"===t.kind&&"RestElement"===t.value.params[0].type&&this.raiseRecoverable(t.value.params[0].start,"Setter cannot use rest params")},tr.parsePropertyValue=function(t,e,i,n,r,s,a,o){(i||n)&&this.type===x.colon&&this.unexpected(),this.eat(x.colon)?(t.value=e?this.parseMaybeDefault(this.start,this.startLoc):this.parseMaybeAssign(!1,a),t.kind="init"):this.options.ecmaVersion>=6&&this.type===x.parenL?(e&&this.unexpected(),t.kind="init",t.method=!0,t.value=this.parseMethod(i,n)):e||o||!(this.options.ecmaVersion>=5)||t.computed||"Identifier"!==t.key.type||"get"!==t.key.name&&"set"!==t.key.name||this.type===x.comma||this.type===x.braceR||this.type===x.eq?this.options.ecmaVersion>=6&&!t.computed&&"Identifier"===t.key.type?((i||n)&&this.unexpected(),this.checkUnreserved(t.key),"await"!==t.key.name||this.awaitIdentPos||(this.awaitIdentPos=r),t.kind="init",e?t.value=this.parseMaybeDefault(r,s,this.copyNode(t.key)):this.type===x.eq&&a?(a.shorthandAssign<0&&(a.shorthandAssign=this.start),t.value=this.parseMaybeDefault(r,s,this.copyNode(t.key))):t.value=this.copyNode(t.key),t.shorthand=!0):this.unexpected():((i||n)&&this.unexpected(),this.parseGetterSetter(t))},tr.parsePropertyName=function(t){if(this.options.ecmaVersion>=6){if(this.eat(x.bracketL))return t.computed=!0,t.key=this.parseMaybeAssign(),this.expect(x.bracketR),t.key;t.computed=!1}return t.key=this.type===x.num||this.type===x.string?this.parseExprAtom():this.parseIdent("never"!==this.options.allowReserved)},tr.initFunction=function(t){t.id=null,this.options.ecmaVersion>=6&&(t.generator=t.expression=!1),this.options.ecmaVersion>=8&&(t.async=!1)},tr.parseMethod=function(t,e,i){var n=this.startNode(),r=this.yieldPos,s=this.awaitPos,a=this.awaitIdentPos;return this.initFunction(n),this.options.ecmaVersion>=6&&(n.generator=t),this.options.ecmaVersion>=8&&(n.async=!!e),this.yieldPos=0,this.awaitPos=0,this.awaitIdentPos=0,this.enterScope(64|j(e,n.generator)|(i?128:0)),this.expect(x.parenL),n.params=this.parseBindingList(x.parenR,!1,this.options.ecmaVersion>=8),this.checkYieldAwaitInDefaultParams(),this.parseFunctionBody(n,!1,!0,!1),this.yieldPos=r,this.awaitPos=s,this.awaitIdentPos=a,this.finishNode(n,"FunctionExpression")},tr.parseArrowExpression=function(t,e,i,n){var r=this.yieldPos,s=this.awaitPos,a=this.awaitIdentPos;return this.enterScope(16|j(i,!1)),this.initFunction(t),this.options.ecmaVersion>=8&&(t.async=!!i),this.yieldPos=0,this.awaitPos=0,this.awaitIdentPos=0,t.params=this.toAssignableList(e,!0),this.parseFunctionBody(t,!0,!1,n),this.yieldPos=r,this.awaitPos=s,this.awaitIdentPos=a,this.finishNode(t,"ArrowFunctionExpression")},tr.parseFunctionBody=function(t,e,i,n){var r=e&&this.type!==x.braceL,s=this.strict,a=!1;if(r)t.body=this.parseMaybeAssign(n),t.expression=!0,this.checkParams(t,!1);else{var o=this.options.ecmaVersion>=7&&!this.isSimpleParamList(t.params);(!s||o)&&(a=this.strictDirective(this.end))&&o&&this.raiseRecoverable(t.start,"Illegal 'use strict' directive in function with non-simple parameter list");var h=this.labels;this.labels=[],a&&(this.strict=!0),this.checkParams(t,!s&&!a&&!e&&!i&&this.isSimpleParamList(t.params)),this.strict&&t.id&&this.checkLValSimple(t.id,5),t.body=this.parseBlock(!1,void 0,a&&!s),t.expression=!1,this.adaptDirectivePrologue(t.body.body),this.labels=h}this.exitScope()},tr.isSimpleParamList=function(t){for(var e=0;e-1||r.functions.indexOf(t)>-1||r.var.indexOf(t)>-1,r.lexical.push(t),this.inModule&&1&r.flags&&delete this.undefinedExports[t]}else if(4===e)this.currentScope().lexical.push(t);else if(3===e){var s=this.currentScope();n=this.treatFunctionsAsVar?s.lexical.indexOf(t)>-1:s.lexical.indexOf(t)>-1||s.var.indexOf(t)>-1,s.functions.push(t)}else for(var a=this.scopeStack.length-1;a>=0;--a){var o=this.scopeStack[a];if(o.lexical.indexOf(t)>-1&&!(32&o.flags&&o.lexical[0]===t)||!this.treatFunctionsAsVarInScope(o)&&o.functions.indexOf(t)>-1){n=!0;break}if(o.var.push(t),this.inModule&&1&o.flags&&delete this.undefinedExports[t],259&o.flags)break}n&&this.raiseRecoverable(i,"Identifier '"+t+"' has already been declared")},to.checkLocalExport=function(t){-1===this.scopeStack[0].lexical.indexOf(t.name)&&-1===this.scopeStack[0].var.indexOf(t.name)&&(this.undefinedExports[t.name]=t)},to.currentScope=function(){return this.scopeStack[this.scopeStack.length-1]},to.currentVarScope=function(){for(var t=this.scopeStack.length-1;;t--){var e=this.scopeStack[t];if(259&e.flags)return e}},to.currentThisScope=function(){for(var t=this.scopeStack.length-1;;t--){var e=this.scopeStack[t];if(259&e.flags&&!(16&e.flags))return e}};var tl=function(t,e,i){this.type="",this.start=e,this.end=0,t.options.locations&&(this.loc=new B(t,i)),t.options.directSourceFile&&(this.sourceFile=t.options.directSourceFile),t.options.ranges&&(this.range=[e,0])},tu=U.prototype;function tc(t,e,i,n){return t.type=e,t.end=i,this.options.locations&&(t.loc.end=n),this.options.ranges&&(t.range[1]=i),t}tu.startNode=function(){return new tl(this,this.start,this.startLoc)},tu.startNodeAt=function(t,e){return new tl(this,t,e)},tu.finishNode=function(t,e){return tc.call(this,t,e,this.lastTokEnd,this.lastTokEndLoc)},tu.finishNodeAt=function(t,e,i,n){return tc.call(this,t,e,i,n)},tu.copyNode=function(t){var e=new tl(this,t.start,this.startLoc);for(var i in t)e[i]=t[i];return e};for(var td="ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS",tp=td+" Extended_Pictographic",tf=tp+" EBase EComp EMod EPres ExtPict",tg={9:td,10:tp,11:tp,12:tf,13:tf,14:tf},tm={9:"",10:"",11:"",12:"",13:"",14:"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji"},t_="Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu",tv="Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb",ty=tv+" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd",tb=ty+" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho",tx=tb+" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi",tw=tx+" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith",tk={9:tv,10:ty,11:tb,12:tx,13:tw,14:tw+" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz"},tC={},tS=0,tI=[9,10,11,12,13,14];tS=6?"uy":"")+(t.options.ecmaVersion>=9?"s":"")+(t.options.ecmaVersion>=13?"d":"")+(t.options.ecmaVersion>=15?"v":""),this.unicodeProperties=tC[t.options.ecmaVersion>=14?14:t.options.ecmaVersion],this.source="",this.flags="",this.start=0,this.switchU=!1,this.switchV=!1,this.switchN=!1,this.pos=0,this.lastIntValue=0,this.lastStringValue="",this.lastAssertionIsQuantifiable=!1,this.numCapturingParens=0,this.maxBackReference=0,this.groupNames=[],this.backReferenceNames=[]};function tA(t){return 36===t||t>=40&&t<=43||46===t||63===t||t>=91&&t<=94||t>=123&&t<=125}function tP(t){return t>=65&&t<=90||t>=97&&t<=122}function tM(t){return tP(t)||95===t}function tO(t){return t>=48&&t<=57}function tL(t){return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function tN(t){return t>=65&&t<=70?10+(t-65):t>=97&&t<=102?10+(t-97):t-48}function tz(t){return t>=48&&t<=55}tE.prototype.reset=function(t,e,i){var n=-1!==i.indexOf("v"),r=-1!==i.indexOf("u");this.start=0|t,this.source=e+"",this.flags=i,n&&this.parser.options.ecmaVersion>=15?(this.switchU=!0,this.switchV=!0,this.switchN=!0):(this.switchU=r&&this.parser.options.ecmaVersion>=6,this.switchV=!1,this.switchN=r&&this.parser.options.ecmaVersion>=9)},tE.prototype.raise=function(t){this.parser.raiseRecoverable(this.start,"Invalid regular expression: /"+this.source+"/: "+t)},tE.prototype.at=function(t,e){void 0===e&&(e=!1);var i=this.source,n=i.length;if(t>=n)return -1;var r=i.charCodeAt(t);if(!(e||this.switchU)||r<=55295||r>=57344||t+1>=n)return r;var s=i.charCodeAt(t+1);return s>=56320&&s<=57343?(r<<10)+s-56613888:r},tE.prototype.nextIndex=function(t,e){void 0===e&&(e=!1);var i=this.source,n=i.length;if(t>=n)return n;var r,s=i.charCodeAt(t);return!(e||this.switchU)||s<=55295||s>=57344||t+1>=n||(r=i.charCodeAt(t+1))<56320||r>57343?t+1:t+2},tE.prototype.current=function(t){return void 0===t&&(t=!1),this.at(this.pos,t)},tE.prototype.lookahead=function(t){return void 0===t&&(t=!1),this.at(this.nextIndex(this.pos,t),t)},tE.prototype.advance=function(t){void 0===t&&(t=!1),this.pos=this.nextIndex(this.pos,t)},tE.prototype.eat=function(t,e){return void 0===e&&(e=!1),this.current(e)===t&&(this.advance(e),!0)},tE.prototype.eatChars=function(t,e){void 0===e&&(e=!1);for(var i=this.pos,n=0;n-1&&this.raise(t.start,"Duplicate regular expression flag"),"u"===a&&(n=!0),"v"===a&&(r=!0)}this.options.ecmaVersion>=15&&n&&r&&this.raise(t.start,"Invalid regular expression flag")},tT.validateRegExpPattern=function(t){this.regexp_pattern(t),!t.switchN&&this.options.ecmaVersion>=9&&t.groupNames.length>0&&(t.switchN=!0,this.regexp_pattern(t))},tT.regexp_pattern=function(t){t.pos=0,t.lastIntValue=0,t.lastStringValue="",t.lastAssertionIsQuantifiable=!1,t.numCapturingParens=0,t.maxBackReference=0,t.groupNames.length=0,t.backReferenceNames.length=0,this.regexp_disjunction(t),t.pos!==t.source.length&&(t.eat(41)&&t.raise("Unmatched ')'"),(t.eat(93)||t.eat(125))&&t.raise("Lone quantifier brackets")),t.maxBackReference>t.numCapturingParens&&t.raise("Invalid escape");for(var e=0,i=t.backReferenceNames;e=9&&(i=t.eat(60)),t.eat(61)||t.eat(33))return this.regexp_disjunction(t),t.eat(41)||t.raise("Unterminated group"),t.lastAssertionIsQuantifiable=!i,!0}return t.pos=e,!1},tT.regexp_eatQuantifier=function(t,e){return void 0===e&&(e=!1),!!this.regexp_eatQuantifierPrefix(t,e)&&(t.eat(63),!0)},tT.regexp_eatQuantifierPrefix=function(t,e){return t.eat(42)||t.eat(43)||t.eat(63)||this.regexp_eatBracedQuantifier(t,e)},tT.regexp_eatBracedQuantifier=function(t,e){var i=t.pos;if(t.eat(123)){var n=0,r=-1;if(this.regexp_eatDecimalDigits(t)&&(n=t.lastIntValue,t.eat(44)&&this.regexp_eatDecimalDigits(t)&&(r=t.lastIntValue),t.eat(125)))return -1!==r&&r=9?this.regexp_groupSpecifier(t):63===t.current()&&t.raise("Invalid group"),this.regexp_disjunction(t),t.eat(41))return t.numCapturingParens+=1,!0;t.raise("Unterminated group")}return!1},tT.regexp_eatExtendedAtom=function(t){return t.eat(46)||this.regexp_eatReverseSolidusAtomEscape(t)||this.regexp_eatCharacterClass(t)||this.regexp_eatUncapturingGroup(t)||this.regexp_eatCapturingGroup(t)||this.regexp_eatInvalidBracedQuantifier(t)||this.regexp_eatExtendedPatternCharacter(t)},tT.regexp_eatInvalidBracedQuantifier=function(t){return this.regexp_eatBracedQuantifier(t,!0)&&t.raise("Nothing to repeat"),!1},tT.regexp_eatSyntaxCharacter=function(t){var e=t.current();return!!tA(e)&&(t.lastIntValue=e,t.advance(),!0)},tT.regexp_eatPatternCharacters=function(t){for(var e=t.pos,i=0;-1!==(i=t.current())&&!tA(i);)t.advance();return t.pos!==e},tT.regexp_eatExtendedPatternCharacter=function(t){var e=t.current();return -1!==e&&36!==e&&(!(e>=40)||!(e<=43))&&46!==e&&63!==e&&91!==e&&94!==e&&124!==e&&(t.advance(),!0)},tT.regexp_groupSpecifier=function(t){if(t.eat(63)){if(this.regexp_eatGroupName(t)){-1!==t.groupNames.indexOf(t.lastStringValue)&&t.raise("Duplicate capture group name"),t.groupNames.push(t.lastStringValue);return}t.raise("Invalid group")}},tT.regexp_eatGroupName=function(t){if(t.lastStringValue="",t.eat(60)){if(this.regexp_eatRegExpIdentifierName(t)&&t.eat(62))return!0;t.raise("Invalid capture group name")}return!1},tT.regexp_eatRegExpIdentifierName=function(t){if(t.lastStringValue="",this.regexp_eatRegExpIdentifierStart(t)){for(t.lastStringValue+=N(t.lastIntValue);this.regexp_eatRegExpIdentifierPart(t);)t.lastStringValue+=N(t.lastIntValue);return!0}return!1},tT.regexp_eatRegExpIdentifierStart=function(t){var e,i=t.pos,n=this.options.ecmaVersion>=11,r=t.current(n);return(t.advance(n),92===r&&this.regexp_eatRegExpUnicodeEscapeSequence(t,n)&&(r=t.lastIntValue),p(e=r,!0)||36===e||95===e)?(t.lastIntValue=r,!0):(t.pos=i,!1)},tT.regexp_eatRegExpIdentifierPart=function(t){var e,i=t.pos,n=this.options.ecmaVersion>=11,r=t.current(n);return(t.advance(n),92===r&&this.regexp_eatRegExpUnicodeEscapeSequence(t,n)&&(r=t.lastIntValue),f(e=r,!0)||36===e||95===e||8204===e||8205===e)?(t.lastIntValue=r,!0):(t.pos=i,!1)},tT.regexp_eatAtomEscape=function(t){return!!(this.regexp_eatBackReference(t)||this.regexp_eatCharacterClassEscape(t)||this.regexp_eatCharacterEscape(t)||t.switchN&&this.regexp_eatKGroupName(t))||(t.switchU&&(99===t.current()&&t.raise("Invalid unicode escape"),t.raise("Invalid escape")),!1)},tT.regexp_eatBackReference=function(t){var e=t.pos;if(this.regexp_eatDecimalEscape(t)){var i=t.lastIntValue;if(t.switchU)return i>t.maxBackReference&&(t.maxBackReference=i),!0;if(i<=t.numCapturingParens)return!0;t.pos=e}return!1},tT.regexp_eatKGroupName=function(t){if(t.eat(107)){if(this.regexp_eatGroupName(t))return t.backReferenceNames.push(t.lastStringValue),!0;t.raise("Invalid named reference")}return!1},tT.regexp_eatCharacterEscape=function(t){return this.regexp_eatControlEscape(t)||this.regexp_eatCControlLetter(t)||this.regexp_eatZero(t)||this.regexp_eatHexEscapeSequence(t)||this.regexp_eatRegExpUnicodeEscapeSequence(t,!1)||!t.switchU&&this.regexp_eatLegacyOctalEscapeSequence(t)||this.regexp_eatIdentityEscape(t)},tT.regexp_eatCControlLetter=function(t){var e=t.pos;if(t.eat(99)){if(this.regexp_eatControlLetter(t))return!0;t.pos=e}return!1},tT.regexp_eatZero=function(t){return!(48!==t.current()||tO(t.lookahead()))&&(t.lastIntValue=0,t.advance(),!0)},tT.regexp_eatControlEscape=function(t){var e=t.current();return 116===e?(t.lastIntValue=9,t.advance(),!0):110===e?(t.lastIntValue=10,t.advance(),!0):118===e?(t.lastIntValue=11,t.advance(),!0):102===e?(t.lastIntValue=12,t.advance(),!0):114===e&&(t.lastIntValue=13,t.advance(),!0)},tT.regexp_eatControlLetter=function(t){var e=t.current();return!!tP(e)&&(t.lastIntValue=e%32,t.advance(),!0)},tT.regexp_eatRegExpUnicodeEscapeSequence=function(t,e){void 0===e&&(e=!1);var i=t.pos,n=e||t.switchU;if(t.eat(117)){if(this.regexp_eatFixedHexDigits(t,4)){var r,s=t.lastIntValue;if(n&&s>=55296&&s<=56319){var a=t.pos;if(t.eat(92)&&t.eat(117)&&this.regexp_eatFixedHexDigits(t,4)){var o=t.lastIntValue;if(o>=56320&&o<=57343)return t.lastIntValue=(s-55296)*1024+(o-56320)+65536,!0}t.pos=a,t.lastIntValue=s}return!0}if(n&&t.eat(123)&&this.regexp_eatHexDigits(t)&&t.eat(125)&&(r=t.lastIntValue)>=0&&r<=1114111)return!0;n&&t.raise("Invalid unicode escape"),t.pos=i}return!1},tT.regexp_eatIdentityEscape=function(t){if(t.switchU)return!!this.regexp_eatSyntaxCharacter(t)||!!t.eat(47)&&(t.lastIntValue=47,!0);var e=t.current();return 99!==e&&(!t.switchN||107!==e)&&(t.lastIntValue=e,t.advance(),!0)},tT.regexp_eatDecimalEscape=function(t){t.lastIntValue=0;var e=t.current();if(e>=49&&e<=57){do t.lastIntValue=10*t.lastIntValue+(e-48),t.advance();while((e=t.current())>=48&&e<=57)return!0}return!1},tT.regexp_eatCharacterClassEscape=function(t){var e,i=t.current();if(100===i||68===i||115===i||83===i||119===i||87===i)return t.lastIntValue=-1,t.advance(),1;var n=!1;if(t.switchU&&this.options.ecmaVersion>=9&&((n=80===i)||112===i)){if(t.lastIntValue=-1,t.advance(),t.eat(123)&&(e=this.regexp_eatUnicodePropertyValueExpression(t))&&t.eat(125))return n&&2===e&&t.raise("Invalid property name"),e;t.raise("Invalid property name")}return 0},tT.regexp_eatUnicodePropertyValueExpression=function(t){var e=t.pos;if(this.regexp_eatUnicodePropertyName(t)&&t.eat(61)){var i=t.lastStringValue;if(this.regexp_eatUnicodePropertyValue(t)){var n=t.lastStringValue;return this.regexp_validateUnicodePropertyNameAndValue(t,i,n),1}}if(t.pos=e,this.regexp_eatLoneUnicodePropertyNameOrValue(t)){var r=t.lastStringValue;return this.regexp_validateUnicodePropertyNameOrValue(t,r)}return 0},tT.regexp_validateUnicodePropertyNameAndValue=function(t,e,i){M(t.unicodeProperties.nonBinary,e)||t.raise("Invalid property name"),t.unicodeProperties.nonBinary[e].test(i)||t.raise("Invalid property value")},tT.regexp_validateUnicodePropertyNameOrValue=function(t,e){return t.unicodeProperties.binary.test(e)?1:t.switchV&&t.unicodeProperties.binaryOfStrings.test(e)?2:void t.raise("Invalid property name")},tT.regexp_eatUnicodePropertyName=function(t){var e=0;for(t.lastStringValue="";tM(e=t.current());)t.lastStringValue+=N(e),t.advance();return""!==t.lastStringValue},tT.regexp_eatUnicodePropertyValue=function(t){var e,i=0;for(t.lastStringValue="";tM(e=i=t.current())||tO(e);)t.lastStringValue+=N(i),t.advance();return""!==t.lastStringValue},tT.regexp_eatLoneUnicodePropertyNameOrValue=function(t){return this.regexp_eatUnicodePropertyValue(t)},tT.regexp_eatCharacterClass=function(t){if(t.eat(91)){var e=t.eat(94),i=this.regexp_classContents(t);return t.eat(93)||t.raise("Unterminated character class"),e&&2===i&&t.raise("Negated character class may contain strings"),!0}return!1},tT.regexp_classContents=function(t){return 93===t.current()?1:t.switchV?this.regexp_classSetExpression(t):(this.regexp_nonEmptyClassRanges(t),1)},tT.regexp_nonEmptyClassRanges=function(t){for(;this.regexp_eatClassAtom(t);){var e=t.lastIntValue;if(t.eat(45)&&this.regexp_eatClassAtom(t)){var i=t.lastIntValue;t.switchU&&(-1===e||-1===i)&&t.raise("Invalid character class"),-1!==e&&-1!==i&&e>i&&t.raise("Range out of order in character class")}}},tT.regexp_eatClassAtom=function(t){var e=t.pos;if(t.eat(92)){if(this.regexp_eatClassEscape(t))return!0;if(t.switchU){var i=t.current();(99===i||tz(i))&&t.raise("Invalid class escape"),t.raise("Invalid escape")}t.pos=e}var n=t.current();return 93!==n&&(t.lastIntValue=n,t.advance(),!0)},tT.regexp_eatClassEscape=function(t){var e=t.pos;if(t.eat(98))return t.lastIntValue=8,!0;if(t.switchU&&t.eat(45))return t.lastIntValue=45,!0;if(!t.switchU&&t.eat(99)){if(this.regexp_eatClassControlLetter(t))return!0;t.pos=e}return this.regexp_eatCharacterClassEscape(t)||this.regexp_eatCharacterEscape(t)},tT.regexp_classSetExpression=function(t){var e,i=1;if(this.regexp_eatClassSetRange(t));else if(e=this.regexp_eatClassSetOperand(t)){2===e&&(i=2);for(var n=t.pos;t.eatChars([38,38]);){if(38!==t.current()&&(e=this.regexp_eatClassSetOperand(t))){2!==e&&(i=1);continue}t.raise("Invalid character in character class")}if(n!==t.pos)return i;for(;t.eatChars([45,45]);)this.regexp_eatClassSetOperand(t)||t.raise("Invalid character in character class");if(n!==t.pos)return i}else t.raise("Invalid character in character class");for(;;)if(!this.regexp_eatClassSetRange(t)){if(!(e=this.regexp_eatClassSetOperand(t)))return i;2===e&&(i=2)}},tT.regexp_eatClassSetRange=function(t){var e=t.pos;if(this.regexp_eatClassSetCharacter(t)){var i=t.lastIntValue;if(t.eat(45)&&this.regexp_eatClassSetCharacter(t)){var n=t.lastIntValue;return -1!==i&&-1!==n&&i>n&&t.raise("Range out of order in character class"),!0}t.pos=e}return!1},tT.regexp_eatClassSetOperand=function(t){return this.regexp_eatClassSetCharacter(t)?1:this.regexp_eatClassStringDisjunction(t)||this.regexp_eatNestedClass(t)},tT.regexp_eatNestedClass=function(t){var e=t.pos;if(t.eat(91)){var i=t.eat(94),n=this.regexp_classContents(t);if(t.eat(93))return i&&2===n&&t.raise("Negated character class may contain strings"),n;t.pos=e}if(t.eat(92)){var r=this.regexp_eatCharacterClassEscape(t);if(r)return r;t.pos=e}return null},tT.regexp_eatClassStringDisjunction=function(t){var e=t.pos;if(t.eatChars([92,113])){if(t.eat(123)){var i=this.regexp_classStringDisjunctionContents(t);if(t.eat(125))return i}else t.raise("Invalid escape");t.pos=e}return null},tT.regexp_classStringDisjunctionContents=function(t){for(var e=this.regexp_classString(t);t.eat(124);)2===this.regexp_classString(t)&&(e=2);return e},tT.regexp_classString=function(t){for(var e=0;this.regexp_eatClassSetCharacter(t);)e++;return 1===e?1:2},tT.regexp_eatClassSetCharacter=function(t){var e,i=t.pos;if(t.eat(92))return!!(this.regexp_eatCharacterEscape(t)||this.regexp_eatClassSetReservedPunctuator(t))||(t.eat(98)?(t.lastIntValue=8,!0):(t.pos=i,!1));var n=t.current();return!(n<0||n===t.lookahead()&&(33===n||n>=35&&n<=38||n>=42&&n<=44||46===n||n>=58&&n<=64||94===n||96===n||126===n)||40===(e=n)||41===e||45===e||47===e||e>=91&&e<=93||e>=123&&e<=125)&&(t.advance(),t.lastIntValue=n,!0)},tT.regexp_eatClassSetReservedPunctuator=function(t){var e=t.current();return!!(33===e||35===e||37===e||38===e||44===e||45===e||e>=58&&e<=62||64===e||96===e||126===e)&&(t.lastIntValue=e,t.advance(),!0)},tT.regexp_eatClassControlLetter=function(t){var e=t.current();return(!!tO(e)||95===e)&&(t.lastIntValue=e%32,t.advance(),!0)},tT.regexp_eatHexEscapeSequence=function(t){var e=t.pos;if(t.eat(120)){if(this.regexp_eatFixedHexDigits(t,2))return!0;t.switchU&&t.raise("Invalid escape"),t.pos=e}return!1},tT.regexp_eatDecimalDigits=function(t){var e=t.pos,i=0;for(t.lastIntValue=0;tO(i=t.current());)t.lastIntValue=10*t.lastIntValue+(i-48),t.advance();return t.pos!==e},tT.regexp_eatHexDigits=function(t){var e=t.pos,i=0;for(t.lastIntValue=0;tL(i=t.current());)t.lastIntValue=16*t.lastIntValue+tN(i),t.advance();return t.pos!==e},tT.regexp_eatLegacyOctalEscapeSequence=function(t){if(this.regexp_eatOctalDigit(t)){var e=t.lastIntValue;if(this.regexp_eatOctalDigit(t)){var i=t.lastIntValue;e<=3&&this.regexp_eatOctalDigit(t)?t.lastIntValue=64*e+8*i+t.lastIntValue:t.lastIntValue=8*e+i}else t.lastIntValue=e;return!0}return!1},tT.regexp_eatOctalDigit=function(t){var e=t.current();return tz(e)?(t.lastIntValue=e-48,t.advance(),!0):(t.lastIntValue=0,!1)},tT.regexp_eatFixedHexDigits=function(t,e){var i=t.pos;t.lastIntValue=0;for(var n=0;n=this.input.length)?this.finishToken(x.eof):t.override?t.override(this):void this.readToken(this.fullCharCodeAtPos())},tB.readToken=function(t){return p(t,this.options.ecmaVersion>=6)||92===t?this.readWord():this.getTokenFromCode(t)},tB.fullCharCodeAtPos=function(){var t=this.input.charCodeAt(this.pos);if(t<=55295||t>=56320)return t;var e=this.input.charCodeAt(this.pos+1);return e<=56319||e>=57344?t:(t<<10)+e-56613888},tB.skipBlockComment=function(){var t=this.options.onComment&&this.curPosition(),e=this.pos,i=this.input.indexOf("*/",this.pos+=2);if(-1===i&&this.raise(this.pos-2,"Unterminated comment"),this.pos=i+2,this.options.locations)for(var n=void 0,r=e;(n=S(this.input,r,this.pos))>-1;)++this.curLine,r=this.lineStart=n;this.options.onComment&&this.options.onComment(!0,this.input.slice(e+2,i),e,this.pos,t,this.curPosition())},tB.skipLineComment=function(t){for(var e=this.pos,i=this.options.onComment&&this.curPosition(),n=this.input.charCodeAt(this.pos+=t);this.pos8&&t<14||t>=5760&&I.test(String.fromCharCode(t)))++this.pos;else break e}}},tB.finishToken=function(t,e){this.end=this.pos,this.options.locations&&(this.endLoc=this.curPosition());var i=this.type;this.type=t,this.value=e,this.updateContext(i)},tB.readToken_dot=function(){var t=this.input.charCodeAt(this.pos+1);if(t>=48&&t<=57)return this.readNumber(!0);var e=this.input.charCodeAt(this.pos+2);return this.options.ecmaVersion>=6&&46===t&&46===e?(this.pos+=3,this.finishToken(x.ellipsis)):(++this.pos,this.finishToken(x.dot))},tB.readToken_slash=function(){var t=this.input.charCodeAt(this.pos+1);return this.exprAllowed?(++this.pos,this.readRegexp()):61===t?this.finishOp(x.assign,2):this.finishOp(x.slash,1)},tB.readToken_mult_modulo_exp=function(t){var e=this.input.charCodeAt(this.pos+1),i=1,n=42===t?x.star:x.modulo;return(this.options.ecmaVersion>=7&&42===t&&42===e&&(++i,n=x.starstar,e=this.input.charCodeAt(this.pos+2)),61===e)?this.finishOp(x.assign,i+1):this.finishOp(n,i)},tB.readToken_pipe_amp=function(t){var e=this.input.charCodeAt(this.pos+1);return e===t?this.options.ecmaVersion>=12&&61===this.input.charCodeAt(this.pos+2)?this.finishOp(x.assign,3):this.finishOp(124===t?x.logicalOR:x.logicalAND,2):61===e?this.finishOp(x.assign,2):this.finishOp(124===t?x.bitwiseOR:x.bitwiseAND,1)},tB.readToken_caret=function(){return 61===this.input.charCodeAt(this.pos+1)?this.finishOp(x.assign,2):this.finishOp(x.bitwiseXOR,1)},tB.readToken_plus_min=function(t){var e=this.input.charCodeAt(this.pos+1);return e===t?45===e&&!this.inModule&&62===this.input.charCodeAt(this.pos+2)&&(0===this.lastTokEnd||w.test(this.input.slice(this.lastTokEnd,this.pos)))?(this.skipLineComment(3),this.skipSpace(),this.nextToken()):this.finishOp(x.incDec,2):61===e?this.finishOp(x.assign,2):this.finishOp(x.plusMin,1)},tB.readToken_lt_gt=function(t){var e=this.input.charCodeAt(this.pos+1),i=1;return e===t?(i=62===t&&62===this.input.charCodeAt(this.pos+2)?3:2,61===this.input.charCodeAt(this.pos+i))?this.finishOp(x.assign,i+1):this.finishOp(x.bitShift,i):33!==e||60!==t||this.inModule||45!==this.input.charCodeAt(this.pos+2)||45!==this.input.charCodeAt(this.pos+3)?(61===e&&(i=2),this.finishOp(x.relational,i)):(this.skipLineComment(4),this.skipSpace(),this.nextToken())},tB.readToken_eq_excl=function(t){var e=this.input.charCodeAt(this.pos+1);return 61===e?this.finishOp(x.equality,61===this.input.charCodeAt(this.pos+2)?3:2):61===t&&62===e&&this.options.ecmaVersion>=6?(this.pos+=2,this.finishToken(x.arrow)):this.finishOp(61===t?x.eq:x.prefix,1)},tB.readToken_question=function(){var t=this.options.ecmaVersion;if(t>=11){var e=this.input.charCodeAt(this.pos+1);if(46===e){var i=this.input.charCodeAt(this.pos+2);if(i<48||i>57)return this.finishOp(x.questionDot,2)}if(63===e)return t>=12&&61===this.input.charCodeAt(this.pos+2)?this.finishOp(x.assign,3):this.finishOp(x.coalesce,2)}return this.finishOp(x.question,1)},tB.readToken_numberSign=function(){var t=this.options.ecmaVersion,e=35;if(t>=13&&(++this.pos,p(e=this.fullCharCodeAtPos(),!0)||92===e))return this.finishToken(x.privateId,this.readWord1());this.raise(this.pos,"Unexpected character '"+N(e)+"'")},tB.getTokenFromCode=function(t){switch(t){case 46:return this.readToken_dot();case 40:return++this.pos,this.finishToken(x.parenL);case 41:return++this.pos,this.finishToken(x.parenR);case 59:return++this.pos,this.finishToken(x.semi);case 44:return++this.pos,this.finishToken(x.comma);case 91:return++this.pos,this.finishToken(x.bracketL);case 93:return++this.pos,this.finishToken(x.bracketR);case 123:return++this.pos,this.finishToken(x.braceL);case 125:return++this.pos,this.finishToken(x.braceR);case 58:return++this.pos,this.finishToken(x.colon);case 96:if(this.options.ecmaVersion<6)break;return++this.pos,this.finishToken(x.backQuote);case 48:var e=this.input.charCodeAt(this.pos+1);if(120===e||88===e)return this.readRadixNumber(16);if(this.options.ecmaVersion>=6){if(111===e||79===e)return this.readRadixNumber(8);if(98===e||66===e)return this.readRadixNumber(2)}case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(t);case 47:return this.readToken_slash();case 37:case 42:return this.readToken_mult_modulo_exp(t);case 124:case 38:return this.readToken_pipe_amp(t);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(t);case 60:case 62:return this.readToken_lt_gt(t);case 61:case 33:return this.readToken_eq_excl(t);case 63:return this.readToken_question();case 126:return this.finishOp(x.prefix,1);case 35:return this.readToken_numberSign()}this.raise(this.pos,"Unexpected character '"+N(t)+"'")},tB.finishOp=function(t,e){var i=this.input.slice(this.pos,this.pos+e);return this.pos+=e,this.finishToken(t,i)},tB.readRegexp=function(){for(var t,e,i=this.pos;;){this.pos>=this.input.length&&this.raise(i,"Unterminated regular expression");var n=this.input.charAt(this.pos);if(w.test(n)&&this.raise(i,"Unterminated regular expression"),t)t=!1;else{if("["===n)e=!0;else if("]"===n&&e)e=!1;else if("/"===n&&!e)break;t="\\"===n}++this.pos}var r=this.input.slice(i,this.pos);++this.pos;var s=this.pos,a=this.readWord1();this.containsEsc&&this.unexpected(s);var o=this.regexpState||(this.regexpState=new tE(this));o.reset(i,r,a),this.validateRegExpFlags(o),this.validateRegExpPattern(o);var h=null;try{h=new RegExp(r,a)}catch(t){}return this.finishToken(x.regexp,{pattern:r,flags:a,value:h})},tB.readInt=function(t,e,i){for(var n=this.options.ecmaVersion>=12&&void 0===e,r=i&&48===this.input.charCodeAt(this.pos),s=this.pos,a=0,o=0,h=0,l=null==e?1/0:e;h=97?u-97+10:u>=65?u-65+10:u>=48&&u<=57?u-48:1/0)>=t)break;o=u,a=a*t+c}return(n&&95===o&&this.raiseRecoverable(this.pos-1,"Numeric separator is not allowed at the last of digits"),this.pos===s||null!=e&&this.pos-s!==e)?null:a},tB.readRadixNumber=function(t){var e=this.pos;this.pos+=2;var i=this.readInt(t);return null==i&&this.raise(this.start+2,"Expected number in radix "+t),this.options.ecmaVersion>=11&&110===this.input.charCodeAt(this.pos)?(i=tD(this.input.slice(e,this.pos)),++this.pos):p(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number"),this.finishToken(x.num,i)},tB.readNumber=function(t){var e,i=this.pos;t||null!==this.readInt(10,void 0,!0)||this.raise(i,"Invalid number");var n=this.pos-i>=2&&48===this.input.charCodeAt(i);n&&this.strict&&this.raise(i,"Invalid number");var r=this.input.charCodeAt(this.pos);if(!n&&!t&&this.options.ecmaVersion>=11&&110===r){var s=tD(this.input.slice(i,this.pos));return++this.pos,p(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number"),this.finishToken(x.num,s)}n&&/[89]/.test(this.input.slice(i,this.pos))&&(n=!1),46!==r||n||(++this.pos,this.readInt(10),r=this.input.charCodeAt(this.pos)),69!==r&&101!==r||n||((43===(r=this.input.charCodeAt(++this.pos))||45===r)&&++this.pos,null===this.readInt(10)&&this.raise(i,"Invalid number")),p(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number");var a=(e=this.input.slice(i,this.pos),n?parseInt(e,8):parseFloat(e.replace(/_/g,"")));return this.finishToken(x.num,a)},tB.readCodePoint=function(){var t;if(123===this.input.charCodeAt(this.pos)){this.options.ecmaVersion<6&&this.unexpected();var e=++this.pos;t=this.readHexChar(this.input.indexOf("}",this.pos)-this.pos),++this.pos,t>1114111&&this.invalidStringToken(e,"Code point out of bounds")}else t=this.readHexChar(4);return t},tB.readString=function(t){for(var e="",i=++this.pos;;){this.pos>=this.input.length&&this.raise(this.start,"Unterminated string constant");var n=this.input.charCodeAt(this.pos);if(n===t)break;92===n?(e+=this.input.slice(i,this.pos)+this.readEscapedChar(!1),i=this.pos):8232===n||8233===n?(this.options.ecmaVersion<10&&this.raise(this.start,"Unterminated string constant"),++this.pos,this.options.locations&&(this.curLine++,this.lineStart=this.pos)):(C(n)&&this.raise(this.start,"Unterminated string constant"),++this.pos)}return e+=this.input.slice(i,this.pos++),this.finishToken(x.string,e)};var tF={};tB.tryReadTemplateToken=function(){this.inTemplateElement=!0;try{this.readTmplToken()}catch(t){if(t===tF)this.readInvalidTemplateToken();else throw t}this.inTemplateElement=!1},tB.invalidStringToken=function(t,e){if(this.inTemplateElement&&this.options.ecmaVersion>=9)throw tF;this.raise(t,e)},tB.readTmplToken=function(){for(var t="",e=this.pos;;){this.pos>=this.input.length&&this.raise(this.start,"Unterminated template");var i=this.input.charCodeAt(this.pos);if(96===i||36===i&&123===this.input.charCodeAt(this.pos+1)){if(this.pos===this.start&&(this.type===x.template||this.type===x.invalidTemplate)){if(36===i)return this.pos+=2,this.finishToken(x.dollarBraceL);return++this.pos,this.finishToken(x.backQuote)}return t+=this.input.slice(e,this.pos),this.finishToken(x.template,t)}if(92===i)t+=this.input.slice(e,this.pos)+this.readEscapedChar(!0),e=this.pos;else if(C(i)){switch(t+=this.input.slice(e,this.pos),++this.pos,i){case 13:10===this.input.charCodeAt(this.pos)&&++this.pos;case 10:t+="\n";break;default:t+=String.fromCharCode(i)}this.options.locations&&(++this.curLine,this.lineStart=this.pos),e=this.pos}else++this.pos}},tB.readInvalidTemplateToken=function(){for(;this.pos=48&&e<=55){var n=this.input.substr(this.pos-1,3).match(/^[0-7]+/)[0],r=parseInt(n,8);return r>255&&(r=parseInt(n=n.slice(0,-1),8)),this.pos+=n.length-1,e=this.input.charCodeAt(this.pos),("0"!==n||56===e||57===e)&&(this.strict||t)&&this.invalidStringToken(this.pos-1-n.length,t?"Octal literal in template string":"Octal literal in strict mode"),String.fromCharCode(r)}if(C(e))return"";return String.fromCharCode(e)}},tB.readHexChar=function(t){var e=this.pos,i=this.readInt(16,t);return null===i&&this.invalidStringToken(e,"Bad character escape sequence"),i},tB.readWord1=function(){this.containsEsc=!1;for(var t="",e=!0,i=this.pos,n=this.options.ecmaVersion>=6;this.pos{p.open||p.showModal()}),document.getElementById("feedback").addEventListener("click",()=>{f.setAttribute("open","true"),d.scrollIntoView(!0)});var g=class{constructor(t){this.selfOptions=t||{},this.pipes={}}options(t){return t&&(this.selfOptions=t),this.selfOptions}pipe(t,e){let i=e;if("string"==typeof t){if(void 0===i)return this.pipes[t];this.pipes[t]=i}if(t&&t.name){if((i=t).processor===this)return i;this.pipes[i.name]=i}return i.processor=this,i}process(t,e){let i,n=t;n.options=this.options();let r=e||t.pipe||"default";for(;r;)void 0!==n.nextAfterChildren&&(n.next=n.nextAfterChildren,n.nextAfterChildren=null),"string"==typeof r&&(r=this.pipe(r)),r.process(n),i=r,r=null,n&&n.next&&(r=(n=n.next).pipe||i);return n.hasResult?n.result:void 0}},m=class{constructor(t){this.name=t,this.filters=[]}process(t){if(!this.processor)throw Error("add this pipe to a processor before using it");let e=this.debug,i=this.filters.length;for(let n=0;nt.filterName)}after(t,...e){let i=this.indexOf(t);return this.filters.splice(i+1,0,...e),this}before(t,...e){let i=this.indexOf(t);return this.filters.splice(i,0,...e),this}replace(t,...e){let i=this.indexOf(t);return this.filters.splice(i,1,...e),this}remove(t){let e=this.indexOf(t);return this.filters.splice(e,1),this}clear(){return this.filters.length=0,this}shouldHaveResult(t){if(!1===t){this.resultCheck=null;return}if(!this.resultCheck)return this.resultCheck=t=>{if(!t.hasResult){console.log(t);let e=Error(`${this.name} failed`);throw e.noResult=!0,e}},this}};class _{setResult(t){return this.result=t,this.hasResult=!0,this}exit(){return this.exiting=!0,this}push(t,e){return t.parent=this,void 0!==e&&(t.childName=e),t.root=this.root||this,t.options=t.options||this.options,this.children?(this.children[this.children.length-1].next=t,this.children.push(t)):(this.children=[t],this.nextAfterChildren=this.next||null,this.next=t),t.next=this,this}}function v(t){if("object"!=typeof t)return t;if(null===t)return null;if(Array.isArray(t))return t.map(v);if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return function(t){let e=/^\/(.*)\/([gimyu]*)$/.exec(t.toString());return new RegExp(e[1],e[2])}(t);let e={};for(let i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=v(t[i]));return e}var y=class extends _{constructor(t,e){super(),this.left=t,this.right=e,this.pipe="diff"}setResult(t){if(this.options.cloneDiffValues&&"object"==typeof t){let e="function"==typeof this.options.cloneDiffValues?this.options.cloneDiffValues:v;"object"==typeof t[0]&&(t[0]=e(t[0])),"object"==typeof t[1]&&(t[1]=e(t[1]))}return super.setResult(t)}},b=class extends _{constructor(t,e){super(),this.left=t,this.delta=e,this.pipe="patch"}},x=class extends _{constructor(t){super(),this.delta=t,this.pipe="reverse"}};const w=function(t){if(t.left===t.right){t.setResult(void 0).exit();return}if(void 0===t.left){if("function"==typeof t.right)throw Error("functions are not supported");t.setResult([t.right]).exit();return}if(void 0===t.right){t.setResult([t.left,0,0]).exit();return}if("function"==typeof t.left||"function"==typeof t.right)throw Error("functions are not supported");if(t.leftType=null===t.left?"null":typeof t.left,t.rightType=null===t.right?"null":typeof t.right,t.leftType!==t.rightType||"boolean"===t.leftType||"number"===t.leftType||("object"===t.leftType&&(t.leftIsArray=Array.isArray(t.left)),"object"===t.rightType&&(t.rightIsArray=Array.isArray(t.right)),t.leftIsArray!==t.rightIsArray)){t.setResult([t.left,t.right]).exit();return}t.left instanceof RegExp&&(t.right instanceof RegExp?t.setResult([t.left.toString(),t.right.toString()]).exit():t.setResult([t.left,t.right]).exit())};w.filterName="trivial";const k=function(t){if(void 0===t.delta){t.setResult(t.left).exit();return}if(t.nested=!Array.isArray(t.delta),t.nested)return;let e=t.delta;if(1===e.length){t.setResult(e[0]).exit();return}if(2===e.length){if(t.left instanceof RegExp){let i=/^\/(.*)\/([gimyu]+)$/.exec(e[1]);if(i){t.setResult(new RegExp(i[1],i[2])).exit();return}}t.setResult(e[1]).exit();return}3===e.length&&0===e[2]&&t.setResult(void 0).exit()};k.filterName="trivial";const C=function(t){if(void 0===t.delta){t.setResult(t.delta).exit();return}if(t.nested=!Array.isArray(t.delta),t.nested)return;let e=t.delta;if(1===e.length){t.setResult([e[0],0,0]).exit();return}if(2===e.length){t.setResult([e[1],e[0]]).exit();return}3===e.length&&0===e[2]&&t.setResult([e[0]]).exit()};C.filterName="trivial";const S=t=>{let e;if(!t||!t.children)return;let i=t.children.length,n=t.result;for(let r=0;r{let e,i;if(t.leftIsArray||"object"!==t.leftType)return;let n=t.left,r=t.right,s=t.options.propertyFilter;for(e in n)Object.prototype.hasOwnProperty.call(n,e)&&(!s||s(e,t))&&(i=new y(n[e],r[e]),t.push(i,e));for(e in r)Object.prototype.hasOwnProperty.call(r,e)&&(!s||s(e,t))&&void 0===n[e]&&(i=new y(void 0,r[e]),t.push(i,e));if(!t.children||0===t.children.length){t.setResult(void 0).exit();return}t.exit()};I.filterName="objects";const T=function(t){let e,i;if(!t.nested)return;let n=t.delta;if(!n._t){for(e in n)i=new b(t.left[e],n[e]),t.push(i,e);t.exit()}};T.filterName="objects";const E=function(t){let e;if(!t||!t.children||t.delta._t)return;let i=t.left,n=t.children.length;for(let r=0;r{let e;if(!t||!t.children||t.delta._t)return;let i=t.children.length,n={};for(let r=0;rt[r-1][s]?--s:--r;return a};var N={get:function(t,e,i,n){let r=n||{};return L(O(t,e,i||M,r),t,e,r)}};function z(t,e,i,n,r){let s=t[i],a=e[n];if(s===a)return!0;if("object"!=typeof s||"object"!=typeof a)return!1;let o=r.objectHash;if(!o)return r.matchByPosition&&i===n;r.hashCache1=r.hashCache1||[];let h=r.hashCache1[i];if(void 0===h&&(r.hashCache1[i]=h=o(s,i)),void 0===h)return!1;r.hashCache2=r.hashCache2||[];let l=r.hashCache2[n];return void 0===l&&(r.hashCache2[n]=l=o(a,n)),void 0!==l&&h===l}const R=function(t){let e,i,n,r,s;if(!t.leftIsArray)return;let a={objectHash:t.options&&t.options.objectHash,matchByPosition:t.options&&t.options.matchByPosition},o=0,h=0,l=t.left,u=t.right,c=l.length,d=u.length;for(c>0&&d>0&&!a.objectHash&&"boolean"!=typeof a.matchByPosition&&(a.matchByPosition=!function(t,e,i,n){for(let r=0;rg.indices1.indexOf(e-o)&&(s[`_${e}`]=[l[e],0,0],m.push(e));let _=!0;t.options&&t.options.arrays&&!1===t.options.arrays.detectMove&&(_=!1);let v=!1;t.options&&t.options.arrays&&t.options.arrays.includeValueOnMove&&(v=!0);let b=m.length;for(e=o;e0){for(let c=0;ct-e,numericallyBy:t=>(e,i)=>e[t]-i[t]},D=function(t){let e,i,n;if(!t.nested)return;let r=t.delta;if("a"!==r._t)return;let s=t.left,a=[],o=[],h=[];for(e in r)if("_t"!==e){if("_"===e[0]){let t=e;if(0===r[t][2]||3===r[t][2])a.push(parseInt(e.slice(1),10));else throw Error(`only removal or move can be applied at original array indices, invalid diff type: ${r[t][2]}`)}else{let t=e;1===r[t].length?o.push({index:parseInt(t,10),value:r[t][0]}):h.push({index:parseInt(t,10),delta:r[t]})}}for(e=(a=a.sort(B.numerically)).length-1;e>=0;e--){i=a[e];let t=r[`_${i}`],n=s.splice(i,1)[0];3===t[2]&&o.push({index:t[1],value:n})}let l=(o=o.sort(B.numericallyBy("index"))).length;for(e=0;e0)for(e=0;e{if("string"==typeof e&&"_"===e[0])return parseInt(e.substring(1),10);if(Array.isArray(i)&&0===i[2])return`_${e}`;let n=+e;for(let i in t){let r=t[i];if(Array.isArray(r)){if(3===r[2]){let t=parseInt(i.substring(1),10),s=r[1];if(s===+e)return t;t<=n&&s>n?n++:t>=n&&s{let e;if(!t||!t.children)return;let i=t.delta;if("a"!==i._t)return;let n=t.children.length,r={_t:"a"};for(let s=0;s=0;)t[e]=0}const X=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),J=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),tt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),te=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ti=Array(576);Q(ti);const tn=Array(60);Q(tn);const tr=Array(512);Q(tr);const ts=Array(256);Q(ts);const ta=Array(29);Q(ta);const to=Array(30);function th(t,e,i,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=t&&t.length}function tl(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}Q(to);const tu=t=>t<256?tr[t]:tr[256+(t>>>7)],tc=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},td=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<{td(t,i[2*e],i[2*e+1])},tf=(t,e)=>{let i=0;do i|=1&t,t>>>=1,i<<=1;while(--e>0)return i>>>1},tg=t=>{16===t.bi_valid?(tc(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)},tm=(t,e)=>{let i,n,r,s,a,o;let h=e.dyn_tree,l=e.max_code,u=e.stat_desc.static_tree,c=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,p=e.stat_desc.extra_base,f=e.stat_desc.max_length,g=0;for(s=0;s<=15;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,i=t.heap_max+1;i<573;i++)(s=h[2*h[2*(n=t.heap[i])+1]+1]+1)>f&&(s=f,g++),h[2*n+1]=s,!(n>l)&&(t.bl_count[s]++,a=0,n>=p&&(a=d[n-p]),o=h[2*n],t.opt_len+=o*(s+a),c&&(t.static_len+=o*(u[2*n+1]+a)));if(0!==g){do{for(s=f-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[f]--,g-=2}while(g>0)for(s=f;0!==s;s--)for(n=t.bl_count[s];0!==n;)!((r=t.heap[--i])>l)&&(h[2*r+1]!==s&&(t.opt_len+=(s-h[2*r+1])*h[2*r],h[2*r+1]=s),n--)}},t_=(t,e,i)=>{let n,r;let s=Array(16),a=0;for(n=1;n<=15;n++)a=a+i[n-1]<<1,s[n]=a;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=tf(s[e]++,e))}},tv=()=>{let n,r,s,a,o;let h=Array(16);for(a=0,s=0;a<28;a++)for(n=0,ta[a]=s;n<1<>=7;a<30;a++)for(n=0,to[a]=o<<7;n<1<{let e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},tb=t=>{t.bi_valid>8?tc(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},tx=(t,e,i,n)=>{let r=2*e,s=2*i;return t[r]{let n=t.heap[i],r=i<<1;for(;r<=t.heap_len&&(r{let n,r,s,a;let o=0;if(0!==t.sym_next)do n=(255&t.pending_buf[t.sym_buf+o++])+((255&t.pending_buf[t.sym_buf+o++])<<8),r=t.pending_buf[t.sym_buf+o++],0===n?tp(t,r,e):(tp(t,(s=ts[r])+256+1,e),0!==(a=X[s])&&td(t,r-=ta[s],a),tp(t,s=tu(--n),i),0!==(a=J[s])&&td(t,n-=to[s],a));while(o{let i,n,r;let s=e.dyn_tree,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,l=-1;for(i=0,t.heap_len=0,t.heap_max=573;i>1;i>=1;i--)tw(t,s,i);r=h;do i=t.heap[1],t.heap[1]=t.heap[t.heap_len--],tw(t,s,1),n=t.heap[1],t.heap[--t.heap_max]=i,t.heap[--t.heap_max]=n,s[2*r]=s[2*i]+s[2*n],t.depth[r]=(t.depth[i]>=t.depth[n]?t.depth[i]:t.depth[n])+1,s[2*i+1]=s[2*n+1]=r,t.heap[1]=r++,tw(t,s,1);while(t.heap_len>=2)t.heap[--t.heap_max]=t.heap[1],tm(t,e),t_(s,l,t.bl_count)},tS=(t,e,i)=>{let n,r;let s=-1,a=e[1],o=0,h=7,l=4;for(0===a&&(h=138,l=3),e[(i+1)*2+1]=65535,n=0;n<=i;n++)r=a,a=e[(n+1)*2+1],++o{let n,r;let s=-1,a=e[1],o=0,h=7,l=4;for(0===a&&(h=138,l=3),n=0;n<=i;n++)if(r=a,a=e[(n+1)*2+1],!(++o{let e;for(tS(t,t.dyn_ltree,t.l_desc.max_code),tS(t,t.dyn_dtree,t.d_desc.max_code),tC(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*te[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e},tE=(t,e,i,n)=>{let r;for(td(t,e-257,5),td(t,i-1,5),td(t,n-4,4),r=0;r{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0};let tP=!1;const tM=(t,e,i,n)=>{td(t,0+(n?1:0),3),tb(t),tc(t,i),tc(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var tO={_tr_init:n=>{tP||(tv(),tP=!0),n.l_desc=new tl(n.dyn_ltree,t),n.d_desc=new tl(n.dyn_dtree,e),n.bl_desc=new tl(n.bl_tree,i),n.bi_buf=0,n.bi_valid=0,ty(n)},_tr_stored_block:tM,_tr_flush_block:(t,e,i,n)=>{let r,s;let a=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=tA(t)),tC(t,t.l_desc),tC(t,t.d_desc),a=tT(t),r=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==e?tM(t,e,i,n):4===t.strategy||s===r?(td(t,2+(n?1:0),3),tk(t,ti,tn)):(td(t,4+(n?1:0),3),tE(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),tk(t,t.dyn_ltree,t.dyn_dtree)),ty(t),n&&tb(t)},_tr_tally:(t,e,i)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[(ts[i]+256+1)*2]++,t.dyn_dtree[2*tu(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{td(t,2,3),tp(t,256,ti),tg(t)}},tL=(t,e,i,n)=>{let r=65535&t|0,s=t>>>16&65535|0,a=0;for(;0!==i;){a=i>2e3?2e3:i,i-=a;do s=s+(r=r+e[n++]|0)|0;while(--a)r%=65521,s%=65521}return r|s<<16|0};const tN=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var tz=(t,e,i,n)=>{let r=n+i;t^=-1;for(let i=n;i>>8^tN[(t^e[i])&255];return -1^t},tR={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},tB={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:tD,_tr_stored_block:tF,_tr_flush_block:tV,_tr_tally:tj,_tr_align:tU}=tO,{Z_NO_FLUSH:tq,Z_PARTIAL_FLUSH:tZ,Z_FULL_FLUSH:tH,Z_FINISH:tG,Z_BLOCK:tW,Z_OK:tK,Z_STREAM_END:t$,Z_STREAM_ERROR:tY,Z_DATA_ERROR:tQ,Z_BUF_ERROR:tX,Z_DEFAULT_COMPRESSION:tJ,Z_FILTERED:t0,Z_HUFFMAN_ONLY:t1,Z_RLE:t2,Z_FIXED:t5,Z_DEFAULT_STRATEGY:t3,Z_UNKNOWN:t6,Z_DEFLATED:t4}=tB,t9=(t,e)=>(t.msg=tR[e],e),t8=t=>2*t-(t>4?9:0),t7=t=>{let e=t.length;for(;--e>=0;)t[e]=0},et=t=>{let e,i,n;let r=t.w_size;n=e=t.hash_size;do i=t.head[--n],t.head[n]=i>=r?i-r:0;while(--e)n=e=r;do i=t.prev[--n],t.prev[n]=i>=r?i-r:0;while(--e)};let ee=(t,e,i)=>(e<{let e=t.state,i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},en=(t,e)=>{tV(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,ei(t.strm)},er=(t,e)=>{t.pending_buf[t.pending++]=e},es=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ea=(t,e,i,n)=>{let r=t.avail_in;return(r>n&&(r=n),0===r)?0:(t.avail_in-=r,e.set(t.input.subarray(t.next_in,t.next_in+r),i),1===t.state.wrap?t.adler=tL(t.adler,e,r,i):2===t.state.wrap&&(t.adler=tz(t.adler,e,r,i)),t.next_in+=r,t.total_in+=r,r)},eo=(t,e)=>{let i,n,r=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-262?t.strstart-(t.w_size-262):0,l=t.window,u=t.w_mask,c=t.prev,d=t.strstart+258,p=l[s+a-1],f=l[s+a];t.prev_length>=t.good_match&&(r>>=2),o>t.lookahead&&(o=t.lookahead);do{if(l[(i=e)+a]!==f||l[i+a-1]!==p||l[i]!==l[s]||l[++i]!==l[s+1])continue;s+=2,i++;do;while(l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&sa){if(t.match_start=e,a=n,n>=o)break;p=l[s+a-1],f=l[s+a]}}while((e=c[e&u])>h&&0!=--r)return a<=t.lookahead?a:t.lookahead},eh=t=>{let e,i,n;let r=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=r+(r-262)&&(t.window.set(t.window.subarray(r,r+r-i),0),t.match_start-=r,t.strstart-=r,t.block_start-=r,t.insert>t.strstart&&(t.insert=t.strstart),et(t),i+=r),0===t.strm.avail_in)break;if(e=ea(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=e,t.lookahead+t.insert>=3)for(n=t.strstart-t.insert,t.ins_h=t.window[n],t.ins_h=ee(t,t.ins_h,t.window[n+1]);t.insert&&(t.ins_h=ee(t,t.ins_h,t.window[n+3-1]),t.prev[n&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=n,n++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<262&&0!==t.strm.avail_in)},el=(t,e)=>{let i=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,r,s,a=0,o=t.strm.avail_in;do{if(n=65535,s=t.bi_valid+42>>3,t.strm.avail_out(r=t.strstart-t.block_start)+t.strm.avail_in&&(n=r+t.strm.avail_in),n>s&&(n=s),n>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,ei(t.strm),r&&(r>n&&(r=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+r),t.strm.next_out),t.strm.next_out+=r,t.strm.avail_out-=r,t.strm.total_out+=r,t.block_start+=r,n-=r),n&&(ea(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(0===a)return((o-=t.strm.avail_in)&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_waters&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(ea(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water>3,i=(s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s)>t.w_size?t.w_size:s,((r=t.strstart-t.block_start)>=i||(r||e===tG)&&e!==tq&&0===t.strm.avail_in&&r<=s)&&(n=r>s?s:r,a=e===tG&&0===t.strm.avail_in&&n===r?1:0,tF(t,t.block_start,n,a),t.block_start+=n,ei(t.strm)),a?3:1)},eu=(t,e)=>{let i,n;for(;;){if(t.lookahead<262){if(eh(t),t.lookahead<262&&e===tq)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-262&&(t.match_length=eo(t,i)),t.match_length>=3){if(n=tj(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do t.strstart++,t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(0!=--t.match_length)t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=ee(t,t.ins_h,t.window[t.strstart+1])}else n=tj(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(en(t,!1),0===t.strm.avail_out))return 1}return(t.insert=t.strstart<2?t.strstart:2,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2},ec=(t,e)=>{let i,n,r;for(;;){if(t.lookahead<262){if(eh(t),t.lookahead<262&&e===tq)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==i&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,n=tj(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=r&&(t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(0!=--t.prev_length)if(t.match_available=0,t.match_length=2,t.strstart++,n&&(en(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if((n=tj(t,0,t.window[t.strstart-1]))&&en(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return(t.match_available&&(n=tj(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2},ed=(t,e)=>{let i,n,r,s;let a=t.window;for(;;){if(t.lookahead<=258){if(eh(t),t.lookahead<=258&&e===tq)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=a[r=t.strstart-1])===a[++r]&&n===a[++r]&&n===a[++r]){s=t.strstart+258;do;while(n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=tj(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=tj(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(en(t,!1),0===t.strm.avail_out))return 1}return(t.insert=0,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2},ep=(t,e)=>{let i;for(;;){if(0===t.lookahead&&(eh(t),0===t.lookahead)){if(e===tq)return 1;break}if(t.match_length=0,i=tj(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(en(t,!1),0===t.strm.avail_out))return 1}return(t.insert=0,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2};function ef(t,e,i,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=n,this.func=r}const eg=[new ef(0,0,0,0,el),new ef(4,4,8,4,eu),new ef(4,5,16,8,eu),new ef(4,6,32,32,eu),new ef(4,4,16,16,ec),new ef(8,16,32,32,ec),new ef(8,16,128,128,ec),new ef(8,32,128,256,ec),new ef(32,128,258,1024,ec),new ef(32,258,258,4096,ec)],em=t=>{t.window_size=2*t.w_size,t7(t.head),t.max_lazy_match=eg[t.level].max_lazy,t.good_match=eg[t.level].good_length,t.nice_match=eg[t.level].nice_length,t.max_chain_length=eg[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=2,t.match_available=0,t.ins_h=0};function e_(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=t4,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),t7(this.dyn_ltree),t7(this.dyn_dtree),t7(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),t7(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),t7(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ev=t=>{if(!t)return 1;let e=t.state;return e&&e.strm===t&&(42===e.status||57===e.status||69===e.status||73===e.status||91===e.status||103===e.status||113===e.status||666===e.status)?0:1},ey=t=>{if(ev(t))return t9(t,tY);t.total_in=t.total_out=0,t.data_type=t6;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?42:113,t.adler=2===e.wrap?0:1,e.last_flush=-2,tD(e),tK},eb=t=>{let e=ey(t);return e===tK&&em(t.state),e},ex=(t,e,i,n,r,s)=>{if(!t)return tY;let a=1;if(e===tJ&&(e=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),r<1||r>9||i!==t4||n<8||n>15||e<0||e>9||s<0||s>t5||8===n&&1!==a)return t9(t,tY);8===n&&(n=9);let o=new e_;return t.state=o,o.strm=t,o.status=42,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<ex(t,e,t4,15,8,t3),deflateInit2:ex,deflateReset:eb,deflateResetKeep:ey,deflateSetHeader:(t,e)=>ev(t)||2!==t.state.wrap?tY:(t.state.gzhead=e,tK),deflate:(t,e)=>{if(ev(t)||e>tW||e<0)return t?t9(t,tY):tY;let i=t.state;if(!t.output||0!==t.avail_in&&!t.input||666===i.status&&e!==tG)return t9(t,0===t.avail_out?tX:tY);let n=i.last_flush;if(i.last_flush=e,0!==i.pending){if(ei(t),0===t.avail_out)return i.last_flush=-1,tK}else if(0===t.avail_in&&t8(e)<=t8(n)&&e!==tG)return t9(t,tX);if(666===i.status&&0!==t.avail_in)return t9(t,tX);if(42===i.status&&0===i.wrap&&(i.status=113),42===i.status){let e=t4+(i.w_bits-8<<4)<<8;if(e|=(i.strategy>=t1||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(e|=32),es(i,e+=31-e%31),0!==i.strstart&&(es(i,t.adler>>>16),es(i,65535&t.adler)),t.adler=1,i.status=113,ei(t),0!==i.pending)return i.last_flush=-1,tK}if(57===i.status){if(t.adler=0,er(i,31),er(i,139),er(i,8),i.gzhead)er(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),er(i,255&i.gzhead.time),er(i,i.gzhead.time>>8&255),er(i,i.gzhead.time>>16&255),er(i,i.gzhead.time>>24&255),er(i,9===i.level?2:i.strategy>=t1||i.level<2?4:0),er(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(er(i,255&i.gzhead.extra.length),er(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=tz(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(er(i,0),er(i,0),er(i,0),er(i,0),er(i,0),er(i,9===i.level?2:i.strategy>=t1||i.level<2?4:0),er(i,3),i.status=113,ei(t),0!==i.pending)return i.last_flush=-1,tK}if(69===i.status){if(i.gzhead.extra){let e=i.pending,n=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+n>i.pending_buf_size;){let r=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+r),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=tz(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=r,ei(t),0!==i.pending)return i.last_flush=-1,tK;e=0,n-=r}let r=new Uint8Array(i.gzhead.extra);i.pending_buf.set(r.subarray(i.gzindex,i.gzindex+n),i.pending),i.pending+=n,i.gzhead.hcrc&&i.pending>e&&(t.adler=tz(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n)),ei(t),0!==i.pending)return i.last_flush=-1,tK;n=0}e=i.gzindexn&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n)),ei(t),0!==i.pending)return i.last_flush=-1,tK;n=0}e=i.gzindexn&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(ei(t),0!==i.pending))return i.last_flush=-1,tK;er(i,255&t.adler),er(i,t.adler>>8&255),t.adler=0}if(i.status=113,ei(t),0!==i.pending)return i.last_flush=-1,tK}if(0!==t.avail_in||0!==i.lookahead||e!==tq&&666!==i.status){let n=0===i.level?el(i,e):i.strategy===t1?ep(i,e):i.strategy===t2?ed(i,e):eg[i.level].func(i,e);if((3===n||4===n)&&(i.status=666),1===n||3===n)return 0===t.avail_out&&(i.last_flush=-1),tK;if(2===n&&(e===tZ?tU(i):e!==tW&&(tF(i,0,0,!1),e===tH&&(t7(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ei(t),0===t.avail_out))return i.last_flush=-1,tK}return e!==tG?tK:i.wrap<=0?t$:(2===i.wrap?(er(i,255&t.adler),er(i,t.adler>>8&255),er(i,t.adler>>16&255),er(i,t.adler>>24&255),er(i,255&t.total_in),er(i,t.total_in>>8&255),er(i,t.total_in>>16&255),er(i,t.total_in>>24&255)):(es(i,t.adler>>>16),es(i,65535&t.adler)),ei(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?tK:t$)},deflateEnd:t=>{if(ev(t))return tY;let e=t.state.status;return t.state=null,113===e?t9(t,tQ):tK},deflateSetDictionary:(t,e)=>{let i=e.length;if(ev(t))return tY;let n=t.state,r=n.wrap;if(2===r||1===r&&42!==n.status||n.lookahead)return tY;if(1===r&&(t.adler=tL(t.adler,e,i,0)),n.wrap=0,i>=n.w_size){0===r&&(t7(n.head),n.strstart=0,n.block_start=0,n.insert=0);let t=new Uint8Array(n.w_size);t.set(e.subarray(i-n.w_size,i),0),e=t,i=n.w_size}let s=t.avail_in,a=t.next_in,o=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,eh(n);n.lookahead>=3;){let t=n.strstart,e=n.lookahead-2;do n.ins_h=ee(n,n.ins_h,n.window[t+3-1]),n.prev[t&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=t,t++;while(--e)n.strstart=t,n.lookahead=2,eh(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,t.next_in=a,t.input=o,t.avail_in=s,n.wrap=r,tK},deflateInfo:"pako deflate (from Nodeca project)"};const ek=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var eC={assign:function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let i=e.shift();if(i){if("object"!=typeof i)throw TypeError(i+"must be non-object");for(let e in i)ek(i,e)&&(t[e]=i[e])}}return t},flattenChunks:t=>{let e=0;for(let i=0,n=t.length;i=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;eI[254]=eI[254]=1;const eT=(t,e)=>{if(e<65534&&t.subarray&&eS)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let i="";for(let n=0;n{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,i,n,r,s,a=t.length,o=0;for(r=0;r>>6:(i<65536?e[s++]=224|i>>>12:(e[s++]=240|i>>>18,e[s++]=128|i>>>12&63),e[s++]=128|i>>>6&63),e[s++]=128|63&i);return e},buf2string:(t,e)=>{let i,n;let r=e||t.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let s=Array(2*r);for(n=0,i=0;i4){s[n++]=65533,i+=a-1;continue}for(e&=2===a?31:3===a?15:7;a>1&&i1){s[n++]=65533;continue}e<65536?s[n++]=e:(e-=65536,s[n++]=55296|e>>10&1023,s[n++]=56320|1023&e)}return eT(s,n)},utf8border:(t,e)=>{(e=e||t.length)>t.length&&(e=t.length);let i=e-1;for(;i>=0&&(192&t[i])==128;)i--;return i<0||0===i?e:i+eI[t[i]]>e?i:e}},eA=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const eP=Object.prototype.toString,{Z_NO_FLUSH:eM,Z_SYNC_FLUSH:eO,Z_FULL_FLUSH:eL,Z_FINISH:eN,Z_OK:ez,Z_STREAM_END:eR,Z_DEFAULT_COMPRESSION:eB,Z_DEFAULT_STRATEGY:eD,Z_DEFLATED:eF}=tB;function eV(t){this.options=eC.assign({level:eB,method:eF,chunkSize:16384,windowBits:15,memLevel:8,strategy:eD},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new eA,this.strm.avail_out=0;let i=ew.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==ez)throw Error(tR[i]);if(e.header&&ew.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?eE.string2buf(e.dictionary):"[object ArrayBuffer]"===eP.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(i=ew.deflateSetDictionary(this.strm,t))!==ez)throw Error(tR[i]);this._dict_set=!0}}function ej(t,e){let i=new eV(e);if(i.push(t,!0),i.err)throw i.msg||tR[i.err];return i.result}eV.prototype.push=function(t,e){let i,n;let r=this.strm,s=this.options.chunkSize;if(this.ended)return!1;for(n=e===~~e?e:!0===e?eN:eM,"string"==typeof t?r.input=eE.string2buf(t):"[object ArrayBuffer]"===eP.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){if(0===r.avail_out&&(r.output=new Uint8Array(s),r.next_out=0,r.avail_out=s),(n===eO||n===eL)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if((i=ew.deflate(r,n))===eR)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=ew.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===ez;if(0===r.avail_out){this.onData(r.output);continue}if(n>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(0===r.avail_in)break}return!0},eV.prototype.onData=function(t){this.chunks.push(t)},eV.prototype.onEnd=function(t){t===ez&&(this.result=eC.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var eU=function(t,e){let i,n,r,s,a,o,h,l,u,c,d,p,f,g,m,_,v,y,b,x,w,k,C,S;let I=t.state;i=t.next_in,C=t.input,n=i+(t.avail_in-5),r=t.next_out,S=t.output,s=r-(e-t.avail_out),a=r+(t.avail_out-257),o=I.dmax,h=I.wsize,l=I.whave,u=I.wnext,c=I.window,d=I.hold,p=I.bits,f=I.lencode,g=I.distcode,m=(1<>>=y=v>>>24,p-=y,0==(y=v>>>16&255))S[r++]=65535&v;else if(16&y)for(b=65535&v,(y&=15)&&(p>>=y,p-=y),p<15&&(d+=C[i++]<>>=y=v>>>24,p-=y,16&(y=v>>>16&255)){if(x=65535&v,p<(y&=15)&&(d+=C[i++]<o){t.msg="invalid distance too far back",I.mode=16209;break i}if(d>>>=y,p-=y,x>(y=r-s)){if((y=x-y)>l&&I.sane){t.msg="invalid distance too far back",I.mode=16209;break i}if(w=0,k=c,0===u){if(w+=h-y,y2;)S[r++]=k[w++],S[r++]=k[w++],S[r++]=k[w++],b-=3;b&&(S[r++]=k[w++],b>1&&(S[r++]=k[w++]))}else{w=r-x;do S[r++]=S[w++],S[r++]=S[w++],S[r++]=S[w++],b-=3;while(b>2)b&&(S[r++]=S[w++],b>1&&(S[r++]=S[w++]))}}else if((64&y)==0){v=g[(65535&v)+(d&(1<>3,p-=b<<3,d&=(1<{let h,l,u,c,d,p,f,g,m;let _=o.bits,v=0,y=0,b=0,x=0,w=0,k=0,C=0,S=0,I=0,T=0,E=null,A=new Uint16Array(16),P=new Uint16Array(16),M=null;for(v=0;v<=15;v++)A[v]=0;for(y=0;y=1&&0===A[x];x--);if(w>x&&(w=x),0===x)return r[s++]=20971520,r[s++]=20971520,o.bits=1,0;for(b=1;b0&&(0===t||1!==x))return -1;for(v=1,P[1]=0;v<15;v++)P[v+1]=P[v]+A[v];for(y=0;y852||2===t&&I>592)return 1;for(;;){f=v-C,a[y]+1=p?(g=M[a[y]-p],m=E[a[y]-p]):(g=96,m=0),h=1<>C)+(l-=h)]=f<<24|g<<16|m|0;while(0!==l)for(h=1<>=1;if(0!==h?(T&=h-1,T+=h):T=0,y++,0==--A[v]){if(v===x)break;v=e[i+a[y]]}if(v>w&&(T&c)!==u){for(0===C&&(C=w),d+=b,S=1<<(k=v-C);k+C852||2===t&&I>592)return 1;r[u=T&c]=w<<24|k<<16|d-s|0}}return 0!==T&&(r[d+T]=v-C<<24|4194304),o.bits=w,0};const{Z_FINISH:eK,Z_BLOCK:e$,Z_TREES:eY,Z_OK:eQ,Z_STREAM_END:eX,Z_NEED_DICT:eJ,Z_STREAM_ERROR:e0,Z_DATA_ERROR:e1,Z_MEM_ERROR:e2,Z_BUF_ERROR:e5,Z_DEFLATED:e3}=tB,e6=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function e4(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const e9=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<16180||e.mode>16211?1:0},e8=t=>{if(e9(t))return e0;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=16180,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,eQ},e7=t=>{if(e9(t))return e0;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,e8(t)},it=(t,e)=>{let i;if(e9(t))return e0;let n=t.state;return(e<0?(i=0,e=-e):(i=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15))?e0:(null!==n.window&&n.wbits!==e&&(n.window=null),n.wrap=i,n.wbits=e,e7(t))},ie=(t,e)=>{if(!t)return e0;let i=new e4;t.state=i,i.strm=t,i.window=null,i.mode=16180;let n=it(t,e);return n!==eQ&&(t.state=null),n};let ii=!0;const ir=t=>{if(ii){n=new Int32Array(512),r=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(eW(1,t.lens,0,288,n,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;eW(2,t.lens,0,32,r,0,t.work,{bits:5}),ii=!1}t.lencode=n,t.lenbits=9,t.distcode=r,t.distbits=5},is=(t,e,i,n)=>{let r;let s=t.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(e.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>n&&(r=n),s.window.set(e.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(e.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whaveie(t,15),inflateInit2:ie,inflate:(t,e)=>{let i,n,r,s,a,o,h,l,u,c,d,p,f,g,m,_,v,y,b,x,w,k,C,S;let I=0,T=new Uint8Array(4),E=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(e9(t)||!t.output||!t.input&&0!==t.avail_in)return e0;16191===(i=t.state).mode&&(i.mode=16192),a=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=i.hold,u=i.bits,c=o,d=h,k=eQ;n:for(;;)switch(i.mode){case 16180:if(0===i.wrap){i.mode=16192;break}for(;u<16;){if(0===o)break n;o--,l+=n[s++]<>>8&255,i.check=tz(i.check,T,2,0),l=0,u=0,i.mode=16181;break}if(i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg="incorrect header check",i.mode=16209;break}if((15&l)!==e3){t.msg="unknown compression method",i.mode=16209;break}if(l>>>=4,u-=4,w=(15&l)+8,0===i.wbits&&(i.wbits=w),w>15||w>i.wbits){t.msg="invalid window size",i.mode=16209;break}i.dmax=1<>8&1),512&i.flags&&4&i.wrap&&(T[0]=255&l,T[1]=l>>>8&255,i.check=tz(i.check,T,2,0)),l=0,u=0,i.mode=16182;case 16182:for(;u<32;){if(0===o)break n;o--,l+=n[s++]<>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,i.check=tz(i.check,T,4,0)),l=0,u=0,i.mode=16183;case 16183:for(;u<16;){if(0===o)break n;o--,l+=n[s++]<>8),512&i.flags&&4&i.wrap&&(T[0]=255&l,T[1]=l>>>8&255,i.check=tz(i.check,T,2,0)),l=0,u=0,i.mode=16184;case 16184:if(1024&i.flags){for(;u<16;){if(0===o)break n;o--,l+=n[s++]<>>8&255,i.check=tz(i.check,T,2,0)),l=0,u=0}else i.head&&(i.head.extra=null);i.mode=16185;case 16185:if(1024&i.flags&&((p=i.length)>o&&(p=o),p&&(i.head&&(w=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+p),w)),512&i.flags&&4&i.wrap&&(i.check=tz(i.check,n,p,s)),o-=p,s+=p,i.length-=p),i.length))break n;i.length=0,i.mode=16186;case 16186:if(2048&i.flags){if(0===o)break n;p=0;do w=n[s+p++],i.head&&w&&i.length<65536&&(i.head.name+=String.fromCharCode(w));while(w&&p>9&1,i.head.done=!0),t.adler=i.check=0,i.mode=16191;break;case 16189:for(;u<32;){if(0===o)break n;o--,l+=n[s++]<>>=7&u,u-=7&u,i.mode=16206;break}for(;u<3;){if(0===o)break n;o--,l+=n[s++]<>>=1)){case 0:i.mode=16193;break;case 1:if(ir(i),i.mode=16199,e===eY){l>>>=2,u-=2;break n}break;case 2:i.mode=16196;break;case 3:t.msg="invalid block type",i.mode=16209}l>>>=2,u-=2;break;case 16193:for(l>>>=7&u,u-=7&u;u<32;){if(0===o)break n;o--,l+=n[s++]<>>16^65535)){t.msg="invalid stored block lengths",i.mode=16209;break}if(i.length=65535&l,l=0,u=0,i.mode=16194,e===eY)break n;case 16194:i.mode=16195;case 16195:if(p=i.length){if(p>o&&(p=o),p>h&&(p=h),0===p)break n;r.set(n.subarray(s,s+p),a),o-=p,s+=p,h-=p,a+=p,i.length-=p;break}i.mode=16191;break;case 16196:for(;u<14;){if(0===o)break n;o--,l+=n[s++]<>>=5,u-=5,i.ndist=(31&l)+1,l>>>=5,u-=5,i.ncode=(15&l)+4,l>>>=4,u-=4,i.nlen>286||i.ndist>30){t.msg="too many length or distance symbols",i.mode=16209;break}i.have=0,i.mode=16197;case 16197:for(;i.have>>=3,u-=3}for(;i.have<19;)i.lens[E[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,C={bits:i.lenbits},k=eW(0,i.lens,0,19,i.lencode,0,i.work,C),i.lenbits=C.bits,k){t.msg="invalid code lengths set",i.mode=16209;break}i.have=0,i.mode=16198;case 16198:for(;i.have>>24,_=I>>>16&255,v=65535&I,!(m<=u);){if(0===o)break n;o--,l+=n[s++]<>>=m,u-=m,i.lens[i.have++]=v;else{if(16===v){for(S=m+2;u>>=m,u-=m,0===i.have){t.msg="invalid bit length repeat",i.mode=16209;break}w=i.lens[i.have-1],p=3+(3&l),l>>>=2,u-=2}else if(17===v){for(S=m+3;u>>=m,u-=m,w=0,p=3+(7&l),l>>>=3,u-=3}else{for(S=m+7;u>>=m,u-=m,w=0,p=11+(127&l),l>>>=7,u-=7}if(i.have+p>i.nlen+i.ndist){t.msg="invalid bit length repeat",i.mode=16209;break}for(;p--;)i.lens[i.have++]=w}}if(16209===i.mode)break;if(0===i.lens[256]){t.msg="invalid code -- missing end-of-block",i.mode=16209;break}if(i.lenbits=9,C={bits:i.lenbits},k=eW(1,i.lens,0,i.nlen,i.lencode,0,i.work,C),i.lenbits=C.bits,k){t.msg="invalid literal/lengths set",i.mode=16209;break}if(i.distbits=6,i.distcode=i.distdyn,C={bits:i.distbits},k=eW(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,C),i.distbits=C.bits,k){t.msg="invalid distances set",i.mode=16209;break}if(i.mode=16199,e===eY)break n;case 16199:i.mode=16200;case 16200:if(o>=6&&h>=258){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,i.hold=l,i.bits=u,eU(t,d),a=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=i.hold,u=i.bits,16191===i.mode&&(i.back=-1);break}for(i.back=0;m=(I=i.lencode[l&(1<>>24,_=I>>>16&255,v=65535&I,!(m<=u);){if(0===o)break n;o--,l+=n[s++]<>y)])>>>24,_=I>>>16&255,v=65535&I,!(y+m<=u);){if(0===o)break n;o--,l+=n[s++]<>>=y,u-=y,i.back+=y}if(l>>>=m,u-=m,i.back+=m,i.length=v,0===_){i.mode=16205;break}if(32&_){i.back=-1,i.mode=16191;break}if(64&_){t.msg="invalid literal/length code",i.mode=16209;break}i.extra=15&_,i.mode=16201;case 16201:if(i.extra){for(S=i.extra;u>>=i.extra,u-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=16202;case 16202:for(;m=(I=i.distcode[l&(1<>>24,_=I>>>16&255,v=65535&I,!(m<=u);){if(0===o)break n;o--,l+=n[s++]<>y)])>>>24,_=I>>>16&255,v=65535&I,!(y+m<=u);){if(0===o)break n;o--,l+=n[s++]<>>=y,u-=y,i.back+=y}if(l>>>=m,u-=m,i.back+=m,64&_){t.msg="invalid distance code",i.mode=16209;break}i.offset=v,i.extra=15&_,i.mode=16203;case 16203:if(i.extra){for(S=i.extra;u>>=i.extra,u-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){t.msg="invalid distance too far back",i.mode=16209;break}i.mode=16204;case 16204:if(0===h)break n;if(p=d-h,i.offset>p){if((p=i.offset-p)>i.whave&&i.sane){t.msg="invalid distance too far back",i.mode=16209;break}p>i.wnext?(p-=i.wnext,f=i.wsize-p):f=i.wnext-p,p>i.length&&(p=i.length),g=i.window}else g=r,f=a-i.offset,p=i.length;p>h&&(p=h),h-=p,i.length-=p;do r[a++]=g[f++];while(--p)0===i.length&&(i.mode=16200);break;case 16205:if(0===h)break n;r[a++]=i.length,h--,i.mode=16200;break;case 16206:if(i.wrap){for(;u<32;){if(0===o)break n;o--,l|=n[s++]<{if(e9(t))return e0;let e=t.state;return e.window&&(e.window=null),t.state=null,eQ},inflateGetHeader:(t,e)=>{if(e9(t))return e0;let i=t.state;return(2&i.wrap)==0?e0:(i.head=e,e.done=!1,eQ)},inflateSetDictionary:(t,e)=>{let i;let n=e.length;return e9(t)||0!==(i=t.state).wrap&&16190!==i.mode?e0:16190===i.mode&&tL(1,e,n,0)!==i.check?e1:is(t,e,n,n)?(i.mode=16210,e2):(i.havedict=1,eQ)},inflateInfo:"pako inflate (from Nodeca project)"},io=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const ih=Object.prototype.toString,{Z_NO_FLUSH:il,Z_FINISH:iu,Z_OK:ic,Z_STREAM_END:id,Z_NEED_DICT:ip,Z_STREAM_ERROR:ig,Z_DATA_ERROR:im,Z_MEM_ERROR:i_}=tB;function iv(t){this.options=eC.assign({chunkSize:65536,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(15&e.windowBits)==0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new eA,this.strm.avail_out=0;let i=ia.inflateInit2(this.strm,e.windowBits);if(i!==ic||(this.header=new io,ia.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=eE.string2buf(e.dictionary):"[object ArrayBuffer]"===ih.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(i=ia.inflateSetDictionary(this.strm,e.dictionary))!==ic)))throw Error(tR[i])}function iy(t,e){let i=new iv(e);if(i.push(t),i.err)throw i.msg||tR[i.err];return i.result}iv.prototype.push=function(t,e){let i,n,r;let s=this.strm,a=this.options.chunkSize,o=this.options.dictionary;if(this.ended)return!1;for(n=e===~~e?e:!0===e?iu:il,"[object ArrayBuffer]"===ih.call(t)?s.input=new Uint8Array(t):s.input=t,s.next_in=0,s.avail_in=s.input.length;;){for(0===s.avail_out&&(s.output=new Uint8Array(a),s.next_out=0,s.avail_out=a),(i=ia.inflate(s,n))===ip&&o&&((i=ia.inflateSetDictionary(s,o))===ic?i=ia.inflate(s,n):i===im&&(i=ip));s.avail_in>0&&i===id&&s.state.wrap>0&&0!==t[s.next_in];)ia.inflateReset(s),i=ia.inflate(s,n);switch(i){case ig:case im:case ip:case i_:return this.onEnd(i),this.ended=!0,!1}if(r=s.avail_out,s.next_out&&(0===s.avail_out||i===id)){if("string"===this.options.to){let t=eE.utf8border(s.output,s.next_out),e=s.next_out-t,i=eE.buf2string(s.output,t);s.next_out=e,s.avail_out=a-e,e&&s.output.set(s.output.subarray(t,t+e),0),this.onData(i)}else this.onData(s.output.length===s.next_out?s.output:s.output.subarray(0,s.next_out))}if(i!==ic||0!==r){if(i===id)return i=ia.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===s.avail_in)break}}return!0},iv.prototype.onData=function(t){this.chunks.push(t)},iv.prototype.onEnd=function(t){t===ic&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=eC.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};const{Deflate:ib,deflate:ix,deflateRaw:iw,gzip:ik}={Deflate:eV,deflate:ej,deflateRaw:function(t,e){return(e=e||{}).raw=!0,ej(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,ej(t,e)},constants:tB},{Inflate:iC,inflate:iS,inflateRaw:iI,ungzip:iT}={Inflate:iv,inflate:iy,inflateRaw:function(t,e){return(e=e||{}).raw=!0,iy(t,e)},ungzip:iy,constants:tB};var iE={Deflate:ib,deflate:ix,deflateRaw:iw,gzip:ik,Inflate:iC,inflate:iS,inflateRaw:iI,ungzip:iT,constants:tB},iA={};iA=function(){for(var t=function(t,e,i){return void 0===e&&(e=0),void 0===i&&(i=1),ti?i:t},e={},i=0,n=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];i255)&&(e._clipped=!0),e[i]=t(e[i],0,255)):3===i&&(e[i]=t(e[i],0,1));return e},limit:t,type:s,unpack:function(t,e){return(void 0===e&&(e=null),t.length>=3)?Array.prototype.slice.call(t):"object"==s(t[0])&&e?e.split("").filter(function(e){return void 0!==t[0][e]}).map(function(e){return t[0][e]}):t[0]},last:function(t){if(t.length<2)return null;var e=t.length-1;return"string"==s(t[e])?t[e].toLowerCase():null},TWOPI:2*a,PITHIRD:a/3,DEG2RAD:a/180,RAD2DEG:180/a},h={format:{},autodetect:[]},l=o.last,u=o.clip_rgb,c=o.type,d=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("object"===c(t[0])&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];var i=l(t),n=!1;if(!i){n=!0,h.sorted||(h.autodetect=h.autodetect.sort(function(t,e){return e.p-t.p}),h.sorted=!0);for(var r=0,s=h.autodetect;r4?t[4]:1;return 1===s?[0,0,0,a]:[i>=1?0:255*(1-i)*(1-s),n>=1?0:255*(1-n)*(1-s),r>=1?0:255*(1-r)*(1-s),a]},h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===v(t=_(t,"cmyk"))&&4===t.length)return"cmyk"}});var b=o.unpack,x=o.last,w=function(t){return Math.round(100*t)/100},k=o.unpack,C=function(){for(var t,e,i=[],n=arguments.length;n--;)i[n]=arguments[n];var r=(i=k(i,"rgba"))[0],s=i[1],a=i[2],o=Math.min(r/=255,s/=255,a/=255),h=Math.max(r,s,a),l=(h+o)/2;return(h===o?(t=0,e=Number.NaN):t=l<.5?(h-o)/(h+o):(h-o)/(2-h-o),r==h?e=(s-a)/(h-o):s==h?e=2+(a-r)/(h-o):a==h&&(e=4+(r-s)/(h-o)),(e*=60)<0&&(e+=360),i.length>3&&void 0!==i[3])?[e,t,l,i[3]]:[e,t,l]},S=o.unpack,I=o.last,T=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=b(t,"hsla"),n=x(t)||"lsa";return i[0]=w(i[0]||0),i[1]=w(100*i[1])+"%",i[2]=w(100*i[2])+"%","hsla"===n||i.length>3&&i[3]<1?(i[3]=i.length>3?i[3]:1,n="hsla"):i.length=3,n+"("+i.join(",")+")"},E=Math.round,A=o.unpack,P=Math.round,M=function(){for(var t,e,i,n,r=[],s=arguments.length;s--;)r[s]=arguments[s];var a=(r=A(r,"hsl"))[0],o=r[1],h=r[2];if(0===o)e=i=n=255*h;else{var l=[0,0,0],u=[0,0,0],c=h<.5?h*(1+o):h+o-h*o,d=2*h-c,p=a/360;l[0]=p+1/3,l[1]=p,l[2]=p-1/3;for(var f=0;f<3;f++)l[f]<0&&(l[f]+=1),l[f]>1&&(l[f]-=1),6*l[f]<1?u[f]=d+(c-d)*6*l[f]:2*l[f]<1?u[f]=c:3*l[f]<2?u[f]=d+(c-d)*(2/3-l[f])*6:u[f]=d;e=(t=[P(255*u[0]),P(255*u[1]),P(255*u[2])])[0],i=t[1],n=t[2]}return r.length>3?[e,i,n,r[3]]:[e,i,n,1]},O=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,L=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,N=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,R=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,B=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,D=Math.round,F=function(t){if(t=t.toLowerCase().trim(),h.format.named)try{return h.format.named(t)}catch(t){}if(e=t.match(O)){for(var e,i=e.slice(1,4),n=0;n<3;n++)i[n]=+i[n];return i[3]=1,i}if(e=t.match(L)){for(var r=e.slice(1,5),s=0;s<4;s++)r[s]=+r[s];return r}if(e=t.match(N)){for(var a=e.slice(1,4),o=0;o<3;o++)a[o]=D(2.55*a[o]);return a[3]=1,a}if(e=t.match(z)){for(var l=e.slice(1,5),u=0;u<3;u++)l[u]=D(2.55*l[u]);return l[3]=+l[3],l}if(e=t.match(R)){var c=e.slice(1,4);c[1]*=.01,c[2]*=.01;var d=M(c);return d[3]=1,d}if(e=t.match(B)){var p=e.slice(1,4);p[1]*=.01,p[2]*=.01;var f=M(p);return f[3]=+e[4],f}};F.test=function(t){return O.test(t)||L.test(t)||N.test(t)||z.test(t)||R.test(t)||B.test(t)};var V=o.type,j=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=S(t,"rgba"),n=I(t)||"rgb";return"hsl"==n.substr(0,3)?T(C(i),n):(i[0]=E(i[0]),i[1]=E(i[1]),i[2]=E(i[2]),("rgba"===n||i.length>3&&i[3]<1)&&(i[3]=i.length>3?i[3]:1,n="rgba"),n+"("+i.slice(0,"rgb"===n?3:4).join(",")+")")};d.prototype.css=function(t){return j(this._rgb,t)},p.css=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["css"])))},h.format.css=F,h.autodetect.push({p:5,test:function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];if(!e.length&&"string"===V(t)&&F.test(t))return"css"}});var U=o.unpack;h.format.gl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=U(t,"rgba");return i[0]*=255,i[1]*=255,i[2]*=255,i},p.gl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["gl"])))},d.prototype.gl=function(){var t=this._rgb;return[t[0]/255,t[1]/255,t[2]/255,t[3]]};var q=o.unpack,Z=o.unpack,H=Math.floor,G=o.unpack,W=o.type,K=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];var n=q(e,"rgb"),r=n[0],s=n[1],a=n[2],o=Math.min(r,s,a),h=Math.max(r,s,a),l=h-o;return 0===l?t=Number.NaN:(r===h&&(t=(s-a)/l),s===h&&(t=2+(a-r)/l),a===h&&(t=4+(r-s)/l),(t*=60)<0&&(t+=360)),[t,100*l/255,o/(255-l)*100]};d.prototype.hcg=function(){return K(this._rgb)},p.hcg=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hcg"])))},h.format.hcg=function(){for(var t,e,i,n,r,s,a,o,h,l=[],u=arguments.length;u--;)l[u]=arguments[u];var c=(l=Z(l,"hcg"))[0],d=l[1],p=l[2];p*=255;var f=255*d;if(0===d)a=o=h=p;else{360===c&&(c=0),c>360&&(c-=360),c<0&&(c+=360);var g=H(c/=60),m=c-g,_=p*(1-d),v=_+f*(1-m),y=_+f*m,b=_+f;switch(g){case 0:a=(t=[b,y,_])[0],o=t[1],h=t[2];break;case 1:a=(e=[v,b,_])[0],o=e[1],h=e[2];break;case 2:a=(i=[_,b,y])[0],o=i[1],h=i[2];break;case 3:a=(n=[_,v,b])[0],o=n[1],h=n[2];break;case 4:a=(r=[y,_,b])[0],o=r[1],h=r[2];break;case 5:a=(s=[b,_,v])[0],o=s[1],h=s[2]}}return[a,o,h,l.length>3?l[3]:1]},h.autodetect.push({p:1,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===W(t=G(t,"hcg"))&&3===t.length)return"hcg"}});var $=o.unpack,Y=o.last,Q=Math.round,X=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=$(t,"rgba"),n=i[0],r=i[1],s=i[2],a=i[3],o=Y(t)||"auto";void 0===a&&(a=1),"auto"===o&&(o=a<1?"rgba":"rgb");var h="000000"+((n=Q(n))<<16|(r=Q(r))<<8|(s=Q(s))).toString(16);h=h.substr(h.length-6);var l="0"+Q(255*a).toString(16);switch(l=l.substr(l.length-2),o.toLowerCase()){case"rgba":return"#"+h+l;case"argb":return"#"+l+h;default:return"#"+h}},J=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,tt=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,te=function(t){if(t.match(J)){(4===t.length||7===t.length)&&(t=t.substr(1)),3===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]);var e=parseInt(t,16);return[e>>16,e>>8&255,255&e,1]}if(t.match(tt)){(5===t.length||9===t.length)&&(t=t.substr(1)),4===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);var i=parseInt(t,16),n=Math.round((255&i)/255*100)/100;return[i>>24&255,i>>16&255,i>>8&255,n]}throw Error("unknown hex color: "+t)},ti=o.type;d.prototype.hex=function(t){return X(this._rgb,t)},p.hex=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hex"])))},h.format.hex=te,h.autodetect.push({p:4,test:function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];if(!e.length&&"string"===ti(t)&&[3,4,5,6,7,8,9].indexOf(t.length)>=0)return"hex"}});var tn=o.unpack,tr=o.TWOPI,ts=Math.min,ta=Math.sqrt,to=Math.acos,th=o.unpack,tl=o.limit,tu=o.TWOPI,tc=o.PITHIRD,td=Math.cos,tp=o.unpack,tf=o.type,tg=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];var n=tn(e,"rgb"),r=n[0],s=n[1],a=n[2],o=ts(r/=255,s/=255,a/=255),h=(r+s+a)/3,l=h>0?1-o/h:0;return 0===l?t=NaN:(t=to(t=(r-s+(r-a))/2/ta((r-s)*(r-s)+(r-a)*(s-a))),a>s&&(t=tr-t),t/=tr),[360*t,l,h]};d.prototype.hsi=function(){return tg(this._rgb)},p.hsi=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hsi"])))},h.format.hsi=function(){for(var t,e,i,n=[],r=arguments.length;r--;)n[r]=arguments[r];var s=(n=th(n,"hsi"))[0],a=n[1],o=n[2];return isNaN(s)&&(s=0),isNaN(a)&&(a=0),s>360&&(s-=360),s<0&&(s+=360),(s/=360)<1/3?e=1-((i=(1-a)/3)+(t=(1+a*td(tu*s)/td(tc-tu*s))/3)):s<2/3?(s-=1/3,i=1-((t=(1-a)/3)+(e=(1+a*td(tu*s)/td(tc-tu*s))/3))):(s-=2/3,t=1-((e=(1-a)/3)+(i=(1+a*td(tu*s)/td(tc-tu*s))/3))),[255*(t=tl(o*t*3)),255*(e=tl(o*e*3)),255*(i=tl(o*i*3)),n.length>3?n[3]:1]},h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===tf(t=tp(t,"hsi"))&&3===t.length)return"hsi"}});var tm=o.unpack,t_=o.type;d.prototype.hsl=function(){return C(this._rgb)},p.hsl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hsl"])))},h.format.hsl=M,h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===t_(t=tm(t,"hsl"))&&3===t.length)return"hsl"}});var tv=o.unpack,ty=Math.min,tb=Math.max,tx=o.unpack,tw=Math.floor,tk=o.unpack,tC=o.type,tS=function(){for(var t,e,i=[],n=arguments.length;n--;)i[n]=arguments[n];var r=(i=tv(i,"rgb"))[0],s=i[1],a=i[2],o=ty(r,s,a),h=tb(r,s,a),l=h-o;return 0===h?(t=Number.NaN,e=0):(e=l/h,r===h&&(t=(s-a)/l),s===h&&(t=2+(a-r)/l),a===h&&(t=4+(r-s)/l),(t*=60)<0&&(t+=360)),[t,e,h/255]};d.prototype.hsv=function(){return tS(this._rgb)},p.hsv=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hsv"])))},h.format.hsv=function(){for(var t,e,i,n,r,s,a,o,h,l=[],u=arguments.length;u--;)l[u]=arguments[u];var c=(l=tx(l,"hsv"))[0],d=l[1],p=l[2];if(p*=255,0===d)a=o=h=p;else{360===c&&(c=0),c>360&&(c-=360),c<0&&(c+=360);var f=tw(c/=60),g=c-f,m=p*(1-d),_=p*(1-d*g),v=p*(1-d*(1-g));switch(f){case 0:a=(t=[p,v,m])[0],o=t[1],h=t[2];break;case 1:a=(e=[_,p,m])[0],o=e[1],h=e[2];break;case 2:a=(i=[m,p,v])[0],o=i[1],h=i[2];break;case 3:a=(n=[m,_,p])[0],o=n[1],h=n[2];break;case 4:a=(r=[v,m,p])[0],o=r[1],h=r[2];break;case 5:a=(s=[p,m,_])[0],o=s[1],h=s[2]}}return[a,o,h,l.length>3?l[3]:1]},h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===tC(t=tk(t,"hsv"))&&3===t.length)return"hsv"}});var tI={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},tT=o.unpack,tE=Math.pow,tA=function(t){return(t/=255)<=.04045?t/12.92:tE((t+.055)/1.055,2.4)},tP=function(t){return t>tI.t3?tE(t,1/3):t/tI.t2+tI.t0},tM=function(){for(var t,e,i,n=[],r=arguments.length;r--;)n[r]=arguments[r];var s=tT(n,"rgb"),a=(t=s[0],e=s[1],i=s[2],[tP((.4124564*(t=tA(t))+.3575761*(e=tA(e))+.1804375*(i=tA(i)))/tI.Xn),tP((.2126729*t+.7151522*e+.072175*i)/tI.Yn),tP((.0193339*t+.119192*e+.9503041*i)/tI.Zn)]),o=a[0],h=a[1],l=a[2],u=116*h-16;return[u<0?0:u,500*(o-h),200*(h-l)]},tO=o.unpack,tL=Math.pow,tN=function(t){return 255*(t<=.00304?12.92*t:1.055*tL(t,1/2.4)-.055)},tz=function(t){return t>tI.t1?t*t*t:tI.t2*(t-tI.t0)},tR=function(){for(var t,e,i,n=[],r=arguments.length;r--;)n[r]=arguments[r];var s=(n=tO(n,"lab"))[0],a=n[1],o=n[2];return e=(s+16)/116,t=isNaN(a)?e:e+a/500,i=isNaN(o)?e:e-o/200,e=tI.Yn*tz(e),[tN(3.2404542*(t=tI.Xn*tz(t))-1.5371385*e-.4985314*(i=tI.Zn*tz(i))),tN(-.969266*t+1.8760108*e+.041556*i),tN(.0556434*t-.2040259*e+1.0572252*i),n.length>3?n[3]:1]},tB=o.unpack,tD=o.type;d.prototype.lab=function(){return tM(this._rgb)},p.lab=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["lab"])))},h.format.lab=tR,h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===tD(t=tB(t,"lab"))&&3===t.length)return"lab"}});var tF=o.unpack,tV=o.RAD2DEG,tj=Math.sqrt,tU=Math.atan2,tq=Math.round,tZ=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tF(t,"lab"),n=i[0],r=i[1],s=i[2],a=tj(r*r+s*s),o=(tU(s,r)*tV+360)%360;return 0===tq(1e4*a)&&(o=Number.NaN),[n,a,o]},tH=o.unpack,tG=o.unpack,tW=o.DEG2RAD,tK=Math.sin,t$=Math.cos,tY=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tG(t,"lch"),n=i[0],r=i[1],s=i[2];return isNaN(s)&&(s=0),[n,t$(s*=tW)*r,tK(s)*r]},tQ=o.unpack,tX=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tY((t=tQ(t,"lch"))[0],t[1],t[2]),n=tR(i[0],i[1],i[2]);return[n[0],n[1],n[2],t.length>3?t[3]:1]},tJ=o.unpack,t0=o.unpack,t1=o.type,t2=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tH(t,"rgb"),n=tM(i[0],i[1],i[2]);return tZ(n[0],n[1],n[2])};d.prototype.lch=function(){return t2(this._rgb)},d.prototype.hcl=function(){return t2(this._rgb).reverse()},p.lch=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["lch"])))},p.hcl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hcl"])))},h.format.lch=tX,h.format.hcl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tJ(t,"hcl").reverse();return tX.apply(void 0,i)},["lch","hcl"].forEach(function(t){return h.autodetect.push({p:2,test:function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];if("array"===t1(e=t0(e,t))&&3===e.length)return t}})});var t5={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},t3=o.type;d.prototype.name=function(){for(var t=X(this._rgb,"rgb"),e=0,i=Object.keys(t5);e0;)e[i]=arguments[i+1];if(!e.length&&"string"===t3(t)&&t5[t.toLowerCase()])return"named"}});var t6=o.unpack,t4=o.type,t9=o.type,t8=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=t6(t,"rgb");return(i[0]<<16)+(i[1]<<8)+i[2]};d.prototype.num=function(){return t8(this._rgb)},p.num=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["num"])))},h.format.num=function(t){if("number"==t4(t)&&t>=0&&t<=16777215)return[t>>16,t>>8&255,255&t,1];throw Error("unknown num color: "+t)},h.autodetect.push({p:5,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(1===t.length&&"number"===t9(t[0])&&t[0]>=0&&t[0]<=16777215)return"num"}});var t7=o.unpack,et=o.type,ee=Math.round;d.prototype.rgb=function(t){return(void 0===t&&(t=!0),!1===t)?this._rgb.slice(0,3):this._rgb.slice(0,3).map(ee)},d.prototype.rgba=function(t){return void 0===t&&(t=!0),this._rgb.slice(0,4).map(function(e,i){return i<3?!1===t?e:ee(e):e})},p.rgb=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["rgb"])))},h.format.rgb=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=t7(t,"rgba");return void 0===i[3]&&(i[3]=1),i},h.autodetect.push({p:3,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===et(t=t7(t,"rgba"))&&(3===t.length||4===t.length&&"number"==et(t[3])&&t[3]>=0&&t[3]<=1))return"rgb"}});var ei=Math.log,en=function(t){var e,i,n,r=t/100;return r<66?(e=255,i=r<6?0:-155.25485562709179-.44596950469579133*(i=r-2)+104.49216199393888*ei(i),n=r<20?0:-254.76935184120902+.8274096064007395*(n=r-10)+115.67994401066147*ei(n)):(e=351.97690566805693+.114206453784165*(e=r-55)-40.25366309332127*ei(e),i=325.4494125711974+.07943456536662342*(i=r-50)-28.0852963507957*ei(i),n=255),[e,i,n,1]},er=o.unpack,es=Math.round,ea=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];for(var n=er(e,"rgb"),r=n[0],s=n[2],a=1e3,o=4e4;o-a>.4;){var h=en(t=(o+a)*.5);h[2]/h[0]>=s/r?o=t:a=t}return es(t)};d.prototype.temp=d.prototype.kelvin=d.prototype.temperature=function(){return ea(this._rgb)},p.temp=p.kelvin=p.temperature=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["temp"])))},h.format.temp=h.format.kelvin=h.format.temperature=en;var eo=o.unpack,eh=Math.cbrt,el=Math.pow,eu=Math.sign,ec=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=eo(t,"rgb"),n=i[0],r=i[1],s=i[2],a=[ed(n/255),ed(r/255),ed(s/255)],o=a[0],h=a[1],l=a[2],u=eh(.4122214708*o+.5363325363*h+.0514459929*l),c=eh(.2119034982*o+.6806995451*h+.1073969566*l),d=eh(.0883024619*o+.2817188376*h+.6299787005*l);return[.2104542553*u+.793617785*c-.0040720468*d,1.9779984951*u-2.428592205*c+.4505937099*d,.0259040371*u+.7827717662*c-.808675766*d]};function ed(t){var e=Math.abs(t);return e<.04045?t/12.92:(eu(t)||1)*el((e+.055)/1.055,2.4)}var ep=o.unpack,ef=Math.pow,eg=Math.sign,em=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=(t=ep(t,"lab"))[0],n=t[1],r=t[2],s=ef(i+.3963377774*n+.2158037573*r,3),a=ef(i-.1055613458*n-.0638541728*r,3),o=ef(i-.0894841775*n-1.291485548*r,3);return[255*e_(4.0767416621*s-3.3077115913*a+.2309699292*o),255*e_(-1.2684380046*s+2.6097574011*a-.3413193965*o),255*e_(-.0041960863*s-.7034186147*a+1.707614701*o),t.length>3?t[3]:1]};function e_(t){var e=Math.abs(t);return e>.0031308?(eg(t)||1)*(1.055*ef(e,1/2.4)-.055):12.92*t}var ev=o.unpack,ey=o.type;d.prototype.oklab=function(){return ec(this._rgb)},p.oklab=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["oklab"])))},h.format.oklab=em,h.autodetect.push({p:3,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===ey(t=ev(t,"oklab"))&&3===t.length)return"oklab"}});var eb=o.unpack,ex=o.unpack,ew=o.unpack,ek=o.type,eC=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=eb(t,"rgb"),n=ec(i[0],i[1],i[2]);return tZ(n[0],n[1],n[2])};d.prototype.oklch=function(){return eC(this._rgb)},p.oklch=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["oklch"])))},h.format.oklch=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tY((t=ex(t,"lch"))[0],t[1],t[2]),n=em(i[0],i[1],i[2]);return[n[0],n[1],n[2],t.length>3?t[3]:1]},h.autodetect.push({p:3,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===ek(t=ew(t,"oklch"))&&3===t.length)return"oklch"}});var eS=o.type;d.prototype.alpha=function(t,e){return(void 0===e&&(e=!1),void 0!==t&&"number"===eS(t))?e?(this._rgb[3]=t,this):new d([this._rgb[0],this._rgb[1],this._rgb[2],t],"rgb"):this._rgb[3]},d.prototype.clipped=function(){return this._rgb._clipped||!1},d.prototype.darken=function(t){void 0===t&&(t=1);var e=this.lab();return e[0]-=tI.Kn*t,new d(e,"lab").alpha(this.alpha(),!0)},d.prototype.brighten=function(t){return void 0===t&&(t=1),this.darken(-t)},d.prototype.darker=d.prototype.darken,d.prototype.brighter=d.prototype.brighten,d.prototype.get=function(t){var e=t.split("."),i=e[0],n=e[1],r=this[i]();if(!n)return r;var s=i.indexOf(n)-("ok"===i.substr(0,2)?2:0);if(s>-1)return r[s];throw Error("unknown channel "+n+" in mode "+i)};var eI=o.type,eT=Math.pow;d.prototype.luminance=function(t){if(void 0!==t&&"number"===eI(t)){if(0===t)return new d([0,0,0,this._rgb[3]],"rgb");if(1===t)return new d([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),i=20,n=function(e,r){var s=e.interpolate(r,.5,"rgb"),a=s.luminance();return!(1e-7>Math.abs(t-a))&&i--?a>t?n(e,s):n(s,r):s},r=(e>t?n(new d([0,0,0]),this):n(this,new d([255,255,255]))).rgb();return new d(r.concat([this._rgb[3]]))}return eE.apply(void 0,this._rgb.slice(0,3))};var eE=function(t,e,i){return .2126*(t=eA(t))+.7152*(e=eA(e))+.0722*(i=eA(i))},eA=function(t){return(t/=255)<=.03928?t/12.92:eT((t+.055)/1.055,2.4)},eP={},eM=o.type,eO=function(t,e,i){void 0===i&&(i=.5);for(var n=[],r=arguments.length-3;r-- >0;)n[r]=arguments[r+3];var s=n[0]||"lrgb";if(eP[s]||n.length||(s=Object.keys(eP)[0]),!eP[s])throw Error("interpolation mode "+s+" is not defined");return"object"!==eM(t)&&(t=new d(t)),"object"!==eM(e)&&(e=new d(e)),eP[s](t,e,i).alpha(t.alpha()+i*(e.alpha()-t.alpha()))};d.prototype.mix=d.prototype.interpolate=function(t,e){void 0===e&&(e=.5);for(var i=[],n=arguments.length-2;n-- >0;)i[n]=arguments[n+2];return eO.apply(void 0,[this,t,e].concat(i))},d.prototype.premultiply=function(t){void 0===t&&(t=!1);var e=this._rgb,i=e[3];return t?(this._rgb=[e[0]*i,e[1]*i,e[2]*i,i],this):new d([e[0]*i,e[1]*i,e[2]*i,i],"rgb")},d.prototype.saturate=function(t){void 0===t&&(t=1);var e=this.lch();return e[1]+=tI.Kn*t,e[1]<0&&(e[1]=0),new d(e,"lch").alpha(this.alpha(),!0)},d.prototype.desaturate=function(t){return void 0===t&&(t=1),this.saturate(-t)};var eL=o.type;d.prototype.set=function(t,e,i){void 0===i&&(i=!1);var n=t.split("."),r=n[0],s=n[1],a=this[r]();if(!s)return a;var o=r.indexOf(s)-("ok"===r.substr(0,2)?2:0);if(o>-1){if("string"==eL(e))switch(e.charAt(0)){case"+":case"-":a[o]+=+e;break;case"*":a[o]*=+e.substr(1);break;case"/":a[o]/=+e.substr(1);break;default:a[o]=+e}else if("number"===eL(e))a[o]=e;else throw Error("unsupported value for Color.set");var h=new d(a,r);return i?(this._rgb=h._rgb,this):h}throw Error("unknown channel "+s+" in mode "+r)},eP.rgb=function(t,e,i){var n=t._rgb,r=e._rgb;return new d(n[0]+i*(r[0]-n[0]),n[1]+i*(r[1]-n[1]),n[2]+i*(r[2]-n[2]),"rgb")};var eN=Math.sqrt,ez=Math.pow;eP.lrgb=function(t,e,i){var n=t._rgb,r=n[0],s=n[1],a=n[2],o=e._rgb,h=o[0],l=o[1],u=o[2];return new d(eN(ez(r,2)*(1-i)+ez(h,2)*i),eN(ez(s,2)*(1-i)+ez(l,2)*i),eN(ez(a,2)*(1-i)+ez(u,2)*i),"rgb")},eP.lab=function(t,e,i){var n=t.lab(),r=e.lab();return new d(n[0]+i*(r[0]-n[0]),n[1]+i*(r[1]-n[1]),n[2]+i*(r[2]-n[2]),"lab")};var eR=function(t,e,i,n){var r,s,a,o,h,l,u,c,p,f,g,m,_,v;return"hsl"===n?(a=t.hsl(),o=e.hsl()):"hsv"===n?(a=t.hsv(),o=e.hsv()):"hcg"===n?(a=t.hcg(),o=e.hcg()):"hsi"===n?(a=t.hsi(),o=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",a=t.hcl(),o=e.hcl()):"oklch"===n&&(a=t.oklch().reverse(),o=e.oklch().reverse()),("h"===n.substr(0,1)||"oklch"===n)&&(h=(r=a)[0],u=r[1],p=r[2],l=(s=o)[0],c=s[1],f=s[2]),isNaN(h)||isNaN(l)?isNaN(h)?isNaN(l)?m=Number.NaN:(m=l,(1==p||0==p)&&"hsv"!=n&&(g=c)):(m=h,(1==f||0==f)&&"hsv"!=n&&(g=u)):(v=l>h&&l-h>180?l-(h+360):l180?l+360-h:l-h,m=h+i*v),void 0===g&&(g=u+i*(c-u)),_=p+i*(f-p),"oklch"===n?new d([_,g,m],n):new d([m,g,_],n)},eB=function(t,e,i){return eR(t,e,i,"lch")};eP.lch=eB,eP.hcl=eB,eP.num=function(t,e,i){var n=t.num();return new d(n+i*(e.num()-n),"num")},eP.hcg=function(t,e,i){return eR(t,e,i,"hcg")},eP.hsi=function(t,e,i){return eR(t,e,i,"hsi")},eP.hsl=function(t,e,i){return eR(t,e,i,"hsl")},eP.hsv=function(t,e,i){return eR(t,e,i,"hsv")},eP.oklab=function(t,e,i){var n=t.oklab(),r=e.oklab();return new d(n[0]+i*(r[0]-n[0]),n[1]+i*(r[1]-n[1]),n[2]+i*(r[2]-n[2]),"oklab")},eP.oklch=function(t,e,i){return eR(t,e,i,"oklch")};var eD=o.clip_rgb,eF=Math.pow,eV=Math.sqrt,ej=Math.PI,eU=Math.cos,eq=Math.sin,eZ=Math.atan2,eH=function(t,e){for(var i=t.length,n=[0,0,0,0],r=0;r.9999999&&(n[3]=1),new d(eD(n))},eG=o.type,eW=Math.pow,eK=function(t){var e="rgb",i=p("#ccc"),n=0,r=[0,1],s=[],a=[0,0],o=!1,h=[],l=!1,u=0,c=1,d=!1,f={},g=!0,m=1,_=function(t){if("string"===eG(t=t||["#fff","#000"])&&p.brewer&&p.brewer[t.toLowerCase()]&&(t=p.brewer[t.toLowerCase()]),"array"===eG(t)){1===t.length&&(t=[t[0],t[0]]),t=t.slice(0);for(var e=0;e=o[i];)i++;return i-1}return 0},y=function(t){return t},b=function(t){return t},x=function(t,n){if(null==n&&(n=!1),isNaN(t)||null===t)return i;if(n)l=t;else if(o&&o.length>2){var r,l;l=v(t)/(o.length-2)}else l=c!==u?(t-u)/(c-u):1;l=b(l),n||(l=y(l)),1!==m&&(l=eW(l,m));var d=Math.floor(1e4*(l=Math.min(1,Math.max(0,l=a[0]+l*(1-a[0]-a[1])))));if(g&&f[d])r=f[d];else{if("array"===eG(h))for(var _=0;_=x&&_===s.length-1){r=h[_];break}if(l>x&&l2){var l=t.map(function(e,i){return i/(t.length-1)}),d=t.map(function(t){return(t-u)/(c-u)});d.every(function(t,e){return l[e]===t})||(b=function(t){if(t<=0||t>=1)return t;for(var e=0;t>=d[e+1];)e++;var i=(t-d[e])/(d[e+1]-d[e]);return l[e]+i*(l[e+1]-l[e])})}}return r=[u,c],k},k.mode=function(t){return arguments.length?(e=t,w(),k):e},k.range=function(t,e){return _(t),k},k.out=function(t){return l=t,k},k.spread=function(t){return arguments.length?(n=t,k):n},k.correctLightness=function(t){return null==t&&(t=!0),d=t,w(),y=d?function(t){for(var e=x(0,!0).lab()[0],i=x(1,!0).lab()[0],n=e>i,r=x(t,!0).lab()[0],s=e+(i-e)*t,a=r-s,o=0,h=1,l=20;Math.abs(a)>.01&&l-- >0;)n&&(a*=-1),a<0?(o=t,t+=(h-t)*.5):(h=t,t+=(o-t)*.5),a=(r=x(t,!0).lab()[0])-s;return t}:function(t){return t},k},k.padding=function(t){return null!=t?("number"===eG(t)&&(t=[t,t]),a=t,k):a},k.colors=function(e,i){arguments.length<2&&(i="hex");var n=[];if(0==arguments.length)n=h.slice(0);else if(1===e)n=[k(.5)];else if(e>1){var s=r[0],a=r[1]-s;n=(function(t,e,i){for(var n=[],r=ts;r?a++:a--)n.push(a);return n})(0,e,!1).map(function(t){return k(s+t/(e-1)*a)})}else{t=[];var l=[];if(o&&o.length>2)for(var u=1,c=o.length,d=1<=c;d?uc;d?u++:u--)l.push((o[u-1]+o[u])*.5);else l=r;n=l.map(function(t){return k(t)})}return p[i]&&(n=n.map(function(t){return t[i]()})),n},k.cache=function(t){return null!=t?(g=t,k):g},k.gamma=function(t){return null!=t?(m=t,k):m},k.nodata=function(t){return null!=t?(i=p(t),k):i},k},e$=function(t){for(var e=[1,1],i=1;i=5)l=t.map(function(t){return t.lab()}),u=e$(c=t.length-1),r=function(t){var e=1-t;return new d([0,1,2].map(function(i){return l.reduce(function(n,r,s){return n+u[s]*Math.pow(e,c-s)*Math.pow(t,s)*r[i]},0)}),"lab")};else throw RangeError("No point in running bezier with only one color.");return r},eQ=function(t,e,i){if(!eQ[i])throw Error("unknown blend mode "+i);return eQ[i](t,e)},eX=function(t){return function(e,i){var n=p(i).rgb(),r=p(e).rgb();return p.rgb(t(n,r))}},eJ=function(t){return function(e,i){var n=[];return n[0]=t(e[0],i[0]),n[1]=t(e[1],i[1]),n[2]=t(e[2],i[2]),n}};eQ.normal=eX(eJ(function(t){return t})),eQ.multiply=eX(eJ(function(t,e){return t*e/255})),eQ.screen=eX(eJ(function(t,e){return 255*(1-(1-t/255)*(1-e/255))})),eQ.overlay=eX(eJ(function(t,e){return e<128?2*t*e/255:255*(1-2*(1-t/255)*(1-e/255))})),eQ.darken=eX(eJ(function(t,e){return t>e?e:t})),eQ.lighten=eX(eJ(function(t,e){return t>e?t:e})),eQ.dodge=eX(eJ(function(t,e){return 255===t?255:(t=e/255*255/(1-t/255))>255?255:t})),eQ.burn=eX(eJ(function(t,e){return 255*(1-(1-e/255)/(t/255))}));for(var e0=o.type,e1=o.clip_rgb,e2=o.TWOPI,e5=Math.pow,e3=Math.sin,e6=Math.cos,e4=Math.floor,e9=Math.random,e8=Math.log,e7=Math.pow,it=Math.floor,ie=Math.abs,ii=function(t,e){void 0===e&&(e=null);var i={min:Number.MAX_VALUE,max:-1*Number.MAX_VALUE,sum:0,values:[],count:0};return"object"===s(t)&&(t=Object.values(t)),t.forEach(function(t){e&&"object"===s(t)&&(t=t[e]),null==t||isNaN(t)||(i.values.push(t),i.sum+=t,ti.max&&(i.max=t),i.count+=1)}),i.domain=[i.min,i.max],i.limits=function(t,e){return ir(i,t,e)},i},ir=function(t,e,i){void 0===e&&(e="equal"),void 0===i&&(i=7),"array"==s(t)&&(t=ii(t));var n=t.min,r=t.max,a=t.values.sort(function(t,e){return t-e});if(1===i)return[n,r];var o=[];if("c"===e.substr(0,1)&&(o.push(n),o.push(r)),"e"===e.substr(0,1)){o.push(n);for(var h=1;h 0");var l=Math.LOG10E*e8(n),u=Math.LOG10E*e8(r);o.push(n);for(var c=1;c200&&(b=!1)}for(var R={},B=0;B=360;)g-=360;a[f]=g}else a[f]=a[f]/o[f];return p/=n,new d(a,e).alpha(p>.99999?1:p,!0)},p.bezier=function(t){var e=eY(t);return e.scale=function(){return eK(e)},e},p.blend=eQ,p.cubehelix=function(t,e,i,n,r){void 0===t&&(t=300),void 0===e&&(e=-1.5),void 0===i&&(i=1),void 0===n&&(n=1),void 0===r&&(r=[0,1]);var s,a=0;"array"===e0(r)?s=r[1]-r[0]:(s=0,r=[r,r]);var o=function(o){var h=e2*((t+120)/360+e*o),l=e5(r[0]+s*o,n),u=(0!==a?i[0]+o*a:i)*l*(1-l)/2,c=e6(h),d=e3(h);return p(e1([255*(l+u*(-.14861*c+1.78277*d)),255*(l+u*(-.29227*c-.90649*d)),255*(l+1.97294*c*u),1]))};return o.start=function(e){return null==e?t:(t=e,o)},o.rotations=function(t){return null==t?e:(e=t,o)},o.gamma=function(t){return null==t?n:(n=t,o)},o.hue=function(t){return null==t?i:("array"===e0(i=t)?0==(a=i[1]-i[0])&&(i=i[1]):a=0,o)},o.lightness=function(t){return null==t?r:("array"===e0(t)?(r=t,s=t[1]-t[0]):(r=[t,t],s=0),o)},o.scale=function(){return p.scale(o)},o.hue(i),o},p.mix=p.interpolate=eO,p.random=function(){for(var t="#",e=0;e<6;e++)t+="0123456789abcdef".charAt(e4(16*e9()));return new d(t,"hex")},p.scale=eK,p.analyze=is.analyze,p.contrast=function(t,e){t=new d(t),e=new d(e);var i=t.luminance(),n=e.luminance();return i>n?(i+.05)/(n+.05):(n+.05)/(i+.05)},p.deltaE=function(t,e,i,n,r){void 0===i&&(i=1),void 0===n&&(n=1),void 0===r&&(r=1);var s=function(t){return 360*t/(2*im)},a=function(t){return 2*im*t/360};t=new d(t),e=new d(e);var o=Array.from(t.lab()),h=o[0],l=o[1],u=o[2],c=Array.from(e.lab()),p=c[0],f=c[1],g=c[2],m=(h+p)/2,_=(ia(io(l,2)+io(u,2))+ia(io(f,2)+io(g,2)))/2,v=.5*(1-ia(io(_,7)/(io(_,7)+io(25,7)))),y=l*(1+v),b=f*(1+v),x=ia(io(y,2)+io(u,2)),w=ia(io(b,2)+io(g,2)),k=(x+w)/2,C=s(iu(u,y)),S=s(iu(g,b)),I=C>=0?C:C+360,T=S>=0?S:S+360,E=ic(I-T)>180?(I+T+360)/2:(I+T)/2,A=1-.17*id(a(E-30))+.24*id(a(2*E))+.32*id(a(3*E+6))-.2*id(a(4*E-63)),P=T-I;P=180>=ic(P)?P:T<=I?P+360:P-360,P=2*ia(x*w)*ip(a(P)/2);var M=w-x,O=1+.015*io(m-50,2)/ia(20+io(m-50,2)),L=1+.045*k,N=1+.015*k*A,z=30*ig(-io((E-275)/25,2)),R=-(2*ia(io(k,7)/(io(k,7)+io(25,7))))*ip(2*a(z));return il(0,ih(100,ia(io((p-h)/(i*O),2)+io(M/(n*L),2)+io(P/(r*N),2)+M/(n*L)*R*(P/(r*N)))))},p.distance=function(t,e,i){void 0===i&&(i="lab"),t=new d(t),e=new d(e);var n=t.get(i),r=e.get(i),s=0;for(var a in n){var o=(n[a]||0)-(r[a]||0);s+=o*o}return Math.sqrt(s)},p.limits=is.limits,p.valid=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];try{return new(Function.prototype.bind.apply(d,[null].concat(t))),!0}catch(t){return!1}},p.scales={cool:function(){return eK([p.hsl(180,1,.9),p.hsl(250,.7,.4)])},hot:function(){return eK(["#000","#f00","#ff0","#fff"]).mode("rgb")}},p.colors=t5,p.brewer=i_,p}();var iP=u("hFpCu");const iM=window.location,iO=new URLSearchParams(iM.search),iL=new URL(iM),iN=new Y({objectHash:iF});function iz(t){let e=window.atob((t+"===".slice((t.length+3)%4)).replace(/-/g,"+").replace(/_/g,"/"));return new TextDecoder().decode(iE.inflate(Uint8Array.from(e,t=>t.codePointAt(0))))}function iR(t){return window.btoa(String.fromCodePoint(...iE.deflate(new TextEncoder().encode(t)))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function iB(t){return t.charAt(0).toUpperCase()+t.slice(1)}function iD(...t){return t.findLast(t=>void 0!==t)}function iF(t,e){return"object"==typeof t&&"object"==typeof e?Object.keys(t).length===Object.keys(e).length&&Object.keys(t).every(i=>{let n=t[i],r=e[i];return Object.hasOwn(e,i)&&("function"==typeof n?.equals?n.equals(r):iF(n,r))}):t===e}function iV(t,e=null){document.dispatchEvent(new CustomEvent(t,{detail:e}))}function ij(t,e,i=0){return t&&e&&t.round().subtract(e.round()).length<=i}function iU(t){let e=document.createElement("span");return e.classList.add("beam"),e.style.backgroundColor=t,e.title=t,e}function iq(t){if(!t.length)return[];let e=a(iA).average(t).hex(),i=[];if(t.some(t=>t!==e)){let e=t.length-1;t.forEach((t,n)=>{if(i.push(iU(t)),ne.subtract(t).length-i.subtract(t).length}function iH(t,e){let i=document.createElement("span");return i.classList.add("icon","material-symbols-outlined"),i.textContent=t,i.title=e??iB(t),i}function iG(t,e,i=t=>t/2){let n=t.subtract(e);return n.length="function"==typeof i?i(n.length):i,t.subtract(n)}function iW(t,e,i){let n=new iP.Point(0,0);return n.length=e,n.angle=60*i$(i),t.add(n)}function iK(t){return t+(t>=3?-3:3)}function i$(t,e=!0){return(t+=(e?-1:1)*2)<0?t+6:t>5?t-6:t}function iY(t){let e=document.createElement("span");return e.classList.add("text"),e.textContent=t.toString(),e}function iQ(t){if(t)return t}window.base64decode=iz,window.base64encode=iR;const iX=window.console=window.console||{debug:function(){}},iJ=iX.debug;function i0(t){iX.debug=t?iJ:function(){}}i0(iO.has("debug")??!1);var iP=(u("hFpCu"),u("hFpCu"));class i1{constructor(t,e){this.coordinates=[t,e],this.r=t,this.c=e}toString(){return this.coordinates.join(",")}static toAxialCoordinates(t){return new i2(t.c-(t.r-(1&t.r))/2,t.r)}}class i2{constructor(t,e,i){i||(i=-t-e),this.coordinates=[t,e,i],this.q=t,this.r=e,this.s=i}add(t){return i2.add(this,t)}equals(t){return this.q===t.q&&this.r===t.r&&this.s===t.s}isNeighbor(t){return i2.isNeighbor(this,t)}neighbor(t){return i2.neighbor(this,t)}toString(){return this.coordinates.join(",")}static add(t,e){return new i2(t.q+e.q,t.r+e.r)}static direction(t){return 0===t&&(t=6),i2.directions[6-t]}static directions=[new i2(1,0),new i2(1,-1),new i2(0,-1),new i2(-1,0),new i2(-1,1),new i2(0,1)];static isNeighbor(t,e){return i2.directions.map(e=>i2.add(t,e)).some(t=>t.equals(e))}static neighbor(t,e){return i2.add(t,i2.direction(e))}static toOffsetCoordinates(t){return new i1(t.q+(t.r-(1&t.r))/2,t.r)}}var iP=(u("hFpCu"),u("hFpCu"));class i5{#t={};constructor(t){this.setState(t)}getState(){return structuredClone(this.#t)}setState(t){this.#t=structuredClone(t)}updateState(t,e=!0){return t(this.#t),e&&iV(i5.Events.Update,{object:this}),this.getState()}static Events=Object.freeze({Update:"state-update"})}class i3 extends i5{center;data;group;id=i3.uniqueId++;locked;parent;sortOrder=100;type;constructor(t,e,i){super(e),this.type=e?.type||i?.type,this.data=Object.assign({id:this.id,type:this.type},i?.data||{}),this.locked=i?.locked!==!1,t&&(this.center=t.center),this.parent=t,this.group=new iP.Group({data:this.data,locked:this.locked})}equals(t){return t instanceof i3&&this.id===t.id}getColorElements(){return[]}getCompoundPath(){return new iP.CompoundPath({children:this.group.clone({insert:!1}).children.filter(t=>!1!==t.data.collidable)})}getIndex(){return this.group.index}getLayer(){return this.group.parent}onTap(){}onCollision({collisionStep:t}){return t}onDeselected(){}onInitialization(){}onSelected(){}remove(){this.group.remove()}toString(){return`[${this.type}:${this.id}]`}update(){}static Types=Object.freeze(Object.fromEntries(["beam","collision","filter","mask","portal","reflector","terminus","tile","wall"].map(t=>[t,iB(t)])));static uniqueId=0}var iP=u("hFpCu");class i6{#e=[];#i={element:document};constructor(t={}){this.#i=Object.assign(this.#i,t)}add(t,e={}){this.#e=this.#e.concat(t.map(t=>{if(!(t=Object.assign({},this.#i,e,t)).type)throw Error("Event type is required");return t.context&&(t.handler=t.handler.bind(t.context)),t.element.addEventListener(t.type,t.handler,t.options),t}))}remove(){this.#e.forEach(t=>t.element.removeEventListener(t.type,t.handler)),this.#e=[]}}var iP=u("hFpCu");class i4{#n={};#r;#s;constructor(t=[]){this.#s=t,this.#r=0!==t.length,t.forEach(t=>{this.#n[t]=new i4})}set(t,e){if(this.#r&&!this.#s.includes(t))throw Error(`Invalid key: ${t}`);this.#n[t]=e}get(t){return void 0===t?this.#n:this.#n[t]}keys(t){return Object.keys(this.#a(t))}length(t){return this.keys(t).length}unset(t){delete this.#n[t]}values(t){return Object.values(this.#a(t))}#a(t){let e=this.get(t);return e instanceof i4?e.get():e}}class i9{#o;#n=new i4(Object.values(i9.CacheKeys));#h;#l=new i6({context:this});#u;constructor(t){this.#o=t.getBoundingClientRect(),this.#h=t,this.#u=new iP.Point(this.#o.left,this.#o.top),this.#l.add([{type:"pointercancel",handler:this.onPointerUp},{type:"pointerdown",handler:this.onPointerDown},{type:"pointerleave",handler:this.onPointerUp},{type:"pointermove",handler:this.onPointerMove},{type:"pointerout",handler:this.onPointerUp},{type:"pointerup",handler:this.onPointerUp},{type:"wheel",handler:this.onMouseWheel,options:{passive:!1}}],{element:t})}onMouseWheel(t){t.preventDefault(),this.#c(new iP.Point(t.offsetX,t.offsetY),t.deltaY,1.05)}onPan(t){let e=a(iP).view.viewToProject(i9.point(t)),i=this.#d(i9.GestureKeys.Pan);if(!i){this.#p(i9.GestureKeys.Pan,{from:e});return}let n=i.from.subtract(e).add(a(iP).view.center);a(iP).view.center.subtract(n).length>1&&(document.body.classList.contains("grab")||document.body.classList.add("grab"),a(iP).view.center=n)}onPinch(t){let e=t[0],i=t[1],n=i9.point(e),r=i9.point(i),s=n.getDistance(r),a=this.#d(i9.GestureKeys.Pinch);if(!a){this.#p(i9.GestureKeys.Pinch,{distance:s});return}let o=n.add(r).divide(2).subtract(this.#u),h=s/a.distance,l=(a.distance-s)*h;this.#c(o,l,1.01),a.distance=s}onPointerDown(t){this.#n.get(i9.CacheKeys.Down).set(t.pointerId,t)}onPointerMove(t){let e=this.#n.get(i9.CacheKeys.Down).get(t.pointerId);if(e&&i9.point(t).subtract(i9.point(e)).length>1){this.#n.get(i9.CacheKeys.Move).set(t.pointerId,t);let e=this.#n.get(i9.CacheKeys.Move).values();2===e.length?this.onPinch(e):this.onPan(t)}}onPointerUp(t){let e=this.#n.get(i9.CacheKeys.Down).get(t.pointerId);e&&(1!==this.#n.length(i9.CacheKeys.Down)||this.#n.get(i9.CacheKeys.Move).get(t.pointerId)||this.onTap(e),document.body.classList.remove("grab"),this.#n.get(i9.CacheKeys.Down).unset(t.pointerId),this.#n.get(i9.CacheKeys.Move).unset(t.pointerId),this.#n.get(i9.CacheKeys.Gesture).unset(i9.GestureKeys.Pan),2>this.#n.length(i9.CacheKeys.Move)&&this.#n.get(i9.CacheKeys.Gesture).unset(i9.GestureKeys.Pinch))}onTap(t){let e=a(iP).view.viewToProject(i9.point(t).subtract(this.#u));this.#h.dispatchEvent(new CustomEvent(i9.GestureKeys.Tap,{detail:{event:t,point:e}}))}#d(t){return this.#n.get(i9.CacheKeys.Gesture).get(t)}#p(t,e){this.#n.get(i9.CacheKeys.Gesture).set(t,e)}#c(t,e,i){let n=Math.max(Math.min(e<0?a(iP).view.zoom*i:a(iP).view.zoom/i,i9.maxZoom),i9.minZoom),r=a(iP).view.viewToProject(t),s=r.subtract(a(iP).view.center),o=r.subtract(s.multiply(a(iP).view.zoom/n)).subtract(a(iP).view.center);a(iP).view.zoom=n,a(iP).view.center=a(iP).view.center.add(o)}static point(t){return new iP.Point(t.clientX,t.clientY)}static CacheKeys=Object.freeze({Down:"down",Move:"move",Gesture:"gesture"});static GestureKeys=Object.freeze({Pan:"pan",Pinch:"pinch",Tap:"tap"});static maxZoom=2;static minZoom=.5;static vibratePattern=25}const i8=document.getElementById("modifiers-immutable"),i7=document.getElementById("modifiers-mutable"),nt=window.navigator;let ne=0;class ni extends i5{#f;#g=!1;#l=new i6({context:this});#m;#_=500;#v;configuration;element;disabled=!1;id=ne++;immutable=!1;name;selected=!1;tile;title;type;constructor(t,e){super(e),this.tile=t,this.type=e.type}attach(){let t=this.#f=document.createElement("li");t.classList.add(["modifier",this.type.toLowerCase()].join("-")),this.immutable&&(this.disabled=!0);let e=this.element=document.createElement("span");e.classList.add("material-symbols-outlined","fill"),t.append(e),this.update(),this.#l.add([{type:"deselected",handler:this.onDeselected},{type:"pointerdown",handler:this.onPointerDown},{type:"pointerleave",handler:this.onPointerUp},{type:"pointerup",handler:this.onPointerUp}],{element:t}),this.immutable?i8.append(t):i7.append(t)}detach(){this.#f&&(ni.deselect(),this.#l.remove(),this.#f.remove(),this.selected=!1,this.element=void 0,this.#f=void 0)}dispatchEvent(t,e){iV(t,Object.assign({},e||{},{modifier:this,tile:this.tile}))}equals(t){return t instanceof ni&&this.id===t.id}move(t){this.remove(),t.addModifier(this),this.tile=t}moveFilter(t){return t.modifiers.some(t=>t.type===ni.Types.immutable)}onDeselected(){this.update({selected:!1}),this.tile.afterModify(),this.dispatchEvent(ni.Events.Deselected)}onPointerDown(t){0!==t.button?this.onToggle(t):(this.#g=!0,this.#m||this.tile.modifiers.some(t=>[ni.Types.immutable,ni.Types.lock].includes(t.type))||(this.#v=setTimeout(this.onSelected.bind(this),this.#_)))}onPointerUp(t){if(clearTimeout(this.#v),this.#g&&!this.disabled&&!this.selected)switch(t.type){case"pointerleave":this.onToggle(t);break;case"pointerup":this.onTap(t)}this.#g=!1}onSelected(){ni.deselect(),nt.vibrate(i9.vibratePattern),this.update({selected:!0});let t=this.#m=new nD.Mask({id:this.toString(),onMask:()=>this.tile.beforeModify(),onTap:this.#y.bind(this),tileFilter:this.#b.bind(this)});this.dispatchEvent(nD.Events.Mask,{mask:t})}onTap(){this.selected=!1}onToggle(){nt.vibrate(i9.vibratePattern)}remove(){this.detach(),this.tile.removeModifier(this),this.tile=null}toString(){return[this.name,this.id].join(":")}update(t){t=Object.assign({disabled:this.disabled,selected:this.selected,name:this.name,title:this.title},t||{}),this.immutable||(this.disabled=t.disabled),this.name=t.name,this.title=t.title,this.selected=t.selected,this.#f&&(this.#f.classList.toggle("disabled",this.disabled),this.#f.classList.toggle("selected",this.selected),this.element.textContent=this.name,this.element.title=this.title)}#y(t,e){if(e&&e!==this.tile){let i=this.tile;this.move(e),t.updateState(),t.updateSelectedTile(e),t.unmask(),this.dispatchEvent(ni.Events.Moved,{fromTile:i})}else ni.deselect(),t.unmask();this.#m=void 0,this.update({selected:!1})}#b(t){return!t.equals(this.tile)&&this.moveFilter(t)}static deselect(){let t=document.querySelector(".modifiers .selected");t&&t.dispatchEvent(new CustomEvent("deselected"))}static immutable(t){return t.type===ni.Types.immutable}static Events=Object.freeze({Deselected:"modifier-deselected",Invoked:"modifier-invoked",Moved:"modifier-moved"});static Types=Object.freeze(Object.fromEntries(["immutable","lock","move","rotate","swap","toggle"].map(t=>[t,iB(t)])))}class nn extends ni{#m;name="drag_pan";title="Move";onTap(t){super.onTap(t);let e=this.tile.items.filter(nn.movable);if(this.#m||!e.length)return;let i=new nD.Mask({id:this.toString(),onTap:this.#y.bind(this),onMask:()=>this.tile.beforeModify(),onUnmask:()=>this.tile.afterModify(),tileFilter:this.tileFilter.bind(this)});this.#m=i,iV(nD.Events.Mask,{mask:i})}moveFilter(t){return super.moveFilter(t)||!t.items.some(t=>t.movable)}moveItems(t){let e=this.tile.items.filter(nn.movable);return e.forEach(e=>e.move(t)),{moved:[nn.data(this.tile,t,e)],tiles:[this.tile,t]}}tileFilter(t){return t.modifiers.some(ni.immutable)||t.items.filter(t=>t.type!==i3.Types.beam).length>0&&t!==this.tile}#y(t,e){if(e){let i=this.moveItems(e);t.updateState(),t.updateSelectedTile(e),t.unmask(),this.dispatchEvent(ni.Events.Invoked,i)}else t.unmask();this.#m=void 0}static data(t,e,i){return{fromTile:t,toTile:e,items:i}}static movable(t){return t.movable}}const nr=t=>class extends t{movable;constructor(t,e){super(...arguments),this.movable=!1!==e.movable}move(t){this.parent.removeItem(this);let e=this.parent.center.subtract(t.center);this.group.position=this.group.position.subtract(e),this.parent=t,this.parent.addItem(this),this.center=this.parent.center,this.onMove()}onMove(){}};class ns{color;colors;connected;direction;done;insertAbove;onAdd;onRemove;point;pathIndex;segmentIndex;state;tile;constructor(t,e,i,n,r,s,o,h,l,u,c,d,p){if(c&&!(c instanceof na))throw Error("Step.state must be instance of StepState");this.colors=i?Array.isArray(i)?Array.from(i):[i]:[],this.colors.length&&(this.color=a(iA).average(this.colors).hex()),this.connected=h??!0,this.direction=n,this.done=u??!1,this.index=t,this.insertAbove=l,this.onAdd=d??iQ,this.onRemove=p??iQ,this.point=r,this.pathIndex=s,this.segmentIndex=o,this.state=c??new na,this.tile=e}copy(t){return new ns(t.index??this.index,t.tile??this.tile,t.colors??t.color??this.colors,t.direction??this.direction,t.point??this.point,t.pathIndex??this.pathIndex,t.segmentIndex??this.segmentIndex,t.connected??this.connected,t.insertAbove??this.insertAbove,t.done??this.done,t.state??new na(this.state),t.onAdd??this.onAdd,t.onRemove??this.onRemove)}equals(t){return iF(this,t)}}class na{#n={};constructor(){let t=Object.assign({},...arguments);Object.keys(t).forEach(e=>{this[e]=t[e]})}copy(...t){return new na(...[this].concat(t))}get(t){return this.#s(t).map(t=>this[t]).find(t=>t)}has(t){return this.#s(t).some(t=>this[t])}#s(t){return this.#n[t.name]??=Object.keys(Reflect.construct(t,[]))}static Collision=class{collision;constructor(t){this.collision=t}};static Filter=class{filter={}};static MergeInto=class{mergeInto;constructor(t){this.mergeInto={beam:t}}};static MergeWith=class{mergeWith;constructor(t){this.mergeWith=t}};static Portal=class{portal;constructor(t,e){this.portal={entryPortal:t,exitPortal:e}}};static Reflector=class{reflector;constructor(t){this.reflector={item:t}}};static TerminusConnection=class{terminusConnection;constructor(t,e){this.terminusConnection={terminus:t,opening:e}}}}class no extends nr(i3){constructor(t,{color:e}){super(...arguments),this.color=a(iA).average(Array.isArray(e)?e:[e]).hex();let i=new iP.Color(e);i.alpha=.25;let n=new iP.Path.RegularPolygon({center:t.center,closed:!0,radius:t.parameters.circumradius/3,sides:3,style:{fillColor:i,strokeColor:e,strokeWidth:2}});this.group.addChild(n)}getColorElements(){return[iU(this.color)]}onCollision({currentStep:t,nextStep:e}){return e.copy(t.state.has(na.Filter)?{colors:e.colors.concat([this.color])}:{state:new na({insertAbove:this},new na.Filter)})}}var iP=u("hFpCu");class nh extends ni{clockwise;title="Rotate";constructor(t,e,i={}){super(...arguments),this.clockwise=iD(!0,e.clockwise,i.clockwise),this.name=nh.Names[this.clockwise?"right":"left"]}moveFilter(t){return super.moveFilter(t)||!t.items.some(t=>t.rotatable)}onTap(t){super.onTap(t);let e=this.tile.items.filter(t=>t.rotatable);e.forEach(t=>t.rotate(this.clockwise)),this.dispatchEvent(ni.Events.Invoked,{items:e})}onToggle(){super.onToggle(),this.clockwise=!this.clockwise,this.updateState(t=>{t.clockwise=this.clockwise}),this.update({name:nh.Names[this.clockwise?"right":"left"]})}static Names=Object.freeze({left:"rotate_left",right:"rotate_right "})}const nl=t=>class extends t{direction;rotatable;rotation=0;rotationDegrees;constructor(t,e,i={}){super(...arguments),this.direction=iD(e.direction,i.direction),this.rotatable=iD(!0,e.rotatable,i.rotatable),this.rotationDegrees=iD(60,e.rotationDegrees,i.rotationDegrees),this.rotation=iD(0,e.rotation,i.rotation)%this.getMaxRotation()}getDirection(t){return void 0===(t=t??this.direction)?t:(t+this.rotation+6)%6}getMaxRotation(){return 360/this.rotationDegrees}onInitialization(){super.onInitialization(),this.rotateGroup(this.rotation),void 0!==this.direction&&this.rotateGroup(this.direction)}rotateGroup(t){this.rotatable&&this.group.rotate(t*this.rotationDegrees,this.center)}rotate(t){let e=!1===t?-1:1;this.rotation=(e+this.rotation)%this.getMaxRotation(),this.updateState(t=>{t.rotation=this.rotation}),this.rotateGroup(e)}};class nu extends nr(nl(i3)){#x={};constructor(t,e){super(t,e,{rotatable:void 0!==e.direction}),this.direction=e.direction;let i=t.parameters.circumradius/3,n=t.parameters.circumradius/5,r={fillColor:"black",strokeColor:"white",strokeWidth:2},s=[],a=new iP.Path.Ellipse({center:t.center,radius:[n,i],style:r});s.push(a);let o=new iP.Path.Ellipse({center:t.center,radius:[n-2*r.strokeWidth,i-2*r.strokeWidth],style:r});if(s.push(o),this.rotatable){let e=new(0,iP.Path)({closed:!0,opacity:.25,segments:[t.center.add(new iP.Point(0,i)),t.center.subtract(new iP.Point(0,i)),t.center.subtract(new iP.Point(2.5*n,0))],style:{fillColor:"black"}}).subtract(a);s.unshift(e)}this.group.addChildren(s),this.rotatable&&this.rotateGroup(1)}get(t){return this.#x[t]}onCollision({beam:t,currentStep:e,nextStep:i,puzzle:n}){let r=e.state.get(na.Portal);if(r){if(r.exitPortal===this)return i.copy({insertAbove:this})}else{let t=i.index,e=iK(i.direction);if(iD(this.get(e),{stepIndex:t}).stepIndexthis.update(e,{stepIndex:t}),onRemove:()=>this.update(e),state:i.state.copy(new na.Portal(this))})}let s=[this.id,i.index].join(":"),a=t.getState().moves?.[s],o=n.getItems().filter(t=>t.type===i3.Types.portal&&!t.equals(this)&&!t.get(nu.getExitDirection(i,r.entryPortal,t))&&(void 0===a||t.id===a)&&(void 0===this.getDirection()||void 0===t.getDirection()||t.getDirection()===this.getDirection()));if(0===o.length)return console.debug(this.toString(),"no valid destinations found"),e;if(1===o.length)return this.#w(t,o[0],i,r);{let a=o.map(t=>t.parent),h=new nD.Mask({beam:t,id:s,onMask:()=>e.tile.beforeModify(),onTap:(e,n)=>{let a=o.find(t=>t.parent===n);a&&(t.addStep(this.#w(t,a,i,r)),t.updateState(t=>{t.moves||(t.moves={}),t.moves[s]=a.id}),e.unmask())},onUnmask:()=>e.tile.afterModify(),tileFilter:t=>!(this.parent===t||a.some(e=>e===t))});return n.updateSelectedTile(e.tile),n.mask(h),e}}update(t,e){this.#x[t]=e}#w(t,e,i,n){let r=nu.getExitDirection(i,n.entryPortal,e),s=i.index;return i.copy({connected:!1,direction:r,insertAbove:e,onAdd:()=>e.update(r,{stepIndex:s}),onRemove:()=>e.update(r),point:e.parent.center,state:i.state.copy(new na.Portal(n.entryPortal,e)),tile:e.parent})}static getExitDirection(t,e,i){return i.getDirection()??e.getDirection()??t.direction}}var iP=u("hFpCu");class nc extends ni{on;title="Toggle";constructor(t,{on:e}){super(...arguments),this.on=e||!1,this.tile.items.forEach(t=>{t.toggled=this.on})}attach(){this.name=nc.Names[this.on?"on":"off"],super.attach()}moveFilter(t){return super.moveFilter(t)||!t.items.some(t=>t.toggleable)}onTap(t){super.onTap(t),this.on=!this.on;let e=this.tile.items.filter(t=>t.toggleable);e.forEach(t=>t.toggle(this.on)),this.update({name:nc.Names[this.on?"on":"off"]}),this.dispatchEvent(ni.Events.Invoked,{items:e})}static Names=Object.freeze({on:"toggle_on",off:"toggle_off "})}const nd=t=>class extends t{toggleable;toggled;constructor(t,e){super(...arguments),this.toggleable=!1!==e.toggleable}onToggle(){}toggle(t){this.toggled=t,this.onToggle()}};var iP=u("hFpCu");class np{constructor(t,e,i,n){let r=[i];void 0!==n&&r.push(n),this.beam=i,this.index=t,this.item=n,this.itemIds=r.map(t=>t.id),this.items=r,this.point=e[0],this.points=e,this.withSelf=i.equals(n)}copy(t){return new np(t.index??this.index,t.points??this.points,t.beam??this.beam,t.item??this.item)}equals(t){return t&&t.point.equals(this.point)&&t.items.every(t=>this.has(t))}has(t){return this.itemIds.includes(t.id)}mirror(){return this.copy({beam:this.item,item:this.beam})}}class nf{constructor(t,e,i){this.beams=[t].concat(e.state.get(na.MergeWith)?.beams||[]),this.colors=e.colors.concat(t.getColors()),this.stepIndex=i}}class ng extends i3{done=!1;path=[];sortOrder=3;#n=new i4(Object.values(ng.CacheKeys));#k;#C;#S=-1;#I=[];constructor(t,e,i){super(...arguments),this.group=null,this.#k=i.direction,this.#C={closed:!1,data:{id:this.id,type:this.type},locked:!0,strokeJoin:"round",strokeCap:"round",strokeWidth:t.radius/12}}addStep(t){let e=this.getLastStepIndex();if(this.done=!1,this.#C.strokeColor=t.color,0===this.path.length){let t=new iP.Path(this.#C);this.path.push(t),this.getLayer().insertChild(0,t)}let i=this.path[this.path.length-1],n=this.#I[e];if(!t.connected||n&&(t.color!==n.color||t.insertAbove!==n.insertAbove)){console.debug(this.toString(),"adding new path item for step:",t,"previous step:",n);let e=new iP.Path(this.#C),i=[t.point];t.connected&&i.unshift(n.point),e.add(...i),this.path.push(e),this.getLayer().insertChild(this.#T(t),e),t.segmentIndex=0}else i.add(t.point),t.segmentIndex=i.segments.length-1;return t.pathIndex=this.path.length-1,this.#I.push(t),t.index=this.#S=this.#I.length-1,t.tile.items.some(t=>t.equals(this))||t.tile.addItem(this),t.onAdd(t),console.debug(this.toString(),"added step",t),this.#E(this.#S),t}getCollision(){return this.getStep()?.state.get(na.Collision)}getColor(){return this.getStep()?.color||this.getOpening().color}getColors(){return Array.from(this.getStep()?.colors||this.getOpening().colors)}getColorElements(t){let e=this.getSteps(t).find(t=>t.state.has(na.MergeWith));return e?iq(e.color):[]}getCompoundPath(){return new iP.CompoundPath({children:this.path.map(t=>t.clone({insert:!1}))})}getIndex(){return this.path[this.path.length-1].index}getLastStepIndex(){return this.length()-1}getLayer(){return this.parent.getLayer()}getMergeWith(t){return this.#n.get(ng.CacheKeys.MergeWith).get(t.id)}getOpening(){return this.parent.getOpening(this.#k)}getState(){return this.parent.getState().openings[this.#k]}getStep(t){return this.#I[t||this.getLastStepIndex()]}getSteps(t){return t?this.#I.filter(e=>e.tile===t):this.#I}isComplete(){return this.isOn()&&this.done}isConnected(){let t=this.getStep();return t?.state.has(na.TerminusConnection)||t?.state.get(na.MergeInto)?.beam.isConnected()}isOn(){let t=this.getOpening();return t.on&&!t.connected}isPending(){return this.isOn()&&!this.done}length(){return this.#I.length}onBeamUpdated(t){let e=t.detail.beam;if(e.isPending())return;let i=e.getStep();if(this.isComplete()){let t=this.getStep(),n=t.state.get(na.Collision);if(n?.has(e)&&!n.equals(i?.state.get(na.Collision))){console.debug(this.toString(),"re-evaluating collision with",e.toString()),this.done=!1,this.#S=Math.max(t.index-1,0);return}let r=t.state.get(na.MergeInto);if(r?.beam.equals(e)&&!e.getMergeWith(this)){console.debug(this.toString(),"re-evaluating merge into",e.toString()),this.done=!1,this.#S=Math.max(this.#S-1,0);return}}let n=this.getMergeWith(e);n&&!i?.state.get(na.MergeInto)?.beam.equals(this)&&(console.debug(this.toString(),"re-evaluating merge with",e.toString()),this.done=!1,this.#S=Math.max(n.stepIndex-1,0))}onCollision({beam:t,collision:e,collisionStep:i,currentStep:n,nextStep:r,puzzle:s}){let a=t.equals(this);if(console.debug(this.toString(),"evaluating collision with",a?"self":t.toString()),!t.isOn()){console.debug(this.toString(),"ignoring collision with inactive beam",t.toString());return}if(t.parent.equals(this.parent)&&0===n.index){console.debug(this.toString(),"ignoring collision with sibling beam",t.toString());return}if(a&&this.#Sij(e.point,t.point));if(o<0)throw Error(`Could not find matching step for beam collision between ${this.toString()} and ${t.toString()}`);let h=this.#I[o];if(h.state.get(na.MergeInto)?.beam.equals(t)){console.debug(this.toString(),"ignoring collision with merged beam",t.toString());return}if(h.state.get(na.TerminusConnection)?.terminus.equals(t.parent)){console.debug(this.toString(),"ignoring collision with connected beam in parent terminus",t.toString());return}let l=h.state.get(na.Reflector)??n.state.get(na.Reflector);if(l){let e=iW(h.point,1,iK(h.direction)),i=iW(n.point,1,iK(n.direction));if(!l.item.isSameSide(e,i)){console.debug(this.toString(),"ignoring collision with beam on opposite side of reflector",t.toString());return}}let u=h.direction===r.direction;if(n.state.get(na.Portal)?.exitPortal&&!u){console.debug(this.toString(),"ignoring collision with beam using same portal with different exit direction",t.toString());return}if(!u||a)return console.debug(t.toString(),"has collided with",a?"self":this.toString(),e),a?u||this.update(o,s.getBeamsUpdateDelay()):this.update(o,{done:!0,state:h.state.copy(new na.Collision(e.mirror()))}),i.copy({done:!0,insertAbove:h.insertAbove});console.debug(this.toString(),"merging with",t.toString()),this.#A(o);let c=new nf(t,h,o);return this.addStep(h.copy({colors:c.colors,onAdd:()=>{this.#n.get(ng.CacheKeys.MergeWith).set(t.id,c)},onRemove:()=>{this.#n.get(ng.CacheKeys.MergeWith).unset(t.id)},state:h.state.copy(new na.MergeWith(c))})),console.debug(t.toString(),"merging into",this.toString()),r.copy({done:!0,point:n.point,state:r.state.copy(new na.MergeInto(this))})}onModifierInvoked(t){if(!this.isOn()){this.#I.length&&(console.debug(this.toString(),"beam has been toggled off"),this.updateState(t=>{delete t.moves}),this.remove());return}let e=t.detail.tiles||[t.detail.tile],i=this.#I.findIndex(t=>e.some(e=>e.equals(t.tile)));if(i>=0){console.debug(this.toString(),"re-evaluating due to modifier being invoked in matching tile",i),this.done=!1,this.#S=Math.max(i-1,0);return}if(this.isComplete()){let t=this.getStep();t.state.get(na.Portal)?.entryPortal&&(this.done=!1)}}remove(t=0){this.#A(t)}selected(t=!0){this.path.forEach(e=>{e.selected=t})}startDirection(){return(this.getOpening().direction+this.parent.rotation)%6}step(t){let e;if(!this.isPending())return;if(console.debug(this.toString(),"currentStepIndex",this.#S),0===this.#I.length){let t=this.parent.parent;this.addStep(new ns(0,t,this.getColor(),this.startDirection(),t.center))}let i=this.#S,n=this.#I[i],r=0===i?this.startDirection():n.direction,s=iW(n.point,n.tile.parameters.inradius,r),a=t.getTile(iG(n.point,s));if(!a){console.debug(this.toString(),"stopping due to out of bounds");let t=new np(0,[n.point],this);return this.updateStep(i,{done:!0,state:new na(new na.Collision(t))})}let o=i+1,h=this.#I[o],l=this.path.length-1,u=this.path[l].segments.length-1,c=new ns(o,a,n.color,r,s,h?.pathIndex||l,h?.segmentIndex||u),d=function(t,e){let i=t.map(t=>t[e]);return t.filter((t,n)=>!i.includes(t[e],n+1))}(a.items.concat(n.tile.equals(c.tile)?[]:n.tile.items),"id");console.debug(this.toString(),"collision items:",d);let p=this.#P(d,n,c,t).map((t,e)=>new np(e,t.points,this,t.item));p.length&&console.debug(this.toString(),"collisions:",p);for(let i=0;it(e.openings[this.#k]),e)}updateStep(t,e){let i=this.getStep(t);if(i){let n=this.#O(i,e);return this.#I[t]=n,n.onAdd(n),console.debug(this.toString(),"updated step at index",t,"from",i,"to",n),this.#E(t),n}}#P(t,e,i,n){let r=[e.point,i.point],s=new iP.Path({segments:r}),a=r[0];return t.map(t=>{let e=[],i=s.getIntersections(t.getCompoundPath(),e=>!(t===this&&e.point.equals(a)));return e.push(...new Set(i.map(t=>t.point))),e.length||t.type!==i3.Types.beam||t===this||e.push(...t.getSteps().map(t=>t.point).filter(t=>r.some(e=>ij(t,e)))),e.sort(iZ(a)),n.debug&&(n.drawDebugPoint(a),e.forEach(t=>n.drawDebugPoint(t,{fillColor:"black"}))),{points:e,item:t}}).filter(t=>t.points.length).sort((t,e)=>{let i=iZ(a)(t.points[0],e.points[0]);return 0===i?t.item.sortOrder-e.item.sortOrder:i})}#T(t){return t.insertAbove?t.insertAbove.getIndex()+1:0}#O(t,e){return"function"==typeof e&&(e=e(t)),e instanceof ns?e:t.copy(e)}#M(t,e){if(tt.remove());let r=this.#I.splice(t);console.debug(this.toString(),"removed steps: ",r),[...new Set(r.map(t=>t.tile))].filter(t=>0===this.getSteps(t).length).forEach(t=>t.removeItem(this)),r.forEach(t=>t.onRemove(t)),this.done=!1,this.#S=t-1,this.#E(this.#S)}return i}static CacheKeys=Object.freeze({MergeWith:"mergeWith"});static Events=Object.freeze({Collision:"beam-collision",Connection:"beam-connection",Merge:"beam-merge",Update:"beam-update"})}class nm extends nr(nl(nd(i3))){sortOrder=2;#L;constructor(t,e){super(...arguments);let i=e.openings.filter(t=>t?.color).flatMap(t=>Array.isArray(t.color)?t.color:[t.color]),n=a(iA).average(i.length?i:Array.isArray(e.color)?e.color:[e.color]).hex(),r=e.openings.map((t,e)=>t?new nm.#N(t.color||n,e,t.connected,t.on):t).filter(t=>t);this.#L=nm.ui(t,n,r),this.group.addChildren([...this.#L.openings,this.#L.terminus]),this.color=n,this.openings=r,this.radius=this.#L.radius,this.beams=r.map(t=>new ng(this,e.openings[t.direction],t)),this.update()}getColorElements(){return iq(this.openings.map(t=>t.color))}getOpening(t){return this.openings.find(e=>e.direction===t)}onMove(){this.beams.forEach(t=>t.remove())}onCollision({beam:t,collisionStep:e,currentStep:i,existingNextStep:n,nextStep:r}){if(console.debug(this.toString(),"collision",t.toString()),t.parent===this&&t.startDirection()===r.direction){console.debug(t.toString(),"ignoring starting terminus collision");return}let s=iK(i.direction),a=this.openings.find(t=>this.getDirection(t.direction)===s);return a&&a.color===r.color&&(!a.on||a.connected&&n?.state.get(na.TerminusConnection)?.terminus.equals(this))?(console.debug(t.toString(),"terminus connection",this.toString(),a),r.copy({done:!0,onAdd:()=>{r.onAdd(),this.onConnection(a.direction)},onRemove:()=>{r.onRemove(),this.onDisconnection(a.direction)},state:r.state.copy(new na.TerminusConnection(this,a))})):e}onConnection(t){let e=this.getOpening(t);e.connected||(e.connect(),this.update(),iV(nm.Events.Connection,{terminus:this,opening:e}))}onDisconnection(t){let e=this.getOpening(t);e.connected&&(e.disconnect(),this.update(),iV(nm.Events.Disconnection,{terminus:this,opening:e}))}onToggle(){this.updateState(t=>{this.openings.filter(t=>!t.connected).forEach(e=>{e.toggle(),t.openings[e.direction].on=e.on})}),this.update()}update(){this.beams.forEach(t=>{let e=t.getOpening();this.#L.openings.find(t=>t.data.direction===e.direction).opacity=e.on?1:nm.#z})}static #z=.3;static ui(t,e,i){let n=t.parameters.circumradius/2,r=new iP.Path.RegularPolygon({center:t.center,fillColor:e,opacity:1,sides:6,radius:n/2});return{openings:i.map(t=>{let e=t.direction,i=r.segments[(e+-1+6)%6].point,n=r.segments[(e+2+6)%6].point,s=n.subtract(i);s.angle+=120;let a=i.subtract(s);return new iP.Path({closed:!0,data:{collidable:!1,direction:e},fillColor:t.color,opacity:t.on?1:nm.#z,segments:[i,n,a]})}),radius:n,terminus:r}}static #N=class{constructor(t,e,i,n){this.colors=Array.isArray(t)?t:[t],this.color=a(iA).average(this.colors).hex(),this.direction=e,this.connected=!0===i,this.on=!0===n}connect(){this.connected=this.on=!0}disconnect(){this.connected=this.on=!1}toggle(){this.on=!this.on}};static Events=Object.freeze({Connection:"terminus-connection",Disconnection:"terminus-disconnection"})}var iP=u("hFpCu");class n_ extends nr(nl(i3)){#R;constructor(t,e){super(t,e,{rotationDegrees:30}),this.color=e.color||"black",this.#R=n_.item(t,this.color),this.group.addChild(this.#R)}midLine(){return[iG(this.#R.segments[3].point,this.#R.segments[0].point),iG(this.#R.segments[1].point,this.#R.segments[2].point)]}getSide(t){return function(t,e){let[i,n]=t;return Math.sign((n.x-i.x)*(e.y-i.y)-(n.y-i.y)*(e.x-i.x))}(this.midLine(),t)}isSameSide(t,e){return this.getSide(t)===this.getSide(e)}onCollision({beam:t,collision:e,collisions:i,collisionStep:n,currentStep:r,nextStep:s}){let a=iK(r.direction),o=function(t,e){let i=60*i$(t,!0);return i$(function(t,e){let i=t+e;return i<0?360+i:i>360?i-360:i}(i,(30*e-i)*2)/60%6,!1)}(a,this.rotation);if(o===r.direction)return console.debug(t.toString(),"stopping due to collision with non-reflective side of reflector"),n;if(o===a){if(console.debug(t.toString(),"stopping due to reflection back at self"),i.some(t=>t.item.type===i3.Types.beam))return;return s.copy({done:!0,state:s.state.copy(new na.Collision(e.copy({points:[s.point]})))})}if(!r.state.has(na.Reflector))return s.copy({state:s.state.copy(new na.Reflector(this))});let h=iW(r.point,s.tile.parameters.inradius,o);return s.copy({direction:o,point:h})}static item(t,e){let i=t.parameters.circumradius,n=t.parameters.circumradius/12,r=t.center.subtract(new iP.Point(n/2,i/2)),s=new iP.Size(n,i);return new iP.Path.Rectangle({data:{size:s},fillColor:e,point:r,size:s})}}var iP=u("hFpCu");class nv extends nr(nl(i3)){sortOrder=1;constructor(t,e){super(t,e,{rotationDegrees:60});let i=nv.item(t,e);this.group.addChildren(i)}static item(t,e){let i=t.parameters.circumradius/12,n=t.styles.default.strokeColor;return e.directions.map(e=>{let r=t.hexagon.segments[e].point,s=(e+1+6)%6,a=t.hexagon.segments[s].point;return new iP.Path({closed:!0,fillColor:n,segments:[r,t.hexagon.getLocationAt((0===e?t.hexagon.length:t.hexagon.getOffsetOf(r))-i),t.hexagon.getLocationAt((0===s?0:t.hexagon.getOffsetOf(a))+i),a]})})}}class ny extends ni{immutable=!0;name="block";title="Immutable"}class nb extends ni{immutable=!0;name="lock";title="Locked"}class nx extends nn{name="swap_horiz";title="Swap";moveItems(t){let e=t.items.filter(nn.movable),i=this.tile.items.filter(nn.movable);return i.forEach(e=>e.move(t)),e.forEach(t=>t.move(this.tile)),{moved:[nn.data(this.tile,t,i),nn.data(t,this.tile,e)],tiles:[this.tile,t]}}tileFilter(t){return t.modifiers.some(ni.immutable)||!t.items.filter(t=>t.type!==i3.Types.beam).length}}class nw extends i3{selected=!1;#L;constructor(t,e,i,n){super(null,n,{locked:!1}),this.#L=nw.ui(e,i,n,{coordinates:t,type:this.type}),this.center=this.#L.center,this.coordinates=t,this.hexagon=this.#L.hexagon,this.parameters=i,this.styles=this.#L.styles,this.group.addChildren([this.#L.hexagon,this.#L.indicator]),this.items=(n.items||[]).map(t=>(function(t,e){let i;switch(e.type){case i3.Types.filter:i=new no(t,e);break;case i3.Types.portal:i=new nu(t,e);break;case i3.Types.terminus:i=new nm(t,e);break;case i3.Types.reflector:i=new n_(t,e);break;case i3.Types.wall:i=new nv(t,e);break;default:console.error("Ignoring item with unknown type:",e.type)}return i&&i.onInitialization(),i})(this,t)).filter(t=>void 0!==t),this.modifiers=(n.modifiers||[]).map(t=>(function(t,e){let i;switch(e.type){case ni.Types.immutable:i=new ny(t,e);break;case ni.Types.lock:i=new nb(t,e);break;case ni.Types.move:i=new nn(t,e);break;case ni.Types.rotate:i=new nh(t,e);break;case ni.Types.swap:i=new nx(t,e);break;case ni.Types.toggle:i=new nc(t,e);break;default:console.error("Ignoring modifier with unknown type:",e.type)}return i})(this,t)).filter(t=>void 0!==t),this.update()}addItem(t){this.items.unshift(t),this.update()}addModifier(t){this.modifiers.unshift(t),this.update()}afterModify(){this.setStyle(this.selected?"selected":"default"),this.modifiers.forEach(t=>t.update({disabled:!1}))}beforeModify(){this.group.bringToFront(),this.setStyle("edit"),this.modifiers.forEach(t=>t.update({disabled:!0}))}getState(){let t={type:this.type},e=this.items.filter(t=>t.type!==i3.Types.beam).map(t=>t.getState());e.length&&(t.items=e);let i=this.modifiers.map(t=>t.getState());return i.length&&(t.modifiers=i),t}onTap(t){console.debug(this.coordinates.offset.toString(),this),this.items.forEach(e=>e.onTap(t))}onDeselected(t){this.selected=!1,this.#L.hexagon.style=this.styles.default,this.items.forEach(t=>t.onDeselected()),this.modifiers.forEach(t=>t.detach()),iV(nw.Events.Deselected,{selectedTile:t,deselectedTile:this})}onSelected(t){this.selected=!0,this.group.bringToFront(),this.#L.hexagon.style=this.styles.selected,this.items.forEach(t=>t.onSelected()),this.modifiers.forEach(t=>t.attach())}removeItem(t){let e=this.items.indexOf(t);e>=0&&(this.items.splice(e,1),this.update())}removeModifier(t){let e=this.modifiers.indexOf(t);e>=0&&(this.modifiers.splice(e,1),this.update())}setStyle(t){this.hexagon.set(this.styles[t])}teardown(){this.modifiers.forEach(t=>t.detach())}toString(){return this.coordinates.offset.toString()}update(){super.update(),this.#L.indicator.opacity=this.modifiers.length?1:0}static parameters(t){let e=t/2,i=Math.sqrt(3)*e;return{circumradius:e,height:t,inradius:i/2,offsetY:3/4*t,width:i}}static ui(t,e,i,n){let r=new iP.Point(t.startingOffsetX+e.inradius+t.column*e.width,t.startingOffsetY+e.circumradius+t.row*e.offsetY),s=e.circumradius/10,a=Object.assign({},nw.Styles,{edit:Object.assign({dashArray:[s,s]},nw.Styles.edit)},i.style||{}),o=new iP.Path.RegularPolygon({center:r,closed:!0,data:n,radius:e.circumradius,sides:6,style:a.default}),h=new iP.Path.RegularPolygon({center:iG(o.segments[1].point,r,t=>t/3),data:{collidable:!1},opacity:0,radius:e.circumradius/16,sides:6,style:{fillColor:"#ccc"}});return{center:r,hexagon:o,indicator:h,styles:a}}static Events=Object.freeze({Deselected:"tile-deselected",Selected:"tile-selected"});static Styles=Object.freeze({default:{dashArray:[],fillColor:new iP.Color("white"),strokeColor:new iP.Color("#666"),strokeWidth:1},edit:{strokeColor:new iP.Color("black"),strokeWidth:2},selected:{dashArray:[],strokeColor:new iP.Color("black"),strokeWidth:2}})}class nk extends i5{#B=[];#D=[];items=[];layers={};tiles=[];tileSize=120;constructor(t){super(t),this.type=t.type||nk.Types.oddR;let e=a(iP).view.center,i=nw.parameters(this.tileSize),n=t.tiles,r=n.length*i.width,s=e.y-r/2;this.layers.tiles=new iP.Layer,this.layers.items=new iP.Layer;let o=n.reduce((t,e,i)=>{let n=e.length;return n>t.length||n===t.length&&this.#F(i)?{index:i,length:n}:t},{index:0,length:0}),h=o.length*i.width+(this.#F(o.index)?i.inradius:0),l=e.x-h/2;for(let t=0;tt.group))),this.tiles.push(p),r[h.q]=p,a[u.c]=p}this.#B.push(r),this.#D.push(a)}}getTileByAxial(t){return(this.#B[t.r]||[])[t.q]}getTileByOffset(t){return this.#D[t.r][t.c]}getState(){return Object.assign(super.getState(),{tiles:this.#D.map(t=>t.map(t=>t?.getState()||null))})}getNeighboringTile(t,e){return this.getTileByAxial(i2.neighbor(t,i$(e)))}teardown(){Object.values(this.layers).forEach(t=>t.removeChildren())}#F(t){return t%2==0?this.type===nk.Types.evenR:this.type===nk.Types.oddR}static Types=Object.freeze({evenR:"even-r",oddR:"odd-r"})}var iP=(u("hFpCu"),u("hFpCu"));class nC extends i3{constructor(t,e){super(null,e,{locked:!1,type:i3.Types.mask});let i={type:this.type},n=new iP.Path.RegularPolygon({center:t.center,closed:!0,data:i,opacity:.25,radius:t.parameters.circumradius+1,sides:6,style:Object.assign({fillColor:"black"},e)});this.center=t.center,this.group.addChild(n)}}var iP=u("hFpCu");class nS extends i3{constructor(t){super(null,t,{type:i3.Types.collision});let{center:e,color:i}=t;this.center=e,this.color=i;let n=new iP.Path.Circle({center:e,closed:!0,radius:4,style:{fillColor:"white",strokeColor:i,strokeWidth:2}});this.group.addChild(n)}}const nI=Object.fromEntries(Object.entries({"001":{layout:{tiles:[[{items:[{color:"blue",openings:[null,null,null,{on:!0,type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{type:"Tile"}],[{type:"Tile"},{type:"Tile"},{type:"Tile"}],[{items:[{color:"red",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Toggle"}],type:"Tile"},{items:[{color:"blue",openings:[{type:"Beam"},null,null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}]},"002":{layout:{tiles:[[{items:[{color:"blue",openings:[null,null,null,{on:!0,type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{type:"Tile"}],[{type:"Tile"},{type:"Tile"},{type:"Tile"}],[{items:[{color:"red",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{clockwise:!1,type:"Rotate"}],type:"Tile"},{items:[{color:"blue",openings:[{type:"Beam"},null,null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}]},"003":{layout:{tiles:[[{items:[{color:"blue",openings:[null,null,null,{on:!0,type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{type:"Tile"}],[{type:"Tile"},{type:"Tile"},{type:"Tile"}],[{items:[{color:"red",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{color:"blue",openings:[{type:"Beam"},null,null,null,null,null],type:"Terminus"}],modifiers:[{clockwise:!1,type:"Rotate"}],type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}]},"004":{layout:{tiles:[[{items:[{color:"blue",openings:[null,null,null,null,{type:"Beam"},null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Rotate"}],type:"Tile"},{items:[{color:"blue",openings:[null,null,null,null,{on:!0,type:"Beam"},null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"}],[{type:"Tile"},{type:"Tile"},{type:"Tile"}],[{items:[{color:"red",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Swap"}],type:"Tile"},{type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}]},"005":{layout:{tiles:[[{type:"Tile"},{items:[{color:"blue",openings:[null,null,null,null,null,{on:!0,type:"Beam"}],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Move"}],type:"Tile"}],[{items:[{color:"blue",openings:[null,{type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{type:"Tile"},{items:[{color:"red",openings:[null,null,null,null,{type:"Beam"},null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"}],[{items:[{color:"red",openings:[null,null,{on:!0,type:"Beam"},null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Swap"},{clockwise:!1,type:"Rotate"}],type:"Tile"},{type:"Tile"}]],type:"even-r"},solution:[{amount:2,type:"Connections"}]},"006":{layout:{tiles:[[{items:[{rotation:2,type:"Reflector"}],modifiers:[{type:"Lock"},{type:"Swap"}],type:"Tile"},{items:[{type:"Reflector"}],modifiers:[{type:"Lock"}],type:"Tile"}],[{items:[{openings:[null,null,null,{color:"red",type:"Beam"},null,{color:"blue",on:!0,type:"Beam"}],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{type:"Tile"},{items:[{openings:[{color:"blue",type:"Beam"},null,{color:"red",on:!0,type:"Beam"},null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"}],[{items:[{type:"Reflector"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{rotation:2,type:"Reflector"}],modifiers:[{type:"Lock"},{type:"Swap"}],type:"Tile"}]],type:"even-r"},solution:[{amount:2,type:"Connections"}]},"007":{layout:{tiles:[[{items:[{color:"blue",openings:[null,null,{type:"Beam"},{on:!0,type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{type:"Tile"},{items:[{color:"blue",openings:[null,null,null,null,{type:"Beam"},{on:!0,type:"Beam"}],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{items:[{color:"red",openings:[null,null,{on:!0,type:"Beam"},{type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{type:"Tile"},{items:[{color:"red",openings:[null,null,null,null,{on:!0,type:"Beam"},{type:"Beam"}],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"}],[{type:"Tile"},{type:"Tile"},{items:[{rotation:3,type:"Reflector"}],modifiers:[{type:"Lock"},{type:"Rotate"}],type:"Tile"},{type:"Tile"},{type:"Tile"}],[null,{items:[{color:"blue",openings:[{type:"Beam"},{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{items:[{rotation:3,type:"Reflector"}],modifiers:[{type:"Move"}],type:"Tile"},{items:[{rotation:3,type:"Reflector"}],type:"Tile"},{items:[{color:"red",openings:[{on:!0,type:"Beam"},{type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"}]]},solution:[{amount:0,type:"Connections"},{amount:6,type:"Moves"}],version:1},"008":{layout:{tiles:[[{items:[{color:"blue",openings:[null,null,null,{type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Swap"}],type:"Tile"},{modifiers:[{type:"Lock"},{type:"Rotate"}],type:"Tile"},{modifiers:[{type:"Lock"},{type:"Toggle"}],type:"Tile"},{items:[{color:["red","blue"],openings:[null,null,null,null,{type:"Beam"},null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"}],[{items:[{type:"Reflector"}],modifiers:[{type:"Lock"},{type:"Move"}],type:"Tile"},{items:[{color:"blue",type:"Filter"}],modifiers:[{type:"Lock"},{type:"Move"}],type:"Tile"},{items:[{color:"red",type:"Filter"}],modifiers:[{type:"Lock"},{type:"Move"}],type:"Tile"},{items:[{type:"Reflector"}],modifiers:[{type:"Lock"},{type:"Move"}],type:"Tile"}],[null,{items:[{color:["red","blue"],openings:[null,{type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{modifiers:[{type:"Lock"},{type:"Toggle"}],type:"Tile"},{modifiers:[{type:"Lock"},{type:"Rotate"}],type:"Tile"},{items:[{color:"red",openings:[{type:"Beam"},null,null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Swap"}],type:"Tile"}]]},solution:[{amount:2,type:"Connections"}]},"009":{layout:{tiles:[[{type:"Tile"},{type:"Tile"},null,null,{type:"Tile"},{type:"Tile"}],[{items:[{color:"green",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{type:"Portal"}],modifiers:[{type:"Move"}],type:"Tile"},{type:"Tile"},null,{items:[{color:"green",openings:[null,null,null,{type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{type:"Portal"}],type:"Tile"},{items:[{type:"Reflector"}],modifiers:[{type:"Lock"}],type:"Tile"}],[{type:"Tile"},{type:"Tile"},null,null,{modifiers:[{type:"Immutable"}],type:"Tile"},{type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}]},"010":{layout:{tiles:[[{modifiers:[{type:"Immutable"}],type:"Tile"},{type:"Tile"},null,null,{type:"Tile"},{type:"Tile"}],[{items:[{color:"green",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{type:"Portal"}],modifiers:[{type:"Move"}],type:"Tile"},{type:"Tile"},null,{items:[{color:"green",openings:[null,null,null,{type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{type:"Portal"}],type:"Tile"},{items:[{type:"Reflector"}],modifiers:[{type:"Lock"}],type:"Tile"}],[{type:"Tile"},{type:"Tile"},null,null,{type:"Tile"},{type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}]},"011":{layout:{tiles:[[{items:[{type:"Portal"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{direction:5,type:"Portal"}],modifiers:[{type:"Lock"}],type:"Tile"}],[{items:[{openings:[null,null,{color:"blue",on:!0,type:"Beam"},null,null,null],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"},{items:[{direction:0,type:"Portal"}],modifiers:[{type:"Rotate"}],type:"Tile"},{items:[{openings:[null,null,null,null,null,{color:"blue",type:"Beam"}],type:"Terminus"}],modifiers:[{type:"Immutable"}],type:"Tile"}],[{items:[{direction:5,type:"Portal"}],modifiers:[{type:"Lock"}],type:"Tile"},{items:[{direction:5,type:"Portal"}],modifiers:[{type:"Lock"}],type:"Tile"}]],type:"even-r"},solution:[{amount:1,type:"Connections"}],version:1},test_infinite_loop:{layout:{tiles:[[{items:[{color:"red",openings:[null,null,null,{on:!0,type:"Beam"},null,null],type:"Terminus"}],type:"Tile"},{items:[{rotation:2,type:"Reflector"}],type:"Tile"},{type:"Tile"},{items:[{color:"red",openings:[null,null,null,null,null,{on:!0,type:"Beam"}],type:"Terminus"}],type:"Tile"}],[{type:"Tile"},{type:"Tile"},{type:"Tile"}],[null,{items:[{rotation:4,type:"Reflector"}],type:"Tile"},{items:[{rotation:2,type:"Reflector"}],type:"Tile"},{items:[{color:"blue",openings:[{on:!0,type:"Beam"},null,null,null,null,null],type:"Terminus"}],type:"Tile"}]]},solution:[{amount:100,type:"Connections"}]},test_layout:{layout:{tiles:[["o","x","x","x"],["x","x","x","x"],["x","x","x","x","x"],["x","x","x","x"],["o","x","x","x"]].map(t=>t.map(t=>"x"===t?{type:"Tile"}:null))},solution:[{amount:100,type:"Connections"}]},test_portal:{layout:{tiles:[[{items:[{direction:0,type:"Portal"}],modifiers:[{type:"Immutable"}],type:"Tile"},{items:[{direction:0,type:"Portal"}],modifiers:[{type:"Immutable"}],type:"Tile"},{items:[{openings:[null,null,null,{color:["red","blue"],type:"Beam"},null,null],type:"Terminus"}],modifiers:[{type:"Rotate"}],type:"Tile"},{items:[{openings:[null,null,null,null,{color:"green",type:"Beam"},null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Toggle"}],type:"Tile"}],[{items:[{openings:[{color:"red",type:"Beam"},null,null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Rotate"},{type:"Toggle"}],type:"Tile"},{items:[{openings:[{color:"blue",type:"Beam"},null,null,null,null,null],type:"Terminus"}],modifiers:[{type:"Lock"},{type:"Toggle"}],type:"Tile"},{items:[{direction:0,type:"Portal"}],modifiers:[{type:"Immutable"}],type:"Tile"}]]},solution:[{amount:1,type:"Connections"}]},test_reflector:{layout:{tiles:[[{items:[{color:"red",openings:[null,null,null,{on:!0,type:"Beam"},null,null],type:"Terminus"}],type:"Tile"}],[{items:[{type:"Reflector"}],modifiers:[{type:"Rotate"}],type:"Tile"}],[{items:[{color:"green",openings:[null,{on:!0,type:"Beam"},null,null,null,null],type:"Terminus"}],type:"Tile"},{items:[{color:"blue",openings:[{on:!0,type:"Beam"},null,null,null,null,null],type:"Terminus"}],type:"Tile"}]]},solution:[{amount:999,type:"Connections"}]}}).map(([t,e])=>[t,JSON.parse(JSON.stringify(e))]));function nT(t,e,i){let n=t.indexOf(e);return t[n<0?n:n+i]}class nE{ids;constructor(t){this.firstId=t[0],this.ids=t,this.lastId=t[t.length-1]}get(t){if(this.has(t))return structuredClone(nI[t])}has(t){return this.ids.includes(t)}nextId(t){return nT(this.ids,t,1)}previousId(t){return nT(this.ids,t,-1)}}const nA=new nE(Object.keys(nI).sort());nA.hidden=new nE(nA.ids.filter(t=>t.startsWith("test_"))),nA.titles=Object.fromEntries(nA.ids.map(t=>[t,nI[t].title||t])),nA.visible=new nE(nA.ids.filter(t=>!nA.hidden.has(t)));const nP=window.history,nM=window.localStorage;class nO{#V;#j;#U;#q;#Z;#H;#G;constructor(t,e,i,n,r,s){this.#U=t,this.#Z=e,this.#j=i||[],this.#q=n||this.#W(),this.#H=r,this.#G=s??e.version,this.#V=structuredClone(e),this.#j.filter((t,e)=>e<=this.#q).forEach(t=>this.apply(t)),this.#K(t)}apply(t){return"string"==typeof t&&(t=JSON.parse(t)),console.debug("StateManager: applying delta",t),iN.patch(this.#V,t)}canRedo(){return this.#q=0}encode(){return iR(JSON.stringify({id:this.#U,original:nA.has(this.#U)?void 0:this.#Z,deltas:this.#j,deltasIndex:this.#q,selectedTile:this.#H,version:this.#G}))}getCurrent(){return structuredClone(this.#V)}getId(){return this.#U}getTitle(){return this.getId()+(this.#V.title?` - ${this.#V.title}`:"")}getSelectedTile(){return this.#H}moves(){return this.#q+1}length(){return this.#j.length}redo(){let t=this.#q+1;t<=this.#W()&&(this.#V=structuredClone(this.#Z),this.#j.filter((e,i)=>i<=t).forEach(t=>this.apply(t)),this.#q=t,this.#K())}reset(){this.#V=structuredClone(this.#Z),this.#j=[],this.#q=this.#W(),this.#H=void 0,nO.clearCache(this.getId()),this.#K()}setSelectedTile(t){let e=t?.coordinates.offset.toString();this.#H!==e&&(this.#H=e,this.#K())}undo(){let t=this.#q-1;t>=-1&&(this.#V=structuredClone(this.#Z),this.#j.filter((e,i)=>i<=t).forEach(t=>this.apply(t)),this.#q=t,this.#K())}update(t){let e=iN.diff(this.#V,t);console.debug("delta",e),void 0!==e&&(this.#q""!==t);if(t||i.filter(t=>!nA.has(t)).some((i,n)=>{try{t=(e=nO.fromEncoded(i)).getId()}catch(t){console.debug(`Could not parse state from path segment '${n}'`,t)}return void 0!==e}),!e){t=t||i[0]||nM.getItem(nO.CacheKeys.id)||nA.visible.firstId;let n=nM.getItem(nO.key(nO.CacheKeys.state,t));if(n)try{e=nO.fromEncoded(n)}catch(e){console.debug(`Could not parse state with ID '${t}' from localStorage`,e)}}if(e){let i=e.#G,n=e.#Z.version;i!==n&&(console.debug(`Invalidating cache for ID ${t} due to version mismatch. Puzzle: ${n}, Cache: ${i}`),e=void 0,nO.clearCache(t))}if(e||(e=nO.fromId(t)),!e)throw Error(`Unable to resolve state for ID '${t}'`);return e}static key(t,e){return`${t}:${e}`}static CacheKeys=Object.freeze({center:"center",id:"id",state:"state",zoom:"zoom"});static ParamKeys=Object.freeze({clearCache:"clearCache"})}class nL{#Y=[];constructor(t){t.forEach(t=>this.#Q(t))}teardown(){this.#Y.forEach(t=>t.teardown()),nL.element.replaceChildren()}isSolved(){return this.#Y.every(t=>t.isMet())}#Q(t){switch(t.type){case nN.Types.connections:this.#Y.push(new nz(t));break;case nN.Types.moves:this.#Y.push(new nR(t));break;default:console.warn("Ignoring condition with unknown type:",t.type)}}static element=document.getElementById("solution")}class nN{constructor(t,e){this.state=t;let i=document.createElement("li");i.append(...e),nL.element.append(i)}isMet(){}teardown(){}update(){}static Types=Object.freeze(Object.fromEntries(["connections","moves"].map(t=>[t,iB(t)])))}class nz extends nN{#X;#J=new i6({context:this});#tt=[];constructor(t){let e=document.createElement("span");e.textContent="0";let i=document.createElement("span");i.textContent=t.amount.toString(),super(t,[e,iY("/"),i,iH("link","Connections")]),this.#X=e,this.#J.add([{type:nm.Events.Connection,handler:this.update},{type:nm.Events.Disconnection,handler:this.update}])}isMet(){return this.#tt.length===this.state.amount}teardown(){this.#J.remove(),super.teardown()}update(t){console.debug("Connections.update",t);let e=t.detail.terminus,i=t.detail.opening,n=`${e.id}:${i.direction}`,r=this.#tt.findIndex(t=>t===n);i.connected&&r<0?this.#tt.push(n):!i.connected&&r>=0&&this.#tt.splice(r,1),this.#X.textContent=this.#tt.length.toString()}}class nR extends nN{#X;#J=new i6({context:this});#te=0;constructor(t){if(t.operator??=nR.Operators.equalTo,!Object.values(nR.Operators).includes(t.operator))throw Error(`Invalid moves operator: ${t.operator}`);let e=document.createElement("span");e.textContent="0";let i=document.createElement("span");i.textContent=t.amount.toString(),super(t,[e,iY(t.operator),i,iH("stacks","Moves")]),this.#X=e,this.#J.add([{type:nD.Events.Updated,handler:this.update}])}isMet(){switch(this.state.operator){case nR.Operators.equalTo:return this.#te===this.state.amount;case nR.Operators.greaterThan:return this.#te>this.state.amount;case nR.Operators.lessThan:return this.#te",lessThan:"<"})}const nB=Object.freeze({main:document.getElementById("main"),message:document.getElementById("message"),next:document.getElementById("next"),previous:document.getElementById("previous"),puzzle:document.getElementById("puzzle"),puzzleId:document.getElementById("puzzle-id"),redo:document.getElementById("redo"),reset:document.getElementById("reset"),undo:document.getElementById("undo"),title:document.querySelector("title")});class nD{connections=[];debug=!1;error=!1;layers={};message;selectedTile;solved=!1;#ti;#tn=30;#tr={};#J=new i6({context:this});#ts;#ta=!1;#m;#to=[];#th;#t;#tl;#tu=[];constructor(){a(iP).settings.insertItems=!1,a(iP).setup(nB.puzzle),this.#tc(),this.layers.mask=new iP.Layer,this.layers.collisions=new iP.Layer,this.layers.debug=new iP.Layer,this.#J.add([{type:ng.Events.Update,handler:this.#td},{type:"change",element:nB.puzzleId,handler:this.#tp},{type:"click",element:nB.next,handler:this.#tf},{type:"click",element:nB.previous,handler:this.#tg},{type:"click",element:nB.redo,handler:this.#tm},{type:"click",element:nB.reset,handler:this.#t_},{type:"click",element:nB.undo,handler:this.#tv},{type:"keyup",handler:this.#ty},{type:ni.Events.Invoked,handler:this.#tb},{type:nD.Events.Mask,handler:this.#tx},{type:"resize",element:window,handler:function(t,e=500){let i;return(...n)=>{clearTimeout(i),i=setTimeout(()=>{t(...n)},e)}}(this.#tc)},{type:i5.Events.Update,handler:this.#tw},{type:"tap",element:nB.puzzle,handler:this.#tk}]),this.#ts=new i9(nB.puzzle),this.#tC(),this.select()}centerOnTile(t){let e=this.layout.getTileByOffset(t);a(iP).view.center=e.center}clearDebugPoints(){this.layers.debug.clear()}drawDebugPoint(t,e={}){let i=new iP.Path.Circle(Object.assign({radius:3,fillColor:"red",strokeColor:"white",strokeWidth:1,center:t},e));this.layers.debug.addChild(i)}getBeamsUpdateDelay(){return this.#tn}getItems(t){return(t?this.#tu.filter(e=>e===t):this.#tu).flatMap(t=>t.items)}getTile(t){let e=a(iP).project.hitTest(t.ceil(),{fill:!0,match:t=>t.item.data.type===i3.Types.tile,segments:!0,stroke:!0,tolerance:0});return e?this.layout.getTileByAxial(e.item.data.coordinates.axial):e}mask(t){if(this.#m){if(this.#m.equals(t))throw console.debug(t),Error(`Duplicate mask detected: ${t.id}`);this.#to.push(t);return}this.#m=t;let e=this.#tu.filter(t.tileFilter).map(e=>new nC(e,"function"==typeof t.configuration.style?t.configuration.style(e):t.configuration.style));this.layers.mask.addChildren(e.map(t=>t.group)),t.message&&(nB.message.textContent=t.message),t.onMask(this),document.body.classList.add(nD.Events.Mask)}select(t){if(void 0===t||t!==this.#t?.getId()){try{this.#t=nO.resolve(t)}catch(t){this.#tS(t,"Could not load puzzle.")}this.#tI()}}unmask(){this.layers.mask.removeChildren(),this.#tT(this.selectedTile),this.#m.onUnmask(this),this.#m=void 0,document.body.classList.remove(nD.Events.Mask);let t=this.#to.pop();t&&setTimeout(()=>this.mask(t),0)}update(){this.#m||this.#ta||(this.#ta=!0,this.#tE())}updateSelectedTile(t){let e=this.selectedTile;return this.selectedTile=t,this.#t.setSelectedTile(t),this.#tT(t),e&&e!==t&&e.onDeselected(t),t&&t!==e&&t.onSelected(e),e}updateState(){this.#t.update(Object.assign(this.#t.getCurrent(),{layout:this.layout.getState()})),this.#tA(),iV(nD.Events.Updated,{state:this.#t})}#tP(){[this.layout.layers.tiles,this.layout.layers.items,this.layers.mask,this.layers.collisions,this.layers.debug].forEach(t=>a(iP).project.addLayer(t))}#tf(){let t=nA.visible.nextId(this.#t.getId());t&&this.select(t)}#td(t){let e=t.detail.beam,i=t.detail.state;if(i?.has(na.Collision)){let t=i.get(na.Collision),n=nD.Collision.id(t.point),r=this.#tr[n];r?r.addBeam(e):this.#tr[n]=new nD.Collision(this.layers.collisions,[e],t.point);let s=this.#m?.configuration;s?.beam?.equals(e)&&this.unmask()}Object.values(this.#tr).forEach(t=>t.update()),this.#ti.filter(t=>t!==e).forEach(e=>e.onBeamUpdated(t,this)),setTimeout(()=>this.update(),0)}#tS(t,e,i){this.error=!0,"string"==typeof t&&(i=e=t,t=void 0),t&&console.error(t),(i=i??t?.cause)&&console.error("cause:",i),e=e??t?.message??"The puzzle has encountered an error, please consider reporting.",nB.message.textContent=e,document.body.classList.add(nD.Events.Error)}#ty(t){this.debug&&"s"===t.key&&this.update()}#tx(t){console.debug("Mask event",t),this.mask(t.detail.mask)}#tb(t){let e=t.detail.tile;this.#ti.sort(t=>e.items.some(e=>e===t)?-1:0).forEach(e=>e.onModifierInvoked(t,this)),setTimeout(()=>this.update(),0)}#tp(t){this.select(t.target.value)}#tM(){if(this.solved)return;this.solved=!0,this.updateSelectedTile(void 0),this.mask(nD.#tO);let t=document.createElement("span");t.classList.add("material-symbols-outlined"),t.textContent="celebration",t.title="Solved!",nB.message.replaceChildren(t),document.body.classList.add(nD.Events.Solved),iV(nD.Events.Solved)}#tw(){this.updateState()}#tk(t){let e;if(this.solved||this.error)return;let i=a(iP).project.hitTest(t.detail.point);switch(i?.item.data.type){case i3.Types.mask:return;case i3.Types.tile:e=this.layout.getTileByAxial(i.item.data.coordinates.axial)}if(this.#m)this.#m.onTap(this,e);else{let i=this.updateSelectedTile(e);e&&e===i&&e.onTap(t)}}#tg(){let t=nA.visible.previousId(this.#t.getId());t&&this.select(t)}#tm(){this.#t.redo(),this.#tI()}#tI(){this.error=!1,this.#t&&this.#tL(),this.#tN(),iV(nD.Events.Updated,{state:this.#t})}#tz(){Object.values(this.layers).forEach(t=>t.removeChildren()),a(iP).project.clear()}#t_(){this.#t.reset(),this.#tI()}#tc(){let{width:t,height:e}=nB.main.getBoundingClientRect();nB.puzzle.style.height=e+"px",nB.puzzle.style.width=t+"px",a(iP).view.viewSize=new iP.Size(t,e)}#tN(){i3.uniqueId=0;let{layout:t,message:e,solution:i}=this.#t.getCurrent();this.layout=new nk(t),this.message=e,this.#th=new nL(i),this.#tu=this.layout.tiles,this.#tl=this.layout.items.filter(t=>t.type===i3.Types.terminus),this.#ti=this.#tl.flatMap(t=>t.beams),this.#tP(),document.body.classList.add(nD.Events.Loaded);let n=this.#t.getSelectedTile(),r=n?this.layout.getTileByOffset(new i1(...n.split(","))):void 0;this.updateSelectedTile(r),this.update(),this.#tA()}#tL(){document.body.classList.remove(...Object.values(nD.Events)),this.#tz(),this.#tu.forEach(t=>t.teardown()),this.#tu=[],this.#th?.teardown(),this.#th=void 0,this.solved=!1,this.layout?.teardown(),this.layout=void 0,this.selectedTile=void 0,this.#ti=[],this.#tr={},this.#ta=!1,this.#m=void 0,this.#tl=[]}#tv(){this.#t.undo(),this.#tI()}#tA(){let t=this.#t.getId(),e=this.#t.getTitle();nB.title.textContent=`Beaming: Puzzle ${e}`,function(t,...e){e.forEach(e=>e.classList.remove(t))}("disabled",...Array.from(document.querySelectorAll("#actions li")));let i=[];this.#t.canUndo()||i.push(nB.undo),this.#t.canRedo()||i.push(nB.redo),nA.visible.has(t)?(nB.puzzleId.value=t,t===nA.visible.firstId?i.push(nB.previous):t===nA.visible.lastId&&i.push(nB.next)):(nB.puzzleId.value="",i.push(nB.previous,nB.next)),function(t,...e){e.forEach(e=>e.classList.add(t))}("disabled",...i)}#tC(){for(let t of(nB.puzzleId.replaceChildren(),nA.visible.ids)){let e=document.createElement("option");e.value=t,e.innerText=nA.titles[t],nB.puzzleId.append(e)}}#tE(){let t=this.#ti.filter(t=>t.isPending());if(!t.length){this.#ta=!1,setTimeout(()=>{this.#th.isSolved()&&this.#tM()},0);return}this.debug&&this.layers.debug.clear(),t.forEach(t=>t.step(this)),setTimeout(()=>this.#tE(),this.#tn)}#tT(t){if(t){let e=t.items.map(e=>e.getColorElements(t)).find(t=>t.length>0)||[];nB.message.replaceChildren(...e)}else nB.message.textContent=this.message||"Select a tile"}static Collision=class{constructor(t,e,i,n){this.id=nD.Collision.id(i),this.layer=t,this.beams=e,this.point=i,this.item=n}addBeam(t){return this.beams.some(e=>e.id===t.id)||this.beams.push(t),this.beams}addItem(t){this.item=new nS({center:this.point,color:t}),this.layer.addChild(this.item.group)}equals(t){return ij(this.point,t?.point)}getColor(){return this.beams.length?a(iA).average(this.beams.map(t=>t.getColor())).hex():void 0}removeItem(){this.item&&(this.item.remove(),this.item=void 0)}update(){this.beams=this.beams.filter(t=>this.equals(t.getCollision()));let t=this.getColor();this.item&&(!this.beams.length||this.item.color!==t)&&this.removeItem(),this.beams.length&&!this.item&&this.addItem(t)}static id(t){let e=t.round();return[e.x,e.y].join(",")}};static Events=Object.freeze({Error:"puzzle-error",Loaded:"puzzle-loaded",Mask:"puzzle-mask",Solved:"puzzle-solved",Updated:"puzzle-updated"});static Mask=class{constructor(t={}){t.style??={},this.configuration=t,this.id=t.id,this.message=t.message,this.tileFilter=t.tileFilter??iQ(!0),this.onMask=t.onMask??iQ,this.onTap=t.onTap??iQ,this.onUnmask=t.onUnmask??iQ}equals(t){return this.id===t.id}};static #tR=t=>t.type===i3.Types.beam&&t.isConnected();static #tO=new nD.Mask({style:t=>{let e=t.items.filter(nD.#tR).flatMap(e=>e.getSteps(t).flatMap(t=>t.color));return{fillColor:a(iA).average(e).hex()}},tileFilter:t=>t.items.some(nD.#tR)})}const nF=document.createElement("script");nF.setAttribute("src","https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS"),document.head.append(nF);const nV=window.dataLayer=window.dataLayer||[];function nj(){nV.push(arguments)}nj("js",new Date),nj("config","G-HXLD6EE5NS");const nU=window.doorbellOptions={appKey:"o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC",container:document.getElementById("feedback-container"),hideButton:!0,properties:{}},nq=document.createElement("script");nq.setAttribute("src","https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0"),document.head.append(nq),document.addEventListener("puzzle-updated",t=>{nU.properties.puzzleId=t.detail.state.getId()});const nZ=new nD,nH={debug:i0,puzzle:nZ};nH.centerOnTile=function(t,e){return nZ.centerOnTile(new i1(t,e))},nH.clearDebugPoints=nZ.clearDebugPoints.bind(nZ),nH.drawDebugPoint=function(t,e,i){return nZ.drawDebugPoint(new iP.Point(t,e),i)},window.beaming=nH; -//# sourceMappingURL=index.ae5e88e1.js.map + */(function(e,i){var n=(e=e||u("gFNhN")).window,r=e.document,s=new function(){var t=/^(statics|enumerable|beans|preserve)$/,e=[],n=e.slice,r=Object.create,s=Object.getOwnPropertyDescriptor,a=Object.defineProperty,o=e.forEach||function(t,e){for(var i=0,n=this.length;i0||l+r0?[["dictionary",n.definitions],r]:r},deserialize:function(t,e,i,n,r){var a=t,o=!i,h=o&&t&&t.length&&"dictionary"===t[0][0];if(i=i||{},Array.isArray(t)){var l=t[0],u="dictionary"===l;if(1==t.length&&/^#/.test(l))return i.dictionary[l];l=s.exports[l],a=[];for(var c=l?1:0,d=t.length;ct.length&&(n=t.length);for(var h=0;h0){var s=e[r],a=s&&s[n];a&&a.call(this,r)}}},statics:{inject:function t(e){var i=e._events;if(i){var n={};s.each(i,function(t,i){var r="string"==typeof t,a=r?t:i,o=s.capitalize(a),h=a.substring(2).toLowerCase();n[h]=r?{}:t,a="_"+a,e["get"+o]=function(){return this[a]},e["set"+o]=function(t){var e=this[a];e&&this.off(h,e),t&&this.on(h,t),this[a]=t}}),e._eventTypes=n}return t.base.apply(this,arguments)}}},o=s.extend({_class:"PaperScope",initialize:function t(){th=this,this.settings=new s({applyMatrix:!0,insertItems:!0,handleSize:4,hitTolerance:0}),this.project=null,this.projects=[],this.tools=[],this._id=t._id++,t._scopes[this._id]=this;var i=t.prototype;if(!this.support){var n=tr.getContext(1,1)||{};i.support={nativeDash:"setLineDash"in n||"mozDash"in n,nativeBlendModes:ts.nativeModes},tr.release(n)}if(!this.agent){var r=e.navigator.userAgent.toLowerCase(),a=(/(darwin|win|mac|linux|freebsd|sunos)/.exec(r)||[])[0],o="darwin"===a?"mac":a,h=i.agent=i.browser={platform:o};o&&(h[o]=!0),r.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\/?\s*([.\d]+)(?:.*version\/([.\d]+))?(?:.*rv\:v?([.\d]+))?/g,function(t,e,i,n,r){if(!h.chrome){var s="opera"===e?n:/^(node|trident)$/.test(e)?r:i;h.version=s,h.versionNumber=parseFloat(s),e=({trident:"msie",jsdom:"node"})[e]||e,h.name=e,h[e]=!0}}),h.chrome&&delete h.webkit,h.atom&&delete h.chrome}},version:"0.12.17",getView:function(){var t=this.project;return t&&t._view},getPaper:function(){return this},execute:function(t,e){var i=th.PaperScript.execute(t,this,e);return K.updateFocus(),i},install:function(t){var e=this;for(var i in s.each(["project","view","tool"],function(i){s.define(t,i,{configurable:!0,get:function(){return e[i]}})}),this)!/^_/.test(i)&&this[i]&&(t[i]=this[i])},setup:function(t){return th=this,this.project=new w(t),this},createCanvas:function(t,e){return tr.getCanvas(t,e)},activate:function(){th=this},clear:function(){for(var t=this.projects,e=this.tools,i=t.length-1;i>=0;i--)t[i].remove();for(var i=e.length-1;i>=0;i--)e[i].remove()},remove:function(){this.clear(),delete o._scopes[this._id]},statics:new function(){function t(t){return t+="Attribute",function(e,i){return e[t](i)||e[t]("data-paper-"+i)}}return{_scopes:{},_id:0,get:function(t){return this._scopes[t]||null},getAttribute:t("get"),hasAttribute:t("has")}}}),h=s.extend(a,{initialize:function(t){this._scope=th,this._index=this._scope[this._list].push(this)-1,(t||!this._scope[this._reference])&&this.activate()},activate:function(){if(!this._scope)return!1;var t=this._scope[this._reference];return t&&t!==this&&t.emit("deactivate"),this._scope[this._reference]=this,this.emit("activate",t),!0},isActive:function(){return this._scope[this._reference]===this},remove:function(){return null!=this._index&&(s.splice(this._scope[this._list],null,this._index,1),this._scope[this._reference]==this&&(this._scope[this._reference]=null),this._scope=null,!0)},getView:function(){return this._scope.getView()}}),l={findItemBoundsCollisions:function(t,e,i){function n(t){for(var e=Array(t.length),i=0;i>>1;a[t[s]][e]=o;(r||(x&&M||w&&P)&&T>=A[d]-i&&E<=A[p]+i)&&(x&&M&&k.push(s?I:I-o),w&&P&&_[I].push(b))}}if(x&&(t===e&&k.push(v),_[v]=k),m.length){var O=y[c],N=l(m,c,O);m.splice(N+1,0,v)}else m.push(v)}for(var g=0;g<_.length;g++){var L=_[g];L&&L.sort(function(t,e){return t-e})}return _}},c=s.extend({initialize:function(t){this.precision=s.pick(t,5),this.multiplier=Math.pow(10,this.precision)},number:function(t){return this.precision<16?Math.round(t*this.multiplier)/this.multiplier:t},pair:function(t,e,i){return this.number(t)+(i||",")+this.number(e)},point:function(t,e){return this.number(t.x)+(e||",")+this.number(t.y)},size:function(t,e){return this.number(t.width)+(e||",")+this.number(t.height)},rectangle:function(t,e){return this.point(t,e)+(e||",")+this.size(t,e)}});c.instance=new c;var d=new function(){var t=[[.5773502691896257],[0,.7745966692414834],[.33998104358485626,.8611363115940526],[0,.5384693101056831,.906179845938664],[.2386191860831969,.6612093864662645,.932469514203152],[0,.4058451513773972,.7415311855993945,.9491079123427585],[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499]],e=[[1],[.8888888888888888,.5555555555555556],[.6521451548625461,.34785484513745385],[.5688888888888889,.47862867049936647,.23692688505618908],[.46791393457269104,.3607615730481386,.17132449237917036],[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096]],i=Math.abs,n=Math.sqrt,r=Math.pow,s=Math.log2||function(t){return Math.log(t)*Math.LOG2E};function a(t,e,i){return ti?i:t}function o(t,e,n){function r(t){var e=134217729*t,i=t-e+e;return[i,t-i]}var s=e*e-t*n,a=e*e+t*n;if(3*i(s)1e8)?r(2,-Math.round(s(t))):0}return{EPSILON:1e-12,MACHINE_EPSILON:112e-18,CURVETIME_EPSILON:1e-8,GEOMETRIC_EPSILON:1e-7,TRIGONOMETRIC_EPSILON:1e-8,ANGULAR_EPSILON:1e-5,KAPPA:4*(n(2)-1)/3,isZero:function(t){return t>=-.000000000001&&t<=1e-12},isMachineZero:function(t){return t>=-.000000000000000112&&t<=112e-18},clamp:a,integrate:function(i,n,r,s){for(var a=t[s-2],o=e[s-2],h=(r-n)*.5,l=h+n,u=0,c=s+1>>1,d=1&s?o[u++]*i(l):0;u0?(s=n,n=d<=r?(r+s)*.5:d):(r=n,n=d>=s?(r+s)*.5:d)}return a(n,r,s)},solveQuadratic:function(t,e,r,s,l,u){var c,d=1/0;if(1e-12>i(t)){if(1e-12>i(e))return 1e-12>i(r)?-1:0;c=-r/e}else{var p=o(t,e*=-.5,r);if(p&&112e-18>i(p)){var f=h(i(t),i(e),i(r));f&&(t*=f,e*=f,r*=f,p=o(t,e,r))}if(p>=-.000000000000000112){var g=p<0?0:n(p),m=e+(e<0?-g:g);0===m?d=-(c=r/t):(c=m/t,d=r/m)}}var _=0,v=null==l,y=l-1e-12,b=u+1e-12;return isFinite(c)&&(v||c>y&&cy&&di(t))t=e,f=s,g=o,p=1/0;else if(1e-12>i(o))f=e,g=s,p=0;else{y(-(e/t)/3);var b=_/t,x=r(i(b),1/3),w=b<0?-1:1,k=-m/t,C=k>0?1.324717957244746*Math.max(x,n(k)):x,S=p-w*C;if(S!==p){do y(S),S=0===m?p:p-_/m/1.0000000000000002;while(w*S>w*p)i(t)*p*p>i(o/p)&&(f=((g=-o/p)-s)/p)}}var I=d.solveQuadratic(t,f,g,l,u,c),T=null==u;return isFinite(p)&&(0===I||I>0&&p!==l[0]&&p!==l[1])&&(T||p>u-1e-12&&p1?a[1]:a[0])):"x"in a?this._set(a.x||0,a.y||0):"width"in a?this._set(a.width||0,a.height||0):"angle"in a?(this._set(a.length||0,0),this.setAngle(a.angle||0)):(this._set(0,0),r=0)}return n&&(this.__read=r),this},set:"#initialize",_set:function(t,e){return this.x=t,this.y=e,this},equals:function(t){return this===t||t&&(this.x===t.x&&this.y===t.y||Array.isArray(t)&&this.x===t[0]&&this.y===t[1])||!1},clone:function(){return new f(this.x,this.y)},toString:function(){var t=c.instance;return"{ x: "+t.number(this.x)+", y: "+t.number(this.y)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.x),e.number(this.y)]},getLength:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},setLength:function(t){if(this.isZero()){var e=this._angle||0;this._set(Math.cos(e)*t,Math.sin(e)*t)}else{var i=t/this.getLength();d.isZero(i)&&this.getAngle(),this._set(this.x*i,this.y*i)}},getAngle:function(){return 180*this.getAngleInRadians.apply(this,arguments)/Math.PI},setAngle:function(t){this.setAngleInRadians.call(this,t*Math.PI/180)},getAngleInDegrees:"#getAngle",setAngleInDegrees:"#setAngle",getAngleInRadians:function(){if(!arguments.length)return this.isZero()?this._angle||0:this._angle=Math.atan2(this.y,this.x);var t=f.read(arguments),e=this.getLength()*t.getLength();if(d.isZero(e))return NaN;var i=this.dot(t)/e;return Math.acos(i<-1?-1:i>1?1:i)},setAngleInRadians:function(t){if(this._angle=t,!this.isZero()){var e=this.getLength();this._set(Math.cos(t)*e,Math.sin(t)*e)}},getQuadrant:function(){return this.x>=0?this.y>=0?1:4:this.y>=0?2:3}},{beans:!1,getDirectedAngle:function(){var t=f.read(arguments);return 180*Math.atan2(this.cross(t),this.dot(t))/Math.PI},getDistance:function(){var t=arguments,e=f.read(t),i=e.x-this.x,n=e.y-this.y,r=i*i+n*n;return s.read(t)?r:Math.sqrt(r)},normalize:function(t){t===i&&(t=1);var e=this.getLength(),n=0!==e?t/e:0,r=new f(this.x*n,this.y*n);return n>=0&&(r._angle=this._angle),r},rotate:function(t,e){if(0===t)return this.clone();t=t*Math.PI/180;var i=e?this.subtract(e):this,n=Math.sin(t),r=Math.cos(t);return i=new f(i.x*r-i.y*n,i.x*n+i.y*r),e?i.add(e):i},transform:function(t){return t?t._transformPoint(this):this},add:function(){var t=f.read(arguments);return new f(this.x+t.x,this.y+t.y)},subtract:function(){var t=f.read(arguments);return new f(this.x-t.x,this.y-t.y)},multiply:function(){var t=f.read(arguments);return new f(this.x*t.x,this.y*t.y)},divide:function(){var t=f.read(arguments);return new f(this.x/t.x,this.y/t.y)},modulo:function(){var t=f.read(arguments);return new f(this.x%t.x,this.y%t.y)},negate:function(){return new f(-this.x,-this.y)},isInside:function(){return v.read(arguments).contains(this)},isClose:function(){var t=arguments,e=f.read(t),i=s.read(t);return this.getDistance(e)<=i},isCollinear:function(){var t=f.read(arguments);return f.isCollinear(this.x,this.y,t.x,t.y)},isColinear:"#isCollinear",isOrthogonal:function(){var t=f.read(arguments);return f.isOrthogonal(this.x,this.y,t.x,t.y)},isZero:function(){var t=d.isZero;return t(this.x)&&t(this.y)},isNaN:function(){return isNaN(this.x)||isNaN(this.y)},isInQuadrant:function(t){return this.x*(t>1&&t<4?-1:1)>=0&&this.y*(t>2?-1:1)>=0},dot:function(){var t=f.read(arguments);return this.x*t.x+this.y*t.y},cross:function(){var t=f.read(arguments);return this.x*t.y-this.y*t.x},project:function(){var t=f.read(arguments),e=t.isZero()?0:this.dot(t)/t.dot(t);return new f(t.x*e,t.y*e)},statics:{min:function(){var t=arguments,e=f.read(t),i=f.read(t);return new f(Math.min(e.x,i.x),Math.min(e.y,i.y))},max:function(){var t=arguments,e=f.read(t),i=f.read(t);return new f(Math.max(e.x,i.x),Math.max(e.y,i.y))},random:function(){return new f(Math.random(),Math.random())},isCollinear:function(t,e,i,n){return Math.abs(t*n-e*i)<=1e-8*Math.sqrt((t*t+e*e)*(i*i+n*n))},isOrthogonal:function(t,e,i,n){return Math.abs(t*i+e*n)<=1e-8*Math.sqrt((t*t+e*e)*(i*i+n*n))}}},s.each(["round","ceil","floor","abs"],function(t){var e=Math[t];this[t]=function(){return new f(e(this.x),e(this.y))}},{})),g=f.extend({initialize:function(t,e,i,n){this._x=t,this._y=e,this._owner=i,this._setter=n},_set:function(t,e,i){return this._x=t,this._y=e,i||this._owner[this._setter](this),this},getX:function(){return this._x},setX:function(t){this._x=t,this._owner[this._setter](this)},getY:function(){return this._y},setY:function(t){this._y=t,this._owner[this._setter](this)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(t){this._owner._changeSelection(this._getSelection(),t)},_getSelection:function(){return"setPosition"===this._setter?4:0}}),m=s.extend({_class:"Size",_readIndex:!0,initialize:function(t,e){var i=typeof t,n=this.__read,r=0;if("number"===i){var s="number"==typeof e;this._set(t,s?e:t),n&&(r=s?2:1)}else if("undefined"===i||null===t)this._set(0,0),n&&(r=null===t?1:0);else{var a="string"===i?t.split(/[\s,]+/)||[]:t;r=1,Array.isArray(a)?this._set(+a[0],+(a.length>1?a[1]:a[0])):"width"in a?this._set(a.width||0,a.height||0):"x"in a?this._set(a.x||0,a.y||0):(this._set(0,0),r=0)}return n&&(this.__read=r),this},set:"#initialize",_set:function(t,e){return this.width=t,this.height=e,this},equals:function(t){return t===this||t&&(this.width===t.width&&this.height===t.height||Array.isArray(t)&&this.width===t[0]&&this.height===t[1])||!1},clone:function(){return new m(this.width,this.height)},toString:function(){var t=c.instance;return"{ width: "+t.number(this.width)+", height: "+t.number(this.height)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.width),e.number(this.height)]},add:function(){var t=m.read(arguments);return new m(this.width+t.width,this.height+t.height)},subtract:function(){var t=m.read(arguments);return new m(this.width-t.width,this.height-t.height)},multiply:function(){var t=m.read(arguments);return new m(this.width*t.width,this.height*t.height)},divide:function(){var t=m.read(arguments);return new m(this.width/t.width,this.height/t.height)},modulo:function(){var t=m.read(arguments);return new m(this.width%t.width,this.height%t.height)},negate:function(){return new m(-this.width,-this.height)},isZero:function(){var t=d.isZero;return t(this.width)&&t(this.height)},isNaN:function(){return isNaN(this.width)||isNaN(this.height)},statics:{min:function(t,e){return new m(Math.min(t.width,e.width),Math.min(t.height,e.height))},max:function(t,e){return new m(Math.max(t.width,e.width),Math.max(t.height,e.height))},random:function(){return new m(Math.random(),Math.random())}}},s.each(["round","ceil","floor","abs"],function(t){var e=Math[t];this[t]=function(){return new m(e(this.width),e(this.height))}},{})),_=m.extend({initialize:function(t,e,i,n){this._width=t,this._height=e,this._owner=i,this._setter=n},_set:function(t,e,i){return this._width=t,this._height=e,i||this._owner[this._setter](this),this},getWidth:function(){return this._width},setWidth:function(t){this._width=t,this._owner[this._setter](this)},getHeight:function(){return this._height},setHeight:function(t){this._height=t,this._owner[this._setter](this)}}),v=s.extend({_class:"Rectangle",_readIndex:!0,beans:!0,initialize:function(t,e,n,r){var a,o=arguments,h=typeof t;if("number"===h?(this._set(t,e,n,r),a=4):"undefined"===h||null===t?(this._set(0,0,0,0),a=null===t?1:0):1===o.length&&(Array.isArray(t)?(this._set.apply(this,t),a=1):t.x!==i||t.width!==i?(this._set(t.x||0,t.y||0,t.width||0,t.height||0),a=1):t.from===i&&t.to===i&&(this._set(0,0,0,0),s.readSupported(o,this)&&(a=1))),a===i){var l,u,c=f.readNamed(o,"from"),d=s.peek(o),p=c.x,g=c.y;if(d&&d.x!==i||s.hasNamed(o,"to")){var _=f.readNamed(o,"to");l=_.x-p,u=_.y-g,l<0&&(p=_.x,l=-l),u<0&&(g=_.y,u=-u)}else{var v=m.read(o);l=v.width,u=v.height}this._set(p,g,l,u),a=o.__index}var y=o.__filtered;return y&&(this.__filtered=y),this.__read&&(this.__read=a),this},set:"#initialize",_set:function(t,e,i,n){return this.x=t,this.y=e,this.width=i,this.height=n,this},clone:function(){return new v(this.x,this.y,this.width,this.height)},equals:function(t){var e=s.isPlainValue(t)?v.read(arguments):t;return e===this||e&&this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height||!1},toString:function(){var t=c.instance;return"{ x: "+t.number(this.x)+", y: "+t.number(this.y)+", width: "+t.number(this.width)+", height: "+t.number(this.height)+" }"},_serialize:function(t){var e=t.formatter;return[e.number(this.x),e.number(this.y),e.number(this.width),e.number(this.height)]},getPoint:function(t){return new(t?f:g)(this.x,this.y,this,"setPoint")},setPoint:function(){var t=f.read(arguments);this.x=t.x,this.y=t.y},getSize:function(t){return new(t?m:_)(this.width,this.height,this,"setSize")},_fw:1,_fh:1,setSize:function(){var t=m.read(arguments),e=this._sx,i=this._sy,n=t.width,r=t.height;e&&(this.x+=(this.width-n)*e),i&&(this.y+=(this.height-r)*i),this.width=n,this.height=r,this._fw=this._fh=1},getLeft:function(){return this.x},setLeft:function(t){if(!this._fw){var e=t-this.x;this.width-=.5===this._sx?2*e:e}this.x=t,this._sx=this._fw=0},getTop:function(){return this.y},setTop:function(t){if(!this._fh){var e=t-this.y;this.height-=.5===this._sy?2*e:e}this.y=t,this._sy=this._fh=0},getRight:function(){return this.x+this.width},setRight:function(t){if(!this._fw){var e=t-this.x;this.width=.5===this._sx?2*e:e}this.x=t-this.width,this._sx=1,this._fw=0},getBottom:function(){return this.y+this.height},setBottom:function(t){if(!this._fh){var e=t-this.y;this.height=.5===this._sy?2*e:e}this.y=t-this.height,this._sy=1,this._fh=0},getCenterX:function(){return this.x+this.width/2},setCenterX:function(t){this._fw||.5===this._sx?this.x=t-this.width/2:(this._sx&&(this.x+=(t-this.x)*2*this._sx),this.width=(t-this.x)*2),this._sx=.5,this._fw=0},getCenterY:function(){return this.y+this.height/2},setCenterY:function(t){this._fh||.5===this._sy?this.y=t-this.height/2:(this._sy&&(this.y+=(t-this.y)*2*this._sy),this.height=(t-this.y)*2),this._sy=.5,this._fh=0},getCenter:function(t){return new(t?f:g)(this.getCenterX(),this.getCenterY(),this,"setCenter")},setCenter:function(){var t=f.read(arguments);return this.setCenterX(t.x),this.setCenterY(t.y),this},getArea:function(){return this.width*this.height},isEmpty:function(){return 0===this.width||0===this.height},contains:function(t){return t&&t.width!==i||4===(Array.isArray(t)?t:arguments).length?this._containsRectangle(v.read(arguments)):this._containsPoint(f.read(arguments))},_containsPoint:function(t){var e=t.x,i=t.y;return e>=this.x&&i>=this.y&&e<=this.x+this.width&&i<=this.y+this.height},_containsRectangle:function(t){var e=t.x,i=t.y;return e>=this.x&&i>=this.y&&e+t.width<=this.x+this.width&&i+t.height<=this.y+this.height},intersects:function(){var t=v.read(arguments),e=s.read(arguments)||0;return t.x+t.width>this.x-e&&t.y+t.height>this.y-e&&t.x=4&&(t[1]+=n?"Y":"X");var r=t[n?0:1],s=t[n?1:0],a="get"+r,o="get"+s,h="set"+r,l="set"+s,u="get"+i,c="set"+i;this[u]=function(t){return new(t?f:g)(this[a](),this[o](),this,c)},this[c]=function(){var t=f.read(arguments);this[h](t.x),this[l](t.y)}},{beans:!0})),y=v.extend({initialize:function(t,e,i,n,r,s){this._set(t,e,i,n,!0),this._owner=r,this._setter=s},_set:function(t,e,i,n,r){return this._x=t,this._y=e,this._width=i,this._height=n,r||this._owner[this._setter](this),this}},new function(){var t=v.prototype;return s.each(["x","y","width","height"],function(t){var e=s.capitalize(t),i="_"+t;this["get"+e]=function(){return this[i]},this["set"+e]=function(t){this[i]=t,this._dontNotify||this._owner[this._setter](this)}},s.each(["Point","Size","Center","Left","Top","Right","Bottom","CenterX","CenterY","TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],function(e){var i="set"+e;this[i]=function(){this._dontNotify=!0,t[i].apply(this,arguments),this._dontNotify=!1,this._owner[this._setter](this)}},{isSelected:function(){return!!(2&this._owner._selection)},setSelected:function(t){var e=this._owner;e._changeSelection&&e._changeSelection(2,t)}}))}),b=s.extend({_class:"Matrix",initialize:function t(e,i){var n=arguments,r=n.length,s=!0;if(r>=6?this._set.apply(this,n):1===r||2===r?e instanceof t?this._set(e._a,e._b,e._c,e._d,e._tx,e._ty,i):Array.isArray(e)?this._set.apply(this,i?e.concat([i]):e):s=!1:r?s=!1:this.reset(),!s)throw Error("Unsupported matrix parameters");return this},set:"#initialize",_set:function(t,e,i,n,r,s,a){return this._a=t,this._b=e,this._c=i,this._d=n,this._tx=r,this._ty=s,a||this._changed(),this},_serialize:function(t,e){return s.serialize(this.getValues(),t,!0,e)},_changed:function(){var t=this._owner;t&&(t._applyMatrix?t.transform(null,!0):t._changed(25))},clone:function(){return new b(this._a,this._b,this._c,this._d,this._tx,this._ty)},equals:function(t){return t===this||t&&this._a===t._a&&this._b===t._b&&this._c===t._c&&this._d===t._d&&this._tx===t._tx&&this._ty===t._ty},toString:function(){var t=c.instance;return"[["+[t.number(this._a),t.number(this._c),t.number(this._tx)].join(", ")+"], ["+[t.number(this._b),t.number(this._d),t.number(this._ty)].join(", ")+"]]"},reset:function(t){return this._a=this._d=1,this._b=this._c=this._tx=this._ty=0,t||this._changed(),this},apply:function(t,e){var i=this._owner;return!!i&&(i.transform(null,s.pick(t,!0),e),this.isIdentity())},translate:function(){var t=f.read(arguments),e=t.x,i=t.y;return this._tx+=e*this._a+i*this._c,this._ty+=e*this._b+i*this._d,this._changed(),this},scale:function(){var t=arguments,e=f.read(t),i=f.read(t,0,{readNull:!0});return i&&this.translate(i),this._a*=e.x,this._b*=e.x,this._c*=e.y,this._d*=e.y,i&&this.translate(i.negate()),this._changed(),this},rotate:function(t){t*=Math.PI/180;var e=f.read(arguments,1),i=e.x,n=e.y,r=Math.cos(t),s=Math.sin(t),a=i-i*r+n*s,o=n-i*s-n*r,h=this._a,l=this._b,u=this._c,c=this._d;return this._a=r*h+s*u,this._b=r*l+s*c,this._c=-s*h+r*u,this._d=-s*l+r*c,this._tx+=a*h+o*u,this._ty+=a*l+o*c,this._changed(),this},shear:function(){var t=arguments,e=f.read(t),i=f.read(t,0,{readNull:!0});i&&this.translate(i);var n=this._a,r=this._b;return this._a+=e.y*this._c,this._b+=e.y*this._d,this._c+=e.x*n,this._d+=e.x*r,i&&this.translate(i.negate()),this._changed(),this},skew:function(){var t=arguments,e=f.read(t),i=f.read(t,0,{readNull:!0}),n=Math.PI/180,r=new f(Math.tan(e.x*n),Math.tan(e.y*n));return this.shear(r,i)},append:function(t,e){if(t){var i=this._a,n=this._b,r=this._c,s=this._d,a=t._a,o=t._c,h=t._b,l=t._d,u=t._tx,c=t._ty;this._a=a*i+h*r,this._c=o*i+l*r,this._b=a*n+h*s,this._d=o*n+l*s,this._tx+=u*i+c*r,this._ty+=u*n+c*s,e||this._changed()}return this},prepend:function(t,e){if(t){var i=this._a,n=this._b,r=this._c,s=this._d,a=this._tx,o=this._ty,h=t._a,l=t._c,u=t._b,c=t._d,d=t._tx,p=t._ty;this._a=h*i+l*n,this._c=h*r+l*s,this._b=u*i+c*n,this._d=u*r+c*s,this._tx=h*a+l*o+d,this._ty=u*a+c*o+p,e||this._changed()}return this},appended:function(t){return this.clone().append(t)},prepended:function(t){return this.clone().prepend(t)},invert:function(){var t=this._a,e=this._b,i=this._c,n=this._d,r=this._tx,s=this._ty,a=t*n-e*i,o=null;return a&&!isNaN(a)&&isFinite(r)&&isFinite(s)&&(this._a=n/a,this._b=-e/a,this._c=-i/a,this._d=t/a,this._tx=(i*s-n*r)/a,this._ty=(e*r-t*s)/a,o=this),o},inverted:function(){return this.clone().invert()},concatenate:"#append",preConcatenate:"#prepend",chain:"#appended",_shiftless:function(){return new b(this._a,this._b,this._c,this._d,0,0)},_orNullIfIdentity:function(){return this.isIdentity()?null:this},isIdentity:function(){return 1===this._a&&0===this._b&&0===this._c&&1===this._d&&0===this._tx&&0===this._ty},isInvertible:function(){var t=this._a*this._d-this._c*this._b;return t&&!isNaN(t)&&isFinite(this._tx)&&isFinite(this._ty)},isSingular:function(){return!this.isInvertible()},transform:function(t,e,i){return arguments.length<3?this._transformPoint(f.read(arguments)):this._transformCoordinates(t,e,i)},_transformPoint:function(t,e,i){var n=t.x,r=t.y;return e||(e=new f),e._set(n*this._a+r*this._c+this._tx,n*this._b+r*this._d+this._ty,i)},_transformCoordinates:function(t,e,i){for(var n=0,r=2*i;ns[h]&&(s[h]=o)}return e||(e=new v),e._set(r[0],r[1],s[0]-r[0],s[1]-r[1],i)},inverseTransform:function(){return this._inverseTransform(f.read(arguments))},_inverseTransform:function(t,e,i){var n=this._a,r=this._b,s=this._c,a=this._d,o=this._tx,h=this._ty,l=n*a-r*s,u=null;if(l&&!isNaN(l)&&isFinite(o)&&isFinite(h)){var c=t.x-this._tx,d=t.y-this._ty;e||(e=new f),u=e._set((c*a-d*s)/l,(d*n-c*r)/l,i)}return u},decompose:function(){var t,e,i,n=this._a,r=this._b,s=this._c,a=this._d,o=n*a-r*s,h=Math.sqrt,l=Math.atan2,u=180/Math.PI;if(0!==n||0!==r){var c=h(n*n+r*r);t=Math.acos(n/c)*(r>0?1:-1),e=[c,o/c],i=[l(n*s+r*a,c*c),0]}else if(0!==s||0!==a){var d=h(s*s+a*a);t=Math.asin(s/d)*(a>0?1:-1),e=[o/d,d],i=[0,l(n*s+r*a,d*d)]}else t=0,i=e=[0,0];return{translation:this.getTranslation(),rotation:t*u,scaling:new f(e),skewing:new f(i[0]*u,i[1]*u)}},getValues:function(){return[this._a,this._b,this._c,this._d,this._tx,this._ty]},getTranslation:function(){return new f(this._tx,this._ty)},getScaling:function(){return this.decompose().scaling},getRotation:function(){return this.decompose().rotation},applyToContext:function(t){this.isIdentity()||t.transform(this._a,this._b,this._c,this._d,this._tx,this._ty)}},s.each(["a","b","c","d","tx","ty"],function(t){var e=s.capitalize(t),i="_"+t;this["get"+e]=function(){return this[i]},this["set"+e]=function(t){this[i]=t,this._changed()}},{})),x=s.extend({_class:"Line",initialize:function(t,e,i,n,r){var s=!1;arguments.length>=4?(this._px=t,this._py=e,this._vx=i,this._vy=n,s=r):(this._px=t.x,this._py=t.y,this._vx=e.x,this._vy=e.y,s=i),s||(this._vx-=this._px,this._vy-=this._py)},getPoint:function(){return new f(this._px,this._py)},getVector:function(){return new f(this._vx,this._vy)},getLength:function(){return this.getVector().getLength()},intersect:function(t,e){return x.intersect(this._px,this._py,this._vx,this._vy,t._px,t._py,t._vx,t._vy,!0,e)},getSide:function(t,e){return x.getSide(this._px,this._py,this._vx,this._vy,t.x,t.y,!0,e)},getDistance:function(t){return Math.abs(this.getSignedDistance(t))},getSignedDistance:function(t){return x.getSignedDistance(this._px,this._py,this._vx,this._vy,t.x,t.y,!0)},isCollinear:function(t){return f.isCollinear(this._vx,this._vy,t._vx,t._vy)},isOrthogonal:function(t){return f.isOrthogonal(this._vx,this._vy,t._vx,t._vy)},statics:{intersect:function(t,e,i,n,r,s,a,o,h,l){h||(i-=t,n-=e,a-=r,o-=s);var u=i*o-n*a;if(!d.isMachineZero(u)){var c=t-r,p=e-s,g=(a*p-o*c)/u,m=(i*p-n*c)/u;if(l||-.000000000001=1?1:g),new f(t+g*i,e+g*n)}},getSide:function(t,e,i,n,r,s,a,o){a||(i-=t,n-=e);var h=r-t,l=h*n-(s-e)*i;return!o&&d.isMachineZero(l)&&(l=(h*i+h*i)/(i*i+n*n))>=0&&l<=1&&(l=0),l<0?-1:l>0?1:0},getSignedDistance:function(t,e,i,n,r,s,a){return a||(i-=t,n-=e),0===i?n>0?r-t:t-r:0===n?i<0?s-e:e-s:((r-t)*n-(s-e)*i)/(n>i?n*Math.sqrt(1+i*i/(n*n)):i*Math.sqrt(1+n*n/(i*i)))},getDistance:function(t,e,i,n,r,s,a){return Math.abs(x.getSignedDistance(t,e,i,n,r,s,a))}}}),w=h.extend({_class:"Project",_list:"projects",_reference:"project",_compactSerialize:!0,initialize:function(t){h.call(this,!0),this._children=[],this._namedChildren={},this._activeLayer=null,this._currentStyle=new H(null,null,this),this._view=K.create(this,t||tr.getCanvas(1,1)),this._selectionItems={},this._selectionCount=0,this._updateVersion=0},_serialize:function(t,e){return s.serialize(this._children,t,!0,e)},_changed:function(t,e){if(1&t){var i=this._view;i&&(i._needsUpdate=!0,!i._requested&&i._autoUpdate&&i.requestUpdate())}var n=this._changes;if(n&&e){var r=this._changesById,s=e._id,a=r[s];a?a.flags|=t:n.push(r[s]={item:e,flags:t})}},clear:function(){for(var t=this._children,e=t.length-1;e>=0;e--)t[e].remove()},isEmpty:function(){return!this._children.length},remove:function t(){return!!t.base.call(this)&&(this._view&&this._view.remove(),!0)},getView:function(){return this._view},getCurrentStyle:function(){return this._currentStyle},setCurrentStyle:function(t){this._currentStyle.set(t)},getIndex:function(){return this._index},getOptions:function(){return this._scope.settings},getLayers:function(){return this._children},getActiveLayer:function(){return this._activeLayer||new S({project:this,insert:!0})},getSymbolDefinitions:function(){var t=[],e={};return this.getItems({class:E,match:function(i){var n=i._definition,r=n._id;return e[r]||(e[r]=!0,t.push(n)),!1}}),t},getSymbols:"getSymbolDefinitions",getSelectedItems:function(){var t=this._selectionItems,e=[];for(var i in t){var n=t[i],r=n._selection;1&r&&n.isInserted()?e.push(n):r||this._updateSelection(n)}return e},_updateSelection:function(t){var e=t._id,i=this._selectionItems;t._selection?i[e]!==t&&(this._selectionCount++,i[e]=t):i[e]===t&&(this._selectionCount--,delete i[e])},selectAll:function(){for(var t=this._children,e=0,i=t.length;e0){t.save(),t.strokeWidth=1;var h=this._selectionItems,l=this._scope.settings.handleSize,u=this._updateVersion;for(var c in h)h[c]._drawSelection(t,e,l,h,u);t.restore()}}}),k=s.extend(a,{statics:{extend:function t(e){return e._serializeFields&&(e._serializeFields=s.set({},this.prototype._serializeFields,e._serializeFields)),t.base.apply(this,arguments)},INSERT:{insert:!0},NO_INSERT:{insert:!1}},_class:"Item",_name:null,_applyMatrix:!0,_canApplyMatrix:!0,_canScaleStroke:!1,_pivot:null,_visible:!0,_blendMode:"normal",_opacity:1,_locked:!1,_guide:!1,_clipMask:!1,_selection:0,_selectBounds:!0,_selectChildren:!1,_serializeFields:{name:null,applyMatrix:null,matrix:new b,pivot:null,visible:!0,blendMode:"normal",opacity:1,locked:!1,guide:!1,clipMask:!1,selected:!1,data:{}},_prioritize:["applyMatrix"]},new function(){var t=["onMouseDown","onMouseUp","onMouseDrag","onClick","onDoubleClick","onMouseMove","onMouseEnter","onMouseLeave"];return s.each(t,function(t){this._events[t]={install:function(t){this.getView()._countItemEvent(t,1)},uninstall:function(t){this.getView()._countItemEvent(t,-1)}}},{_events:{onFrame:{install:function(){this.getView()._animateItem(this,!0)},uninstall:function(){this.getView()._animateItem(this,!1)}},onLoad:{},onError:{}},statics:{_itemHandlers:t}})},{initialize:function(){},_initialize:function(t,e){var n=t&&s.isPlainObject(t),r=n&&!0===t.internal,a=this._matrix=new b,o=n&&t.project||th.project,h=th.settings;return this._id=r?null:p.get(),this._parent=this._index=null,this._applyMatrix=this._canApplyMatrix&&h.applyMatrix,e&&a.translate(e),a._owner=this,this._style=new H(o._currentStyle,this,o),r||n&&!1==t.insert||!h.insertItems&&!(n&&!0==t.insert)?this._setProject(o):(n&&t.parent||o)._insertItem(i,this,!0),n&&t!==k.NO_INSERT&&t!==k.INSERT&&this.set(t,{internal:!0,insert:!0,project:!0,parent:!0}),n},_serialize:function(t,e){var i={},n=this;function r(r){for(var a in r){var o=n[a];s.equals(o,"leading"===a?1.2*r.fontSize:r[a])||(i[a]=s.serialize(o,t,"data"!==a,e))}}return r(this._serializeFields),this instanceof C||r(this._style._defaults),[this._class,i]},_changed:function(t){var e=this._symbol,n=this._parent||e,r=this._project;8&t&&(this._bounds=this._position=this._decomposed=i),16&t&&(this._globalMatrix=i),n&&72&t&&k._clearBoundsCache(n),2&t&&k._clearBoundsCache(this),r&&r._changed(t,this),e&&e._changed(t)},getId:function(){return this._id},getName:function(){return this._name},setName:function(t){if(this._name&&this._removeNamed(),t===+t+"")throw Error("Names consisting only of numbers are not supported.");var e=this._getOwner();if(t&&e){var n=e._children,r=e._namedChildren;(r[t]=r[t]||[]).push(this),t in n||(n[t]=this)}this._name=t||i,this._changed(256)},getStyle:function(){return this._style},setStyle:function(t){this.getStyle().set(t)}},s.each(["locked","visible","blendMode","opacity","guide"],function(t){var e=s.capitalize(t),i="_"+t,n={locked:256,visible:265};this["get"+e]=function(){return this[i]},this["set"+e]=function(e){e!=this[i]&&(this[i]=e,this._changed(n[t]||257))}},{}),{beans:!0,getSelection:function(){return this._selection},setSelection:function(t){if(t!==this._selection){this._selection=t;var e=this._project;e&&(e._updateSelection(this),this._changed(257))}},_changeSelection:function(t,e){var i=this._selection;this.setSelection(e?i|t:i&~t)},isSelected:function(){if(this._selectChildren){for(var t=this._children,e=0,i=t.length;e=0;i--)if(e[i].contains(t))return!0;return!1}return t.isInside(this.getInternalBounds())},isInside:function(){return v.read(arguments).contains(this.getBounds())},_asPathItem:function(){return new R.Rectangle({rectangle:this.getInternalBounds(),matrix:this._matrix,insert:!1})},intersects:function(t,e){return t instanceof k&&this._asPathItem().getIntersections(t._asPathItem(),null,e,!0).length>0}},new function(){function t(){var t=arguments;return this._hitTest(f.read(t),P.getOptions(t))}function e(){var t=arguments,e=f.read(t),i=P.getOptions(t),n=[];return this._hitTest(e,new s({all:n},i)),n}function i(t,e,i,n){var r=this._children;if(r)for(var s=r.length-1;s>=0;s--){var a=r[s],o=a!==n&&a._hitTest(t,e,i);if(o&&!e.all)return o}return null}return w.inject({hitTest:t,hitTestAll:e,_hitTest:i}),{hitTest:t,hitTestAll:e,_hitTestChildren:i}},{_hitTest:function(t,e,i){if(this._locked||!this._visible||this._guide&&!e.guides||this.isEmpty())return null;var n=this._matrix,r=i?i.appended(n):this.getGlobalMatrix().prepend(this.getView()._matrix),a=Math.max(e.tolerance,1e-12),o=e._tolerancePadding=new m(R._getStrokePadding(a,n._shiftless().invert()));if(!(t=n._inverseTransform(t))||!this._children&&!this.getBounds({internal:!0,stroke:!0,handle:!0}).expand(o.multiply(2))._containsPoint(t))return null;var h,l,u=!(e.guides&&!this._guide||e.selected&&!this.isSelected()||e.type&&e.type!==s.hyphenate(this._class)||e.class&&!(this instanceof e.class)),c=e.match,d=this;function p(t){return t&&c&&!c(t)&&(t=null),t&&e.all&&e.all.push(t),t}function f(e,i){var n=i?h["get"+i]():d.getPosition();if(t.subtract(n).divide(o).length<=1)return new P(e,d,{name:i?s.hyphenate(i):e,point:n})}var g=e.position,_=e.center,v=e.bounds;if(u&&this._parent&&(g||_||v)){if((_||v)&&(h=this.getInternalBounds()),!(l=g&&f("position")||_&&f("center","Center"))&&v)for(var y=["TopLeft","TopRight","BottomLeft","BottomRight","LeftCenter","TopCenter","RightCenter","BottomCenter"],b=0;b<8&&!l;b++)l=f("bounds",y[b]);l=p(l)}return l||(l=this._hitTestChildren(t,e,r)||u&&p(this._hitTestSelf(t,e,r,this.getStrokeScaling()?null:r._shiftless().invert()))||null),l&&l.point&&(l.point=n.transform(l.point)),l},_hitTestSelf:function(t,e){if(e.fill&&this.hasFill()&&this._contains(t))return new P("fill",this)},matches:function(t,e){var i=typeof t;if("object"===i){for(var n in t)if(t.hasOwnProperty(n)&&!this.matches(n,t[n]))return!1;return!0}if("function"===i)return t(this);if("match"===t)return e(this);var r=/^(empty|editable)$/.test(t)?this["is"+s.capitalize(t)]():"type"===t?s.hyphenate(this._class):this[t];if("class"===t){if("function"==typeof e)return this instanceof e;r=this._class}if("function"==typeof e)return!!e(r);if(e){if(e.test)return e.test(r);if(s.isPlainObject(e))return function t(e,i){for(var n in e)if(e.hasOwnProperty(n)){var r=e[n],a=i[n];if(s.isPlainObject(r)&&s.isPlainObject(a)){if(!t(r,a))return!1}else if(!s.equals(r,a))return!1}return!0}(e,r)}return s.equals(r,e)},getItems:function(t){return k._getItems(this,t,this._matrix)},getItem:function(t){return k._getItems(this,t,this._matrix,null,!0)[0]||null},statics:{_getItems:function t(e,i,n,r,a){if(!r){var o="object"==typeof i&&i,h=o&&o.overlapping,l=o&&o.inside,u=h||l,c=u&&v.read([u]);r={items:[],recursive:o&&!1!==o.recursive,inside:!!l,overlapping:!!h,rect:c,path:h&&new R.Rectangle({rectangle:c,insert:!1})},o&&(i=s.filter({},i,{recursive:!0,inside:!0,overlapping:!0}))}var d=e._children,p=r.items,c=r.rect;n=c&&(n||new b);for(var f=0,g=d&&d.length;f0))break}return p}}},{importJSON:function(t){var e=s.importJSON(t,this);return e!==this?this.addChild(e):e},addChild:function(t){return this.insertChild(i,t)},insertChild:function(t,e){var i=e?this.insertChildren(t,[e]):null;return i&&i[0]},addChildren:function(t){return this.insertChildren(this._children.length,t)},insertChildren:function(t,e){var i=this._children;if(i&&e&&e.length>0){e=s.slice(e);for(var n={},r=e.length-1;r>=0;r--){var a=e[r],o=a&&a._id;!a||n[o]?e.splice(r,1):(a._remove(!1,!0),n[o]=!0)}s.splice(i,e,t,0);for(var h=this._project,l=h._changes,r=0,u=e.length;r=0;n--)i[n]._remove(!0,!1);return i.length>0&&this._changed(11),i},clear:"#removeChildren",reverseChildren:function(){if(this._children){this._children.reverse();for(var t=0,e=this._children.length;t0},isInserted:function(){return!!this._parent&&this._parent.isInserted()},isAbove:function(t){return -1===this._getOrder(t)},isBelow:function(t){return 1===this._getOrder(t)},isParent:function(t){return this._parent===t},isChild:function(t){return t&&t._parent===this},isDescendant:function(t){for(var e=this;e=e._parent;)if(e===t)return!0;return!1},isAncestor:function(t){return!!t&&t.isDescendant(this)},isSibling:function(t){return this._parent===t._parent},isGroupedWith:function(t){for(var e=this._parent;e;){if(e._parent&&/^(Group|Layer|CompoundPath)$/.test(e._class)&&t.isDescendant(e))return!0;e=e._parent}return!1}},s.each(["rotate","scale","shear","skew"],function(t){var e="rotate"===t;this[t]=function(){var i=arguments,n=(e?s:f).read(i),r=f.read(i,0,{readNull:!0});return this.transform(new b()[t](n,r||this.getPosition(!0)))}},{translate:function(){var t=new b;return this.transform(t.translate.apply(t,arguments))},transform:function(t,e,i){var n=this._matrix,r=t&&!t.isIdentity(),s=i&&this._canApplyMatrix||this._applyMatrix&&(r||!n.isIdentity()||e&&this._children);if(!r&&!s)return this;if(r){!t.isInvertible()&&n.isInvertible()&&(n._backup=n.getValues()),n.prepend(t,!0);var a=this._style,o=a.getFillColor(!0),h=a.getStrokeColor(!0);o&&o.transform(t),h&&h.transform(t)}if(s&&(s=this._transformContent(n,e,i))){var l=this._pivot;l&&n._transformPoint(l,l,!0),n.reset(!0),i&&this._canApplyMatrix&&(this._applyMatrix=!0)}var u=this._bounds,c=this._position;(r||s)&&this._changed(25);var d=r&&u&&t.decompose();if(d&&d.skewing.isZero()&&d.rotation%90==0){for(var p in u){var f=u[p];if(f.nonscaling)delete u[p];else if(s||!f.internal){var g=f.rect;t._transformBounds(g,g)}}this._bounds=u;var m=u[this._getBoundsCacheKey(this._boundsOptions||{})];m&&(this._position=this._getPositionFromBounds(m.rect))}else r&&c&&this._pivot&&(this._position=t._transformPoint(c,c));return this},_transformContent:function(t,e,i){var n=this._children;if(n){for(var r=0,s=n.length;rr:n1&&s<4?-1:1,s>2?-1:1),o=a.multiply(r),h=o.subtract(a.multiply(n));if(new v(i?o.add(a.multiply(i)):o,h).contains(e))return{point:h,quadrant:s}}}function e(t,e,i,n){var r=t.divide(e);return(!n||r.isInQuadrant(n))&&r.subtract(r.normalize()).multiply(e).divide(i).length<=1}return{_contains:function e(i){if("rectangle"!==this._type)return .5>=i.divide(this.size).getLength();var n=t(this,i);return n?1>=i.subtract(n.point).divide(this._radius).getLength():e.base.call(this,i)},_hitTestSelf:function i(n,r,s,a){var o=!1,h=this._style,l=r.stroke&&h.hasStroke(),u=r.fill&&h.hasFill();if(l||u){var c=this._type,d=this._radius,p=l?h.getStrokeWidth()/2:0,f=r._tolerancePadding.add(R._getStrokePadding(p,!h.getStrokeScaling()&&a));if("rectangle"===c){var g=f.multiply(2),m=t(this,n,g);if(m)o=e(n.subtract(m.point),d,f,m.quadrant);else{var _=new v(this._size).setCenter(0,0),y=_.expand(g),b=_.expand(g.negate());o=y._containsPoint(n)&&!b._containsPoint(n)}}else o=e(n,d,f)}return o?new P(l?"stroke":"fill",this):i.base.apply(this,arguments)}}},{statics:new function(){function t(t,e,i,n,r){var a=s.create(I.prototype);return a._type=t,a._size=i,a._radius=n,a._initialize(s.getNamed(r),e),a}return{Circle:function(){var e=arguments,i=f.readNamed(e,"center"),n=s.readNamed(e,"radius");return t("circle",i,new m(2*n),n,e)},Rectangle:function(){var e=arguments,i=v.readNamed(e,"rectangle"),n=m.min(m.readNamed(e,"radius"),i.getSize(!0).divide(2));return t("rectangle",i.getCenter(!0),i.getSize(!0),n,e)},Ellipse:function(){var e=arguments,i=I._readEllipse(e),n=i.radius;return t("ellipse",i.center,n.multiply(2),n,e)},_readEllipse:function(t){var e,i;if(s.hasNamed(t,"radius"))e=f.readNamed(t,"center"),i=m.readNamed(t,"radius");else{var n=v.readNamed(t,"rectangle");e=n.getCenter(!0),i=n.getSize(!0).divide(2)}return{center:e,radius:i}}}}}),T=k.extend({_class:"Raster",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!1,handle:!1},_serializeFields:{crossOrigin:null,source:null},_prioritize:["crossOrigin"],_smoothing:"low",beans:!0,initialize:function(t,e){if(!this._initialize(t,e!==i&&f.read(arguments))){var n,s=typeof t,a="string"===s?r.getElementById(t):"object"===s?t:null;if(a&&a!==k.NO_INSERT){if(a.getContext||null!=a.naturalHeight)n=a;else if(a){var o=m.read(arguments);o.isZero()||(n=tr.getCanvas(o))}}n?this.setImage(n):this.setSource(t)}this._size||(this._size=new m,this._loaded=!1)},_equals:function(t){return this.getSource()===t.getSource()},copyContent:function(t){var e=t._image,i=t._canvas;if(e)this._setImage(e);else if(i){var n=tr.getCanvas(t._size);n.getContext("2d").drawImage(i,0,0),this._setImage(n)}this._crossOrigin=t._crossOrigin},getSize:function(){var t=this._size;return new _(t?t.width:0,t?t.height:0,this,"setSize")},setSize:function(t,e){var i=m.read(arguments);if(i.equals(this._size))e&&this.clear();else if(i.width>0&&i.height>0){var n=!e&&this.getElement();this._setImage(tr.getCanvas(i)),n&&this.getContext(!0).drawImage(n,0,0,i.width,i.height)}else this._canvas&&tr.release(this._canvas),this._size=i.clone()},getWidth:function(){return this._size?this._size.width:0},setWidth:function(t){this.setSize(t,this.getHeight())},getHeight:function(){return this._size?this._size.height:0},setHeight:function(t){this.setSize(this.getWidth(),t)},getLoaded:function(){return this._loaded},isEmpty:function(){var t=this._size;return!t||0===t.width&&0===t.height},getResolution:function(){var t=this._matrix,e=new f(0,0).transform(t),i=new f(1,0).transform(t).subtract(e),n=new f(0,1).transform(t).subtract(e);return new m(72/i.getLength(),72/n.getLength())},getPpi:"#getResolution",getImage:function(){return this._image},setImage:function(t){var e=this;function i(t){var i=e.getView(),n=t&&t.type||"load";i&&e.responds(n)&&(th=i._scope,e.emit(n,new J(t)))}this._setImage(t),this._loaded?setTimeout(i,0):t&&W.add(t,{load:function(n){e._setImage(t),i(n)},error:i})},_setImage:function(t){this._canvas&&tr.release(this._canvas),t&&t.getContext?(this._image=null,this._canvas=t,this._loaded=!0):(this._image=t,this._canvas=null,this._loaded=!!(t&&t.src&&t.complete)),this._size=new m(t?t.naturalWidth||t.width:0,t?t.naturalHeight||t.height:0),this._context=null,this._changed(1033)},getCanvas:function(){if(!this._canvas){var t=tr.getContext(this._size);try{this._image&&t.drawImage(this._image,0,0),this._canvas=t.canvas}catch(e){tr.release(t)}}return this._canvas},setCanvas:"#setImage",getContext:function(t){return this._context||(this._context=this.getCanvas().getContext("2d")),t&&(this._image=null,this._changed(1025)),this._context},setContext:function(t){this._context=t},getSource:function(){var t=this._image;return t&&t.src||this.toDataURL()},setSource:function(t){var i=new e.Image,n=this._crossOrigin;n&&(i.crossOrigin=n),t&&(i.src=t),this.setImage(i)},getCrossOrigin:function(){var t=this._image;return t&&t.crossOrigin||this._crossOrigin||""},setCrossOrigin:function(t){this._crossOrigin=t;var e=this._image;e&&(e.crossOrigin=t)},getSmoothing:function(){return this._smoothing},setSmoothing:function(t){this._smoothing="string"==typeof t?t:t?"low":"off",this._changed(257)},getElement:function(){return this._canvas||this._loaded&&this._image}},{beans:!1,getSubCanvas:function(){var t=v.read(arguments),e=tr.getContext(t.getSize());return e.drawImage(this.getCanvas(),t.x,t.y,t.width,t.height,0,0,t.width,t.height),e.canvas},getSubRaster:function(){var t=v.read(arguments),e=new T(k.NO_INSERT);return e._setImage(this.getSubCanvas(t)),e.translate(t.getCenter().subtract(this.getSize().divide(2))),e._matrix.prepend(this._matrix),e.insertAbove(this),e},toDataURL:function(){var t=this._image,e=t&&t.src;if(/^data:/.test(e))return e;var i=this.getCanvas();return i?i.toDataURL.apply(i,arguments):null},drawImage:function(t){var e=f.read(arguments,1);this.getContext(!0).drawImage(t,e.x,e.y)},getAverageColor:function(t){if(t?t instanceof z?(i=t,e=t.getBounds()):"object"==typeof t&&("width"in t?e=new v(t):"x"in t&&(e=new v(t.x-.5,t.y-.5,1,1))):e=this.getBounds(),!e)return null;var e,i,n=Math.min(e.width,32),r=Math.min(e.height,32),a=T._sampleContext;a?a.clearRect(0,0,33,33):a=T._sampleContext=tr.getContext(new m(32)),a.save();var o=new b().scale(n/e.width,r/e.height).translate(-e.x,-e.y);o.applyToContext(a),i&&i.draw(a,new s({clip:!0,matrices:[o]})),this._matrix.applyToContext(a);var h=this.getElement(),l=this._size;h&&a.drawImage(h,-l.width/2,-l.height/2),a.restore();for(var u=a.getImageData(.5,.5,Math.ceil(n),Math.ceil(r)).data,c=[0,0,0],d=0,p=0,f=u.length;p0&&n.height>0){t.globalAlpha=d.clamp(this._opacity,0,1),this._setStyles(t,e,i);var r=this._smoothing,s="off"===r;G.setPrefixed(t,s?"imageSmoothingEnabled":"imageSmoothingQuality",!s&&r),t.drawImage(n,-this._size.width/2,-this._size.height/2)}},_canComposite:function(){return!0}}),E=k.extend({_class:"SymbolItem",_applyMatrix:!1,_canApplyMatrix:!1,_boundsOptions:{stroke:!0},_serializeFields:{symbol:null},initialize:function(t,e){this._initialize(t,e!==i&&f.read(arguments,1))||this.setDefinition(t instanceof A?t:new A(t))},_equals:function(t){return this._definition===t._definition},copyContent:function(t){this.setDefinition(t._definition)},getDefinition:function(){return this._definition},setDefinition:function(t){this._definition=t,this._changed(9)},getSymbol:"#getDefinition",setSymbol:"#setDefinition",isEmpty:function(){return this._definition._item.isEmpty()},_getBounds:function(t,e){var i=this._definition._item;return i._getCachedBounds(i._matrix.prepended(t),e)},_hitTestSelf:function(t,e,i){var n=e.extend({all:!1}),r=this._definition._item._hitTest(t,n,i);return r&&(r.item=this),r},_draw:function(t,e){this._definition._item.draw(t,e)}}),A=s.extend({_class:"SymbolDefinition",initialize:function(t,e){this._id=p.get(),this.project=th.project,t&&this.setItem(t,e)},_serialize:function(t,e){return e.add(this,function(){return s.serialize([this._class,this._item],t,!1,e)})},_changed:function(t){8&t&&k._clearBoundsCache(this),1&t&&this.project._changed(t)},getItem:function(){return this._item},setItem:function(t,e){t._symbol&&(t=t.clone()),this._item&&(this._item._symbol=null),this._item=t,t.remove(),t.setSelected(!1),e||t.setPosition(new f),t._symbol=this,this._changed(9)},getDefinition:"#getItem",setDefinition:"#setItem",place:function(t){return new E(this,t)},clone:function(){return new A(this._item.clone(!1))},equals:function(t){return t===this||t&&this._item.equals(t._item)||!1}}),P=s.extend({_class:"HitResult",initialize:function(t,e,i){this.type=t,this.item=e,i&&this.inject(i)},statics:{getOptions:function(t){var e=t&&s.read(t);return new s({type:null,tolerance:th.settings.hitTolerance,fill:!e,stroke:!e,segments:!e,handles:!1,ends:!1,position:!1,center:!1,bounds:!1,guides:!1,selected:!1},e)}}}),M=s.extend({_class:"Segment",beans:!0,_selection:0,initialize:function(t,e,n,r,s,a){var o,h,l,u,c=arguments.length;c>0&&(null==t||"object"==typeof t?1===c&&t&&"point"in t?(o=t.point,h=t.handleIn,l=t.handleOut,u=t.selection):(o=t,h=e,l=n,u=r):(o=[t,e],h=n!==i?[n,r]:null,l=s!==i?[s,a]:null)),new O(o,this,"_point"),new O(h,this,"_handleIn"),new O(l,this,"_handleOut"),u&&this.setSelection(u)},_serialize:function(t,e){var i=this._point,n=this._selection,r=n||this.hasHandles()?[i,this._handleIn,this._handleOut]:i;return n&&r.push(n),s.serialize(r,t,!0,e)},_changed:function(t){var e=this._path;if(e){var i,n=e._curves,r=this._index;n&&((!t||t===this._point||t===this._handleIn)&&(i=r>0?n[r-1]:e._closed?n[n.length-1]:null)&&i._changed(),(!t||t===this._point||t===this._handleOut)&&(i=n[r])&&i._changed()),e._changed(41)}},getPoint:function(){return this._point},setPoint:function(){this._point.set(f.read(arguments))},getHandleIn:function(){return this._handleIn},setHandleIn:function(){this._handleIn.set(f.read(arguments))},getHandleOut:function(){return this._handleOut},setHandleOut:function(){this._handleOut.set(f.read(arguments))},hasHandles:function(){return!this._handleIn.isZero()||!this._handleOut.isZero()},isSmooth:function(){var t=this._handleIn,e=this._handleOut;return!t.isZero()&&!e.isZero()&&t.isCollinear(e)},clearHandles:function(){this._handleIn._set(0,0),this._handleOut._set(0,0)},getSelection:function(){return this._selection},setSelection:function(t){var e=this._selection,i=this._path;this._selection=t=t||0,i&&t!==e&&(i._updateSelection(this,e,t),i._changed(257))},_changeSelection:function(t,e){var i=this._selection;this.setSelection(e?i|t:i&~t)},isSelected:function(){return!!(7&this._selection)},setSelected:function(t){this._changeSelection(7,t)},getIndex:function(){return this._index!==i?this._index:null},getPath:function(){return this._path||null},getCurve:function(){var t=this._path,e=this._index;return t?(e>0&&!t._closed&&e===t._segments.length-1&&e--,t.getCurves()[e]||null):null},getLocation:function(){var t=this.getCurve();return t?new L(t,this===t._segment1?0:1):null},getNext:function(){var t=this._path&&this._path._segments;return t&&(t[this._index+1]||this._path._closed&&t[0])||null},smooth:function(t,e,n){var r=t||{},s=r.type,a=r.factor,o=this.getPrevious(),h=this.getNext(),l=(o||this)._point,u=this._point,c=(h||this)._point,d=l.getDistance(u),p=u.getDistance(c);if(s&&"catmull-rom"!==s){if("geometric"===s){if(o&&h){var g=l.subtract(c),m=a===i?.4:a,_=m*d/(d+p);e||this.setHandleIn(g.multiply(_)),n||this.setHandleOut(g.multiply(_-m))}}else throw Error("Smoothing method '"+s+"' not supported.")}else{var v=a===i?.5:a,y=Math.pow(d,v),b=y*y,x=Math.pow(p,v),w=x*x;if(!e&&o){var k=2*w+3*x*y+b,C=3*x*(x+y);this.setHandleIn(0!==C?new f((w*l._x+k*u._x-b*c._x)/C-u._x,(w*l._y+k*u._y-b*c._y)/C-u._y):new f)}if(!n&&h){var k=2*b+3*y*x+w,C=3*y*(y+x);this.setHandleOut(0!==C?new f((b*c._x+k*u._x-w*l._x)/C-u._x,(b*c._y+k*u._y-w*l._y)/C-u._y):new f)}}},getPrevious:function(){var t=this._path&&this._path._segments;return t&&(t[this._index-1]||this._path._closed&&t[t.length-1])||null},isFirst:function(){return!this._index},isLast:function(){var t=this._path;return t&&this._index===t._segments.length-1||!1},reverse:function(){var t=this._handleIn,e=this._handleOut,i=t.clone();t.set(e),e.set(i)},reversed:function(){return new M(this._point,this._handleOut,this._handleIn)},remove:function(){return!!this._path&&!!this._path.removeSegment(this._index)},clone:function(){return new M(this._point,this._handleIn,this._handleOut)},equals:function(t){return t===this||t&&this._class===t._class&&this._point.equals(t._point)&&this._handleIn.equals(t._handleIn)&&this._handleOut.equals(t._handleOut)||!1},toString:function(){var t=["point: "+this._point];return this._handleIn.isZero()||t.push("handleIn: "+this._handleIn),this._handleOut.isZero()||t.push("handleOut: "+this._handleOut),"{ "+t.join(", ")+" }"},transform:function(t){this._transformCoordinates(t,Array(6),!0),this._changed()},interpolate:function(t,e,i){var n=1-i,r=t._point,s=e._point,a=t._handleIn,o=e._handleIn,h=e._handleOut,l=t._handleOut;this._point._set(n*r._x+i*s._x,n*r._y+i*s._y,!0),this._handleIn._set(n*a._x+i*o._x,n*a._y+i*o._y,!0),this._handleOut._set(n*l._x+i*h._x,n*l._y+i*h._y,!0),this._changed()},_transformCoordinates:function(t,e,i){var n=this._point,r=i&&this._handleIn.isZero()?null:this._handleIn,s=i&&this._handleOut.isZero()?null:this._handleOut,a=n._x,o=n._y,h=2;return e[0]=a,e[1]=o,r&&(e[h++]=r._x+a,e[h++]=r._y+o),s&&(e[h++]=s._x+a,e[h++]=s._y+o),t&&(t._transformCoordinates(e,e,h/2),a=e[0],o=e[1],i?(n._x=a,n._y=o,h=2,r&&(r._x=e[h++]-a,r._y=e[h++]-o),s&&(s._x=e[h++]-a,s._y=e[h++]-o)):(r||(e[h++]=a,e[h++]=o),s||(e[h++]=a,e[h++]=o))),e}}),O=f.extend({initialize:function(t,e,n){var r,s,a;if(t){if((r=t[0])!==i)s=t[1];else{var o=t;(r=o.x)===i&&(o=f.read(arguments),r=o.x),s=o.y,a=o.selected}}else r=s=0;this._x=r,this._y=s,this._owner=e,e[n]=this,a&&this.setSelected(!0)},_set:function(t,e){return this._x=t,this._y=e,this._owner._changed(this),this},getX:function(){return this._x},setX:function(t){this._x=t,this._owner._changed(this)},getY:function(){return this._y},setY:function(t){this._y=t,this._owner._changed(this)},isZero:function(){var t=d.isZero;return t(this._x)&&t(this._y)},isSelected:function(){return!!(this._owner._selection&this._getSelection())},setSelected:function(t){this._owner._changeSelection(this._getSelection(),t)},_getSelection:function(){var t=this._owner;return this===t._point?1:this===t._handleIn?2:this===t._handleOut?4:0}}),N=s.extend({_class:"Curve",beans:!0,initialize:function(t,e,i,n,r,s,a,o){var h,l,u,c,d,p,f=arguments.length;3===f?(this._path=t,h=e,l=i):f?1===f?"segment1"in t?(h=new M(t.segment1),l=new M(t.segment2)):"point1"in t?(u=t.point1,d=t.handle1,p=t.handle2,c=t.point2):Array.isArray(t)&&(u=[t[0],t[1]],c=[t[6],t[7]],d=[t[2]-t[0],t[3]-t[1]],p=[t[4]-t[6],t[5]-t[7]]):2===f?(h=new M(t),l=new M(e)):4===f?(u=t,d=e,p=i,c=n):8===f&&(u=[t,e],c=[a,o],d=[i-t,n-e],p=[r-a,s-o]):(h=new M,l=new M),this._segment1=h||new M(u,null,d),this._segment2=l||new M(c,p,null)},_serialize:function(t,e){return s.serialize(this.hasHandles()?[this.getPoint1(),this.getHandle1(),this.getHandle2(),this.getPoint2()]:[this.getPoint1(),this.getPoint2()],t,!0,e)},_changed:function(){this._length=this._bounds=i},clone:function(){return new N(this._segment1,this._segment2)},toString:function(){var t=["point1: "+this._segment1._point];return this._segment1._handleOut.isZero()||t.push("handle1: "+this._segment1._handleOut),this._segment2._handleIn.isZero()||t.push("handle2: "+this._segment2._handleIn),t.push("point2: "+this._segment2._point),"{ "+t.join(", ")+" }"},classify:function(){return N.classify(this.getValues())},remove:function(){var t=!1;if(this._path){var e=this._segment2,i=e._handleOut;(t=e.remove())&&this._segment1._handleOut.set(i)}return t},getPoint1:function(){return this._segment1._point},setPoint1:function(){this._segment1._point.set(f.read(arguments))},getPoint2:function(){return this._segment2._point},setPoint2:function(){this._segment2._point.set(f.read(arguments))},getHandle1:function(){return this._segment1._handleOut},setHandle1:function(){this._segment1._handleOut.set(f.read(arguments))},getHandle2:function(){return this._segment2._handleIn},setHandle2:function(){this._segment2._handleIn.set(f.read(arguments))},getSegment1:function(){return this._segment1},getSegment2:function(){return this._segment2},getPath:function(){return this._path},getIndex:function(){return this._segment1._index},getNext:function(){var t=this._path&&this._path._curves;return t&&(t[this._segment1._index+1]||this._path._closed&&t[0])||null},getPrevious:function(){var t=this._path&&this._path._curves;return t&&(t[this._segment1._index-1]||this._path._closed&&t[t.length-1])||null},isFirst:function(){return!this._segment1._index},isLast:function(){var t=this._path;return t&&this._segment1._index===t._curves.length-1||!1},isSelected:function(){return this.getPoint1().isSelected()&&this.getHandle1().isSelected()&&this.getHandle2().isSelected()&&this.getPoint2().isSelected()},setSelected:function(t){this.getPoint1().setSelected(t),this.getHandle1().setSelected(t),this.getHandle2().setSelected(t),this.getPoint2().setSelected(t)},getValues:function(t){return N.getValues(this._segment1,this._segment2,t)},getPoints:function(){for(var t=this.getValues(),e=[],i=0;i<8;i+=2)e.push(new f(t[i],t[i+1]));return e}},{getLength:function(){return null==this._length&&(this._length=N.getLength(this.getValues(),0,1)),this._length},getArea:function(){return N.getArea(this.getValues())},getLine:function(){return new x(this._segment1._point,this._segment2._point)},getPart:function(t,e){return new N(N.getPart(this.getValues(),t,e))},getPartLength:function(t,e){return N.getLength(this.getValues(),t,e)},divideAt:function(t){return this.divideAtTime(t&&t.curve===this?t.time:this.getTimeAt(t))},divideAtTime:function(t,e){var i=null;if(t>=1e-8&&t<=.99999999){var n=N.subdivide(this.getValues(),t),r=n[0],s=n[1],a=e||this.hasHandles(),o=this._segment1,h=this._segment2,l=this._path;a&&(o._handleOut._set(r[2]-r[0],r[3]-r[1]),h._handleIn._set(s[4]-s[6],s[5]-s[7]));var u=r[6],c=r[7],d=new M(new f(u,c),a&&new f(r[4]-u,r[5]-c),a&&new f(s[2]-u,s[3]-c));l?(l.insert(o._index+1,d),i=this.getNext()):(this._segment2=d,this._changed(),i=new N(d,h))}return i},splitAt:function(t){var e=this._path;return e?e.splitAt(t):null},splitAtTime:function(t){return this.splitAt(this.getLocationAtTime(t))},divide:function(t,e){return this.divideAtTime(t===i?.5:e?t:this.getTimeAt(t))},split:function(t,e){return this.splitAtTime(t===i?.5:e?t:this.getTimeAt(t))},reversed:function(){return new N(this._segment2.reversed(),this._segment1.reversed())},clearHandles:function(){this._segment1._handleOut._set(0,0),this._segment2._handleIn._set(0,0)},statics:{getValues:function(t,e,i,n){var r=t._point,s=t._handleOut,a=e._handleIn,o=e._point,h=r.x,l=r.y,u=o.x,c=o.y,d=n?[h,l,h,l,u,c,u,c]:[h,l,h+s._x,l+s._y,u+a._x,c+a._y,u,c];return i&&i._transformCoordinates(d,d,4),d},subdivide:function(t,e){var n=t[0],r=t[1],s=t[2],a=t[3],o=t[4],h=t[5],l=t[6],u=t[7];e===i&&(e=.5);var c=1-e,d=c*n+e*s,p=c*r+e*a,f=c*s+e*o,g=c*a+e*h,m=c*o+e*l,_=c*h+e*u,v=c*d+e*f,y=c*p+e*g,b=c*f+e*m,x=c*g+e*_,w=c*v+e*b,k=c*y+e*x;return[[n,r,d,p,v,y,w,k],[w,k,b,x,m,_,l,u]]},getMonoCurves:function(t,e){var i=[],n=e?0:1,r=t[n+0],s=t[n+2],a=t[n+4],o=t[n+6];if(r>=s==s>=a&&s>=a==a>=o||N.isStraight(t))i.push(t);else{var h=[],l=d.solveQuadratic(3*(s-a)-r+o,2*(r+a)-4*s,s-r,h,1e-8,.99999999);if(l){h.sort();var u=h[0],c=N.subdivide(t,u);i.push(c[0]),l>1&&(u=(h[1]-u)/(1-u),c=N.subdivide(c[1],u),i.push(c[0])),i.push(c[1])}else i.push(t)}return i},solveCubic:function(t,e,i,n,r,s){var a=t[e],o=t[e+2],h=t[e+4],l=t[e+6],u=0;if(!(ai&&l>i&&o>i&&h>i)){var c=3*(o-a),p=3*(h-o)-c;u=d.solveCubic(l-a-c-p,p,c,a-i,n,r,s)}return u},getTimeOf:function(t,e){var i=new f(t[0],t[1]),n=new f(t[6],t[7]);if(null===(e.isClose(i,1e-12)?0:e.isClose(n,1e-12)?1:null))for(var r=[e.x,e.y],s=[],a=0;a<2;a++)for(var o=N.solveCubic(t,a,r[a],s,0,1),h=0;h.999999999999?1:N.getTimeOf(t,new f(i+l*a,n+l*o))}var u=1/0,c=0;function d(i){if(i>=0&&i<=1){var n=e.getDistance(N.getPoint(t,i),!0);if(n1e-8;)d(c-g)||d(c+g)||(g/=2);return c},getPart:function(t,e,i){var n=e>i;if(n){var r=e;e=i,i=r}return e>0&&(t=N.subdivide(t,e)[1]),i<1&&(t=N.subdivide(t,(i-e)/(1-e))[0]),n?[t[6],t[7],t[4],t[5],t[2],t[3],t[0],t[1]]:t},isFlatEnough:function(t,e){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],l=t[7],u=3*r-2*i-h,c=3*s-2*n-l,d=3*a-2*h-i,p=3*o-2*l-n;return Math.max(u*u,d*d)+Math.max(c*c,p*p)<=16*e*e},getArea:function(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7];return 3*((h-i)*(n+s)-(o-e)*(r+a)+r*(e-s)-n*(i-a)+h*(s+e/3)-o*(a+i/3))/20},getBounds:function(t){for(var e=t.slice(0,2),i=e.slice(),n=[0,0],r=0;r<2;r++)N._addBounds(t[r],t[r+2],t[r+4],t[r+6],r,0,e,i,n);return new v(e[0],e[1],i[0]-e[0],i[1]-e[1])},_addBounds:function(t,e,i,n,r,s,a,o,h){function l(t,e){var i=t-e,n=t+e;io[r]&&(o[r]=n)}s/=2;var u=a[r]+s,c=o[r]-s;if(tc||e>c||i>c||n>c){if(es.getDistance(t.add(e))&&1e-7>s.getDistance(n.add(i))){var a=r.dot(r),o=r.dot(e)/a,h=r.dot(i)/a;return o>=0&&o<=1&&h<=0&&h>=-1}}return!1},isLinear:function(t,e,i,n){var r=n.subtract(t).divide(3);return e.equals(r)&&i.negate().equals(r)}},function(t,e){this[e]=function(e){var i=this._segment1,n=this._segment2;return t(i._point,i._handleOut,n._handleIn,n._point,e)},this.statics[e]=function(e,i){var n=e[0],r=e[1],s=e[6],a=e[7];return t(new f(n,r),new f(e[2]-n,e[3]-r),new f(e[4]-s,e[5]-a),new f(s,a),i)}},{statics:{},hasHandles:function(){return!this._segment1._handleOut.isZero()||!this._segment2._handleIn.isZero()},hasLength:function(t){return(!this.getPoint1().equals(this.getPoint2())||this.hasHandles())&&this.getLength()>(t||0)},isCollinear:function(t){return t&&this.isStraight()&&t.isStraight()&&this.getLine().isCollinear(t.getLine())},isHorizontal:function(){return this.isStraight()&&1e-8>Math.abs(this.getTangentAtTime(.5).y)},isVertical:function(){return this.isStraight()&&1e-8>Math.abs(this.getTangentAtTime(.5).x)}}),{beans:!1,getLocationAt:function(t,e){return this.getLocationAtTime(e?t:this.getTimeAt(t))},getLocationAtTime:function(t){return null!=t&&t>=0&&t<=1?new L(this,t):null},getTimeAt:function(t,e){return N.getTimeAt(this.getValues(),t,e)},getParameterAt:"#getTimeAt",getTimesWithTangent:function(){var t=f.read(arguments);return t.isZero()?[]:N.getTimesWithTangent(this.getValues(),t)},getOffsetAtTime:function(t){return this.getPartLength(0,t)},getLocationOf:function(){return this.getLocationAtTime(this.getTimeOf(f.read(arguments)))},getOffsetOf:function(){var t=this.getLocationOf.apply(this,arguments);return t?t.getOffset():null},getTimeOf:function(){return N.getTimeOf(this.getValues(),f.read(arguments))},getParameterOf:"#getTimeOf",getNearestLocation:function(){var t=f.read(arguments),e=this.getValues(),i=N.getNearestTime(e,t),n=N.getPoint(e,i);return new L(this,i,n,null,t.getDistance(n))},getNearestPoint:function(){var t=this.getNearestLocation.apply(this,arguments);return t?t.getPoint():t}},new function(){var t=["getPoint","getTangent","getNormal","getWeightedTangent","getWeightedNormal","getCurvature"];return s.each(t,function(t){this[t+"At"]=function(e,i){var n=this.getValues();return N[t](n,i?e:N.getTimeAt(n,e))},this[t+"AtTime"]=function(e){return N[t](this.getValues(),e)}},{statics:{_evaluateMethods:t}})},new function(){function t(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7],l=9*(n-s)+3*(o-e),u=6*(e+s)-12*n,c=3*(n-e),d=9*(r-a)+3*(h-i),p=6*(i+a)-12*r,f=3*(r-i);return function(t){var e=(l*t+u)*t+c,i=(d*t+p)*t+f;return Math.sqrt(e*e+i*i)}}function e(t,e){return Math.max(2,Math.min(16,Math.ceil(32*Math.abs(e-t))))}function n(t,e,i,n){if(null==e||e<0||e>1)return null;var r=t[0],s=t[1],a=t[2],o=t[3],h=t[4],l=t[5],u=t[6],c=t[7],p=d.isZero;p(a-r)&&p(o-s)&&(a=r,o=s),p(h-u)&&p(l-c)&&(h=u,l=c);var g,m,_=3*(a-r),v=3*(h-a)-_,y=u-r-_-v,b=3*(o-s),x=3*(l-o)-b,w=c-s-b-x;if(0===i)g=0===e?r:1===e?u:((y*e+v)*e+_)*e+r,m=0===e?s:1===e?c:((w*e+x)*e+b)*e+s;else{if(e<1e-8?(g=_,m=b):e>.99999999?(g=3*(u-h),m=3*(c-l)):(g=(3*y*e+2*v)*e+_,m=(3*w*e+2*x)*e+b),n){0===g&&0===m&&(e<1e-8||e>.99999999)&&(g=h-a,m=l-o);var k=Math.sqrt(g*g+m*m);k&&(g/=k,m/=k)}if(3===i){var h=6*y*e+2*v,l=6*w*e+2*x,C=Math.pow(g*g+m*m,1.5);g=0!==C?(g*l-m*h)/C:0,m=0}}return 2===i?new f(m,-g):new f(g,m)}return{statics:{classify:function(t){var e=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],l=t[7],u=r*(n-l)+s*(h-e)+e*l-n*h,c=3*(a*(s-n)+o*(e-r)+r*n-s*e),p=c-u,f=p-u+(e*(l-o)+n*(a-h)+h*o-l*a),g=Math.sqrt(f*f+p*p+c*c),m=0!==g?1/g:0,_=d.isZero,v="serpentine";function y(t,e,n){var r=e!==i,s=r&&e>0&&e<1,a=r&&n>0&&n<1;return!r||(s||a)&&("loop"!==t||s&&a)||(t="arch",s=a=!1),{type:t,roots:s||a?s&&a?e0?Math.sqrt(b/3):Math.sqrt(-b),w=2*f;return y(b>0?v:"loop",(p+x)/w,(p-x)/w)},getLength:function(n,r,s,a){if(r===i&&(r=0),s===i&&(s=1),N.isStraight(n)){var o=n;s<1&&(o=N.subdivide(o,s)[0],r/=s),r>0&&(o=N.subdivide(o,r)[1]);var h=o[6]-o[0],l=o[7]-o[1];return Math.sqrt(h*h+l*l)}return d.integrate(a||t(n),r,s,e(r,s))},getTimeAt:function(n,r,s){if(s===i&&(s=r<0?1:0),0===r)return s;var a=Math.abs,o=r>0,h=o?s:0,l=o?1:s,u=t(n),c=N.getLength(n,h,l,u),p=a(r)-c;if(1e-12>a(p))return o?l:h;if(p>1e-12)return null;var f=r/c,g=0;return d.findRoot(function(t){return g+=d.integrate(u,s,t,e(s,t)),s=t,g-r},u,s+f,h,l,32,1e-12)},getPoint:function(t,e){return n(t,e,0,!1)},getTangent:function(t,e){return n(t,e,1,!0)},getWeightedTangent:function(t,e){return n(t,e,1,!1)},getNormal:function(t,e){return n(t,e,2,!0)},getWeightedNormal:function(t,e){return n(t,e,2,!1)},getCurvature:function(t,e){return n(t,e,3,!1).x},getPeaks:function(t){var e=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],o=t[6],h=t[7],l=-e+3*n-3*s+o,u=3*e-6*n+3*s,c=-3*e+3*n,p=-i+3*r-3*a+h,f=3*i-6*r+3*a,g=-3*i+3*r,m=[];return d.solveCubic(9*(l*l+p*p),9*(l*u+f*p),2*(u*u+f*f)+3*(c*l+g*p),c*u+f*g,m,1e-8,.99999999),m.sort()}}}},new function(){function t(t,e,i,n,r,s,a){var o=!a&&i.getPrevious()===r,h=!a&&i!==r&&i.getNext()===r;if(null!==n&&n>=(o?1e-8:0)&&n<=(h?.99999999:1)&&null!==s&&s>=(h?1e-8:0)&&s<=(o?.99999999:1)){var l=new L(i,n,null,a),u=new L(r,s,null,a);l._intersection=u,u._intersection=l,(!e||e(l))&&L.insert(t,l,!0)}}function e(t,e,n,r){return t[0][1]r?i(e,!1,r):t[0][0]}function i(t,e,i){for(var n=t[0][0],r=t[0][1],s=1,a=t.length;s=i:h<=i)return h===i?o:n+(i-r)*(o-n)/(h-r);n=o,r=h}return null}function n(t,e,i,n,r){var s=d.isZero;if(s(n)&&s(r)){var a=N.getTimeOf(t,new f(e,i));return null===a?[]:[a]}for(var o=Math.atan2(-r,n),h=Math.sin(o),l=Math.cos(o),u=[],c=[],p=0;p<8;p+=2){var g=t[p]-e,m=t[p+1]-i;u.push(g*l-m*h,g*h+m*l)}return N.solveCubic(u,1,0,c,0,1),c}function r(i,r,s,o,h,l){var u=Math.min,c=Math.max;if(c(i[0],i[2],i[4],i[6])+1e-12>u(r[0],r[2],r[4],r[6])&&u(i[0],i[2],i[4],i[6])-1e-12u(r[1],r[3],r[5],r[7])&&u(i[1],i[3],i[5],i[7])-1e-12=4096||++u>=40)return c;var m,_,v=r[0],y=r[1],b=r[6],w=r[7],k=x.getSignedDistance,C=k(v,y,b,w,r[2],r[3]),S=k(v,y,b,w,r[4],r[5]),I=C*S>0?3/4:4/9,T=I*Math.min(0,C,S),E=I*Math.max(0,C,S),A=k(v,y,b,w,n[0],n[1]),P=k(v,y,b,w,n[2],n[3]),M=k(v,y,b,w,n[4],n[5]),O=k(v,y,b,w,n[6],n[7]),L=function(t,e,i,n){var r,s=[0,t],a=[1/3,e],o=[2/3,i],h=[1,n],l=e-(2*t+n)/3,u=i-(t+2*n)/3;if(l*u<0)r=[[s,a,h],[s,o,h]];else{var c=l/u;r=[c>=2?[s,a,h]:c<=.5?[s,o,h]:[s,a,o,h],[s,h]]}return 0>(l||u)?r.reverse():r}(A,P,M,O),z=L[0],R=L[1];if(0===C&&0===S&&0===A&&0===P&&0===M&&0===O||null==(m=e(z,R,T,E))||null==(_=e(z.reverse(),R.reverse(),T,E)))return c;var B=d+(p-d)*m,D=d+(p-d)*_;if(1e-9>Math.max(g-f,D-B)){var F=(B+D)/2,V=(f+g)/2;t(o,h,l?a:s,l?V:F,l?s:a,l?F:V)}else{n=N.getPart(n,m,_);var j=g-f;if(_-m>.8){if(D-B>j){var U=N.subdivide(n,.5),F=(B+D)/2;c=i(r,U[0],a,s,o,h,!l,u,c,f,g,B,F),c=i(r,U[1],a,s,o,h,!l,u,c,f,g,F,D)}else{var U=N.subdivide(r,.5),V=(f+g)/2;c=i(U[0],n,a,s,o,h,!l,u,c,f,V,B,D),c=i(U[1],n,a,s,o,h,!l,u,c,V,g,B,D)}}else c=0===j||j>=1e-9?i(r,n,a,s,o,h,!l,u,c,f,g,B,D):i(n,r,s,a,o,h,l,u,c,B,D,f,g)}return c})(y?r:i,y?i:r,y?o:s,y?s:o,h,l,y,0,0,0,1,0,1),!v||h.length===b)for(var p=0;p<4;p++){var w=p>>1,k=1&p,C=6*w,S=6*k,I=new f(i[C],i[C+1]),T=new f(r[S],r[S+1]);I.isClose(T,1e-12)&&t(h,l,s,w,o,k)}}}return h}function s(e,i,n,r){var s=N.classify(e);if("loop"===s.type){var a=s.roots;t(n,r,i,a[0],i,a[1])}return n}function a(t,e){function i(t){var e=t[6]-t[0],i=t[7]-t[1];return e*e+i*i}var n=Math.abs,r=x.getDistance,s=N.isStraight(t),a=N.isStraight(e),o=s&&a,h=i(t)r(c,d,p,g,u[0],u[1],!0)&&1e-7>r(c,d,p,g,u[6],u[7],!0))!o&&1e-7>r(c,d,p,g,l[2],l[3],!0)&&1e-7>r(c,d,p,g,l[4],l[5],!0)&&1e-7>r(c,d,p,g,u[2],u[3],!0)&&1e-7>r(c,d,p,g,u[4],u[5],!0)&&(s=a=o=!0);else if(o)return null;if(s^a)return null;for(var m=[t,e],_=[],v=0;v<4&&_.length<2;v++){var y=1&v,b=1^y,w=v>>1,k=N.getTimeOf(m[y],new f(m[b][w?6:0],m[b][w?7:1]));if(null!=k){var C=y?[w,k]:[k,w];(!_.length||n(C[0]-_[0][0])>1e-8&&n(C[1]-_[0][1])>1e-8)&&_.push(C)}if(v>2&&!_.length)break}if(2!==_.length)_=null;else if(!o){var S=N.getPart(t,_[0][0],_[1][0]),I=N.getPart(e,_[0][1],_[1][1]);(n(I[2]-S[2])>1e-7||n(I[3]-S[3])>1e-7||n(I[4]-S[4])>1e-7||n(I[5]-S[5])>1e-7)&&(_=null)}return _}return{getIntersections:function(t){var e=this.getValues(),i=t&&t!==this&&t.getValues();return i?r(e,i,this,t,[]):s(e,this,[])},statics:{getOverlaps:a,getIntersections:function(t,e,i,n,a,o){var h=!e;h&&(e=t);for(var u=t.length,c=e.length,d=Array(u),p=h?d:Array(c),f=[],g=0;g_){var k=e[w];r(y,p[w],v,k,f,i)}}}return f},getCurveLineIntersections:n,getTimesWithTangent:function(t,e){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],o=t[5],h=t[6],l=t[7],u=e.normalize(),c=u.x,p=u.y,f=3*h-9*a+9*r-3*i,g=3*l-9*o+9*s-3*n,m=6*a-12*r+6*i,_=6*o-12*s+6*n,v=3*r-3*i,y=3*s-3*n,b=2*f*p-2*g*c,x=[];if(Math.abs(b)=0&&w<=1&&x.push(w)}}else{var k=(m*m-4*f*v)*p*p+(-2*m*_+4*g*v+4*f*y)*c*p+(_*_-4*g*y)*c*c,C=m*p-_*c;if(k>=0&&0!=b){var S=Math.sqrt(k),I=-(C+S)/b,T=(-C+S)/b;I>=0&&I<=1&&x.push(I),T>=0&&T<=1&&x.push(T)}}return x}}}}),L=s.extend({_class:"CurveLocation",initialize:function(t,e,i,n,r){if(e>=.99999999){var s=t.getNext();s&&(e=0,t=s)}this._setCurve(t),this._time=e,this._point=i||t.getPointAtTime(e),this._overlap=n,this._distance=r,this._intersection=this._next=this._previous=null},_setPath:function(t){this._path=t,this._version=t?t._version:0},_setCurve:function(t){this._setPath(t._path),this._curve=t,this._segment=null,this._segment1=t._segment1,this._segment2=t._segment2},_setSegment:function(t){var e=t.getCurve();e?this._setCurve(e):(this._setPath(t._path),this._segment1=t,this._segment2=null),this._segment=t,this._time=t===this._segment1?0:1,this._point=t._point.clone()},getSegment:function(){var t=this._segment;if(!t){var e=this.getCurve(),i=this.getTime();0===i?t=e._segment1:1===i?t=e._segment2:null!=i&&(t=e.getPartLength(0,i)a(s.getLength()-o))&&(!h&&!l||h&&l&&h.equals(l,!0))}}return i},toString:function(){var t=[],e=this.getPoint(),i=c.instance;e&&t.push("point: "+e);var n=this.getIndex();null!=n&&t.push("index: "+n);var r=this.getTime();return null!=r&&t.push("time: "+i.number(r)),null!=this._distance&&t.push("distance: "+i.number(this._distance)),"{ "+t.join(", ")+" }"},isTouching:function(){var t=this._intersection;if(t&&this.getTangent().isCollinear(t.getTangent())){var e=this.getCurve(),i=t.getCurve();return!(e.isStraight()&&i.isStraight()&&e.getLine().intersect(i.getLine()))}return!1},isCrossing:function(){var t=this._intersection;if(!t)return!1;var e=this.getTime(),i=t.getTime(),n=e>=1e-8&&e<=.99999999,r=i>=1e-8&&i<=.99999999;if(n&&r)return!this.isTouching();var s=this.getCurve(),a=s&&e<1e-8?s.getPrevious():s,o=t.getCurve(),h=o&&i<1e-8?o.getPrevious():o;if(e>.99999999&&(s=s.getNext()),i>.99999999&&(o=o.getNext()),!a||!s||!h||!o)return!1;var l=[];function u(t,e){var i=t.getValues(),n=N.classify(i).roots||N.getPeaks(i),r=n.length,s=N.getLength(i,e&&r?n[r-1]:0,!e&&r?n[0]:1);l.push(r?s:s/32)}function c(t,e,i){return ee&&te||t=-1&&s<=n;s+=r){var a=t[(s%n+n)%n];if(!e.getPoint().isClose(a.getPoint(),1e-7))break;if(e.equals(a))return a}return null}for(;r<=s;){var o,h=r+s>>>1,l=t[h];if(i&&(o=e.equals(l)?l:a(h,-1)||a(h,1)))return e._overlap&&(o._overlap=o._intersection._overlap=!0),o;var u=e.getPath(),c=l.getPath();(u!==c?u._id-c._id:e.getIndex()+e.getTime()-(l.getIndex()+l.getTime()))<0?s=h-1:r=h+1}return t.splice(r,0,e),e}return{statics:{insert:t,expand:function(e){for(var i=e.slice(),n=e.length-1;n>=0;n--)t(i,e[n]._intersection,!1);return i}}}}),z=k.extend({_class:"PathItem",_selectBounds:!1,_canScaleStroke:!0,beans:!0,initialize:function(){},statics:{create:function(t){if(s.isPlainObject(t)?(i=t.segments,e=t.pathData):Array.isArray(t)?i=t:"string"==typeof t&&(e=t),i){var e,i,n,r=i[0];n=r&&Array.isArray(r[0])}else e&&(n=(e.match(/m/gi)||[]).length>1||/z\s*\S+/i.test(e));return new(n?B:R)(t)}},_asPathItem:function(){return this},isClockwise:function(){return this.getArea()>=0},setClockwise:function(t){this.isClockwise()!=(t=!!t)&&this.reverse()},setPathData:function(t){var e,i,n,r=t&&t.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),s=!1,a=new f,o=new f;function h(t,i){var n=+e[t];return s&&(n+=a[i]),n}function l(t){return new f(h(t,"x"),h(t+1,"y"))}this.clear();for(var u=0,c=r&&r.length;ul&&this[n?"removeSegments":"removeChildren"](l,h);for(var c=0;c=0&&e;u--){var c=i[u];e=!1;var p=h[u];if(p)for(var f=p.length-1;f>=0&&!e;f--)c.compare(n[p[f]])&&(!a[p[f]]&&(a[p[f]]=!0,o++),e=!0)}e=e&&o===s}return e}}),R=z.extend({_class:"Path",_serializeFields:{segments:[],closed:!1},initialize:function(t){this._closed=!1,this._segments=[],this._version=0;var e=arguments,n=Array.isArray(t)?"object"==typeof t[0]?t:e:t&&t.size===i&&(t.x!==i||t.point!==i)?e:null;n&&n.length>0?this.setSegments(n):(this._curves=i,this._segmentSelection=0,n||"string"!=typeof t||(this.setPathData(t),t=null)),this._initialize(!n&&t)},_equals:function(t){return this._closed===t._closed&&s.equals(this._segments,t._segments)},copyContent:function(t){this.setSegments(t._segments),this._closed=t._closed},_changed:function t(e){if(t.base.call(this,e),8&e){if(this._length=this._area=i,32&e)this._version++;else if(this._curves)for(var n=0,r=this._curves.length;n0&&(_(u[0],!0),m.push("z")),m.join("")},isEmpty:function(){return!this._segments.length},_transformContent:function(t){for(var e=this._segments,i=Array(6),n=0,r=e.length;n0&&e+r-1===u?e-1:e,d=c,p=Math.min(c+r,u);t._curves&&(n.splice.apply(n,[c,0].concat(t._curves)),d+=t._curves.length);for(var o=d;o0?t-1:t},add:function(t){var e=arguments;return e.length>1&&"number"!=typeof t?this._add(M.readList(e)):this._add([M.read(e)])[0]},insert:function(t,e){var i=arguments;return i.length>2&&"number"!=typeof e?this._add(M.readList(i,1),t):this._add([M.read(i,1)],t)[0]},addSegment:function(){return this._add([M.read(arguments)])[0]},insertSegment:function(t){return this._add([M.read(arguments,1)],t)[0]},addSegments:function(t){return this._add(M.readList(t))},insertSegments:function(t,e){return this._add(M.readList(e),t)},removeSegment:function(t){return this.removeSegments(t,t+1)[0]||null},removeSegments:function(t,e,i){t=t||0,e=s.pick(e,this._segments.length);var n=this._segments,r=this._curves,a=n.length,o=n.splice(t,e-t),h=o.length;if(!h)return o;for(var l=0;l0&&e===a+(this._closed?1:0)?t-1:t,r=r.splice(d,h),l=r.length-1;l>=0;l--)r[l]._path=null;i&&(o._curves=r.slice(1)),this._adjustCurves(d,d)}return this._changed(41),o},clear:"#removeSegments",hasHandles:function(){for(var t=this._segments,e=0,i=t.length;e0&&this._segmentSelection===7*t},setFullySelected:function(t){t&&this._selectSegments(!0),this.setSelected(t)},setSelection:function t(e){1&e||this._selectSegments(!1),t.base.call(this,e)},_selectSegments:function(t){var e=this._segments,i=e.length,n=t?7:0;this._segmentSelection=n*i;for(var r=0;r0&&this.setSelected(!0)},divideAt:function(t){var e,i=this.getLocationAt(t);return i&&(e=i.getCurve().divideAt(i.getCurveOffset()))?e._segment1:null},splitAt:function(t){var e=this.getLocationAt(t),i=e&&e.index,n=e&&e.time;n>.99999999&&(i++,n=0);var r=this.getCurves();if(i>=0&&i=1e-8&&r[i++].divideAtTime(n);var s,a=this.removeSegments(i,this._segments.length,!0);return this._closed?(this.setClosed(!1),s=this):((s=new R(k.NO_INSERT)).insertAbove(this),s.copyAttributes(this)),s._add(a,0),this.addSegment(a[0]),s}return null},split:function(t,e){var n,r=e===i?t:(n=this.getCurves()[t])&&n.getLocationAtTime(e);return null!=r?this.splitAt(r):null},join:function(t,e){var i=e||0;if(t&&t!==this){var n=t._segments,r=this.getLastSegment(),s=t.getLastSegment();if(!s)return this;r&&r._point.isClose(s._point,i)&&t.reverse();var a=t.getFirstSegment();if(r&&r._point.isClose(a._point,i))r.setHandleOut(a._handleOut),this._add(n.slice(1));else{var o=this.getFirstSegment();o&&o._point.isClose(a._point,i)&&t.reverse(),s=t.getLastSegment(),o&&o._point.isClose(s._point,i)?(o.setHandleIn(s._handleIn),this._add(n.slice(0,n.length-1),0)):this._add(n.slice())}t._closed&&this._add([n[0]]),t.remove()}var h=this.getFirstSegment(),l=this.getLastSegment();return h!==l&&h._point.isClose(l._point,i)&&(h.setHandleIn(l._handleIn),l.remove(),this.setClosed(!0)),this},reduce:function(t){for(var e=this.getCurves(),i=t&&t.simplify,n=i?1e-7:0,r=e.length-1;r>=0;r--){var s=e[r];!s.hasHandles()&&(!s.hasLength(n)||i&&s.isCollinear(s.getNext()))&&s.remove()}return this},reverse:function(){this._segments.reverse();for(var t=0,e=this._segments.length;t0&&n.push(new M(e[i-1].curve.slice(6))),this.setSegments(n)},simplify:function(t){var e=new F(this).fit(t||2.5);return e&&this.setSegments(e),!!e},smooth:function(t){var e=this,n=t||{},r=n.type||"asymmetric",s=this._segments,a=s.length,o=this._closed;function h(t,i){var n=t&&t.index;if(null!=n){var r=t.path;if(r&&r!==e)throw Error(t._class+" "+n+" of "+r+" is not part of "+e);i&&t instanceof N&&n++}else n="number"==typeof t?t:i;return Math.min(n<0&&o?n%a:n<0?n+a:n,a-1)}var l=o&&n.from===i&&n.to===i,u=h(n.from,0),c=h(n.to,a-1);if(u>c){if(o)u-=a;else{var d=u;u=c,c=d}}if(/^(?:asymmetric|continuous)$/.test(r)){var p="asymmetric"===r,f=Math.min,g=c-u+1,m=g-1,_=l?f(g,4):1,v=_,y=_,b=[];if(o||(v=f(1,u),y=f(1,a-c-1)),(m+=v+y)<=1)return;for(var x=0,w=u-v;x<=m;x++,w++)b[x]=s[(w<0?w+a:w)%a]._point;for(var k=b[0]._x+2*b[1]._x,C=b[0]._y+2*b[1]._y,S=2,I=m-1,T=[k],E=[C],A=[2],P=[],M=[],x=1;x=0;x--)P[x]=(T[x]-P[x+1])/A[x],M[x]=(E[x]-M[x+1])/A[x];P[m]=(3*b[m]._x-P[I])/2,M[m]=(3*b[m]._y-M[I])/2;for(var x=v,F=m-y,w=u;x<=F;x++,w++){var V=s[w<0?w+a:w],j=V._point,U=P[x]-j._x,q=M[x]-j._y;(l||xv)&&V.setHandleIn(-U,-q)}}else for(var x=u;x<=c;x++)s[x<0?x+a:x].smooth(n,!l&&x===u,!l&&x===c)},toShape:function(t){if(!this._closed)return null;var e,n,r,s,a,o,h,l=this._segments;function u(t,e){var i=l[t],n=i.getNext(),r=l[e],s=r.getNext();return i._handleOut.isZero()&&n._handleIn.isZero()&&r._handleOut.isZero()&&s._handleIn.isZero()&&n._point.subtract(i._point).isCollinear(s._point.subtract(r._point))}function c(t){var e=l[t],i=e.getNext(),n=e._handleOut,r=i._handleIn;if(n.isOrthogonal(r)){var s=e._point,a=i._point,o=new x(s,n,!0).intersect(new x(a,r,!0),!0);return o&&d.isZero(n.getLength()/o.subtract(s).getLength()-.5522847498307936)&&d.isZero(r.getLength()/o.subtract(a).getLength()-.5522847498307936)}return!1}function p(t,e){return l[t]._point.getDistance(l[e]._point)}if(!this.hasHandles()&&4===l.length&&u(0,2)&&u(1,3)&&(n=(e=l[1]).getPrevious(),r=e.getNext(),n._handleOut.isZero()&&e._handleIn.isZero()&&e._handleOut.isZero()&&r._handleIn.isZero()&&e._point.subtract(n._point).isOrthogonal(r._point.subtract(e._point)))?(s=I.Rectangle,a=new m(p(0,3),p(0,1)),h=l[1]._point.add(l[2]._point).divide(2)):8===l.length&&c(0)&&c(2)&&c(4)&&c(6)&&u(1,5)&&u(3,7)?(s=I.Rectangle,o=(a=new m(p(1,6),p(0,3))).subtract(new m(p(0,7),p(1,2))).divide(2),h=l[3]._point.add(l[4]._point).divide(2)):4===l.length&&c(0)&&c(1)&&c(2)&&c(3)&&(d.isZero(p(0,2)-p(1,3))?(s=I.Circle,o=p(0,2)/2):(s=I.Ellipse,o=new m(p(2,0)/2,p(3,1)/2)),h=l[1]._point),s){var f=this.getPosition(!0),g=new s({center:f,size:a,radius:o,insert:!1});return g.copyAttributes(this,!0),g._matrix.prepend(this._matrix),g.rotate(h.subtract(f).getAngle()+90),(t===i||t)&&g.insertAbove(this),g}return null},toPath:"#clone",compare:function t(e){if(!e||e instanceof B)return t.base.call(this,e);var i=this.getCurves(),n=e.getCurves(),r=i.length,s=n.length;if(!r||!s)return r==s;for(var a,o,h=i[0].getValues(),l=[],u=0,c=0,d=0;d0?s-1:d,o=f[0][1];break}}for(var g,m=Math.abs,p=l[a];h&&p;){var f=N.getOverlaps(h,p);if(f&&1e-8>m(f[0][0]-c)){1===(c=f[1][0])&&(h=++um(_-o)){if(g||(g=[a,_]),1===(o=f[1][1])&&(++a>=s&&(a=0),p=l[a]||n[a].getValues(),o=0),!h)return g[0]===a&&g[1]===o;continue}}break}return!1},_hitTestSelf:function(t,e,i,n){var r,s,a,o,h,l,u=this,c=this.getStyle(),d=this._segments,p=d.length,f=this._closed,g=e._tolerancePadding,m=g,_=e.stroke&&c.hasStroke(),v=e.fill&&c.hasFill(),y=e.curves,b=_?c.getStrokeWidth()/2:v&&e.tolerance>0||y?0:null;function x(e,i){return t.subtract(e).divide(i).length<=1}function w(t,i,n){if(!e.selected||i.isSelected()){var r=t._point;if(i!==r&&(i=i.add(r)),x(i,m))return new P(n,u,{segment:t,point:i})}}function k(t,i){return(i||e.segments)&&w(t,t._point,"segment")||!i&&e.handles&&(w(t,t._handleIn,"handle-in")||w(t,t._handleOut,"handle-out"))}function C(t){o.add(t)}function S(e){var i,h=f||e._index>0&&e._index0?(r=c.getStrokeJoin(),s=c.getStrokeCap(),a=c.getMiterLimit(),m=m.add(R._getStrokePadding(b,n))):r=s="round"),!e.ends||e.segments||f){if(e.segments||e.handles){for(var I=0;I1?S(h.getSegment())||(h=null):x(h.getPoint(),m)||(h=null)}if(!h&&"miter"===r&&p>1)for(var I=0;It)return a.getLocationAt(t-s)}if(e.length>0&&t<=this.getLength())return new L(e[e.length-1],1)}else if(t&&t.getPath&&t.getPath()===this)return t;return null},getOffsetsWithTangent:function(){var t=f.read(arguments);if(t.isZero())return[];for(var e=[],i=0,n=this.getCurves(),r=0,s=n.length;re.indexOf(u)&&e.push(u)}i+=a.length}return e}}),new function(){function t(t,e,i){var n,r,s,a,o,h,l,u,c=e._segments,d=c.length,p=Array(6),f=!0;function g(e){if(i)e._transformCoordinates(i,p),n=p[0],r=p[1];else{var c=e._point;n=c._x,r=c._y}if(f)t.moveTo(n,r),f=!1;else{if(i)o=p[2],h=p[3];else{var d=e._handleIn;o=n+d._x,h=r+d._y}o===n&&h===r&&l===s&&u===a?t.lineTo(n,r):t.bezierCurveTo(l,u,o,h,n,r)}if(s=n,a=r,i)l=p[4],u=p[5];else{var d=e._handleOut;l=s+d._x,u=a+d._y}}for(var m=0;m0&&g(c[0])}return{_draw:function(e,i,n,r){var s=i.dontStart,a=i.dontFinish||i.clip,o=this.getStyle(),h=o.hasFill(),l=o.hasStroke(),u=o.getDashArray(),c=!th.support.nativeDash&&l&&u&&u.length;function d(t){return u[(t%c+c)%c]}if(s||e.beginPath(),(h||l&&!c||a)&&(t(e,this,r),this._closed&&e.closePath()),!a&&(h||l)&&(this._setStyles(e,i,n),h&&(e.fill(o.getFillRule()),e.shadowColor="rgba(0,0,0,0)"),l)){if(c){s||e.beginPath();for(var p,f=new D(this,.25,32,!1,r),g=f.length,m=-o.getDashOffset(),_=0;m>0;)m-=d(_--)+d(_--);for(;m0||p>0)&&f.drawPart(e,Math.max(m,0),Math.max(p,0)),m=p+d(_++)}e.stroke()}},_drawSelected:function(e,i){e.beginPath(),t(e,this,i),e.stroke(),function(t,e,i,n){if(!(n<=0))for(var r,s,a=n/2,o=n-2,h=a-1,l=Array(6),u=0,c=e.length;u0&&!(1&p)){var f=t.fillStyle;t.fillStyle="#ffffff",t.fillRect(r-h,s-h,o,o),t.fillStyle=f}}function g(e){var i=l[e],n=l[e+1];(r!=i||s!=n)&&(t.beginPath(),t.moveTo(r,s),t.lineTo(i,n),t.stroke(),t.beginPath(),t.arc(i,n,a,0,2*Math.PI,!0),t.fill())}}(e,this._segments,i,th.settings.handleSize)}}},new function(){function t(t){var e=t._segments;if(!e.length)throw Error("Use a moveTo() command first");return e[e.length-1]}return{moveTo:function(){var t=this._segments;1===t.length&&this.removeSegment(0),t.length||this._add([new M(f.read(arguments))])},moveBy:function(){throw Error("moveBy() is unsupported on Path items.")},lineTo:function(){this._add([new M(f.read(arguments))])},cubicCurveTo:function(){var e=arguments,i=f.read(e),n=f.read(e),r=f.read(e),s=t(this);s.setHandleOut(i.subtract(s._point)),this._add([new M(r,n.subtract(r))])},quadraticCurveTo:function(){var e=arguments,i=f.read(e),n=f.read(e),r=t(this)._point;this.cubicCurveTo(i.add(r.subtract(i).multiply(1/3)),i.add(n.subtract(i).multiply(1/3)),n)},curveTo:function(){var e=arguments,i=f.read(e),n=f.read(e),r=s.pick(s.read(e),.5),a=1-r,o=t(this)._point,h=i.subtract(o.multiply(a*a)).subtract(n.multiply(r*r)).divide(2*r*a);if(h.isNaN())throw Error("Cannot put a curve through points with parameter = "+r);this.quadraticCurveTo(h,n)},arcTo:function(){var e,i,n,r,a,o=arguments,h=Math.abs,l=Math.sqrt,u=t(this),c=u._point,p=f.read(o),g=s.peek(o),_=s.pick(g,!0);if("boolean"==typeof _)var v=c.add(p).divide(2),e=v.add(v.subtract(c).rotate(_?-90:90));else if(2>=s.remain(o))e=p,p=f.read(o);else if(!c.equals(p)){var y=m.read(o),w=d.isZero;if(w(y.width)||w(y.height))return this.lineTo(p);var k=s.read(o),_=!!s.read(o),C=!!s.read(o),v=c.add(p).divide(2),S=c.subtract(v).rotate(-k),I=S.x,T=S.y,E=h(y.width),A=h(y.height),P=E*E,O=A*A,N=I*I,L=T*T,z=l(N/P+L/O);if(z>1&&(E*=z,A*=z,P=E*E,O=A*A),1e-12>h(z=(P*O-P*L-O*N)/(P*L+O*N))&&(z=0),z<0)throw Error("Cannot create an arc with the given arguments");i=new f(E*T/A,-A*I/E).multiply((C===_?-1:1)*l(z)).rotate(k).add(v),n=(r=(a=new b().translate(i).rotate(k).scale(E,A))._inverseTransform(c)).getDirectedAngle(a._inverseTransform(p)),!_&&n>0?n-=360:_&&n<0&&(n+=360)}if(e){var R=new x(c.add(e).divide(2),e.subtract(c).rotate(90),!0),B=new x(e.add(p).divide(2),p.subtract(e).rotate(90),!0),D=new x(c,p),F=D.getSide(e);if(!(i=R.intersect(B,!0))){if(!F)return this.lineTo(p);throw Error("Cannot create an arc with the given arguments")}n=(r=c.subtract(i)).getDirectedAngle(p.subtract(i));var V=D.getSide(i,!0);0===V?n=F*h(n):F===V&&(n+=n<0?360:-360)}if(n){for(var j=h(n),U=j>=360?4:Math.ceil((j-1e-5)/90),q=n/U,Z=q*Math.PI/360,H=4/3*Math.sin(Z)/(1+Math.cos(Z)),G=[],W=0;W<=U;W++){var S=p,K=null;if(W0){for(var k=1;k=180)&&(c=c.negate(),d=d.negate()),o&&a(u),a(u.add(c)),"miter"===e){var g=new x(u.add(c),new f(-c.y,c.x),!0).intersect(new x(u.add(d),new f(-d.y,d.x),!0),!0);g&&u.getDistance(g)<=n*i&&a(g)}a(u.add(d))},_addSquareCap:function(t,e,i,n,r,s,a){var o=t._point.transform(n),h=t.getLocation(),l=h.getNormal().multiply(0===h.getTime()?i:-i).transform(r);"square"===e&&(a&&(s(o.subtract(l)),s(o.add(l))),o=o.add(l.rotate(-90))),s(o.add(l)),s(o.subtract(l))},getHandleBounds:function(t,e,i,n,r){var s,a,o=i.getStyle();if(r.stroke&&o.hasStroke()){var h=i._getStrokeMatrix(n,r),l=o.getStrokeWidth()/2,u=l;"miter"===o.getStrokeJoin()&&(u=l*o.getMiterLimit()),"square"===o.getStrokeCap()&&(u=Math.max(u,l*Math.SQRT2)),s=R._getStrokePadding(l,h),a=R._getStrokePadding(u,h)}for(var c=Array(6),d=1/0,p=-1/0,f=1/0,g=p,m=0,_=t.length;m<_;m++){t[m]._transformCoordinates(n,c);for(var y=0;y<6;y+=2){var b=y?s:a,x=b?b[0]:0,w=b?b[1]:0,k=c[y],C=c[y+1],S=k-x,I=k+x,T=C-w,E=C+w;Sp&&(p=I),Tg&&(g=E)}}return new v(d,f,p-d,g-f)}}});R.inject({statics:new function(){var t=[new M([-1,0],[0,.5522847498307936],[0,-.5522847498307936]),new M([0,-1],[-.5522847498307936,0],[.5522847498307936,0]),new M([1,0],[0,-.5522847498307936],[0,.5522847498307936]),new M([0,1],[.5522847498307936,0],[-.5522847498307936,0])];function e(t,e,i){var n=s.getNamed(i),r=new R(n&&(!0==n.insert?k.INSERT:!1==n.insert?k.NO_INSERT:null));return r._add(t),r._closed=e,r.set(n,k.INSERT)}function i(i,n,r){for(var s=[,,,,],a=0;a<4;a++){var o=t[a];s[a]=new M(o._point.multiply(n).add(i),o._handleIn.multiply(n),o._handleOut.multiply(n))}return e(s,!0,r)}return{Line:function(){var t=arguments;return e([new M(f.readNamed(t,"from")),new M(f.readNamed(t,"to"))],!1,t)},Circle:function(){var t=arguments;return i(f.readNamed(t,"center"),new m(s.readNamed(t,"radius")),t)},Rectangle:function(){var t,i=arguments,n=v.readNamed(i,"rectangle"),r=m.readNamed(i,"radius",0,{readNull:!0}),s=n.getBottomLeft(!0),a=n.getTopLeft(!0),o=n.getTopRight(!0),h=n.getBottomRight(!0);if(!r||r.isZero())t=[new M(s),new M(a),new M(o),new M(h)];else{var l=(r=m.min(r,n.getSize(!0).divide(2))).width,u=r.height,c=.5522847498307936*l,d=.5522847498307936*u;t=[new M(s.add(l,0),null,[-c,0]),new M(s.subtract(0,u),[0,d]),new M(a.add(0,u),null,[0,-d]),new M(a.add(l,0),[-c,0],null),new M(o.subtract(l,0),null,[c,0]),new M(o.add(0,u),[0,-d],null),new M(h.subtract(0,u),null,[0,d]),new M(h.subtract(l,0),[c,0])]}return e(t,!0,i)},RoundRectangle:"#Rectangle",Ellipse:function(){var t=arguments,e=I._readEllipse(t);return i(e.center,e.radius,t)},Oval:"#Ellipse",Arc:function(){var t=arguments,e=f.readNamed(t,"from"),i=f.readNamed(t,"through"),n=f.readNamed(t,"to"),r=s.getNamed(t),a=new R(r&&!1==r.insert&&k.NO_INSERT);return a.moveTo(e),a.arcTo(i,n),a.set(r)},RegularPolygon:function(){for(var t=arguments,i=f.readNamed(t,"center"),n=s.readNamed(t,"sides"),r=s.readNamed(t,"radius"),a=360/n,o=n%3==0,h=new f(0,o?-r:r),l=o?-1:.5,u=Array(n),c=0;c=0;a--){var o=n[a];n!==i||o instanceof R||(n=s.slice(n)),Array.isArray(o)?n[a]=new R({segments:o,insert:!1}):o instanceof B&&(n.splice.apply(n,[a,1].concat(o.removeChildren())),o.remove())}return t.base.call(this,e,n)},reduce:function t(e){for(var i=this._children,n=i.length-1;n>=0;n--){var r=i[n].reduce(e);r.isEmpty()&&r.remove()}if(!i.length){var r=new R(k.NO_INSERT);return r.copyAttributes(this),r.insertAbove(this),this.remove(),r}return t.base.call(this)},isClosed:function(){for(var t=this._children,e=0,i=t.length;e=0;f--){var g=s[f].split();g&&(p(g)&&g.getFirstSegment().setHandleIn(0,0),n.getLastSegment().setHandleOut(0,0))}return p(n),h(d,!1,t,e)}function f(t,e){for(var i=t;i;){if(i===e)return;i=i._previous}for(;t._next&&t._next!==e;)t=t._next;if(!t._next){for(;e._previous;)e=e._previous;t._next=e,e._previous=t}}function g(t){for(var e=t.length-1;e>=0;e--)t[e].clearHandles()}function m(t,e,i){var r=t&&t.length;if(r){var a=s.each(t,function(t,e){this[t._id]={container:null,winding:t.isClockwise()?1:-1,index:e}},{}),o=t.slice().sort(function(t,e){return n(e.getArea())-n(t.getArea())}),h=o[0],u=l.findItemBoundsCollisions(o,null,d.GEOMETRIC_EPSILON);null==i&&(i=h.isClockwise());for(var c=0;c=0;v--)if(m[v]=0;c--){var d=i[c];d._path&&(l[u(d)]=!0)}for(var c=t.length-1;c>=0;c--){var p,m=t[c],_=m._time,v=_,y=e&&!e(m),d=m._curve;if(d&&(d!==r?(o=!d.hasHandles()||l&&l[u(d)],n=[],s=null,r=d):s>=1e-8&&(_/=s)),y){n&&n.push(m);continue}if(e&&a.unshift(m),s=v,_<1e-8)p=d._segment1;else if(_>.99999999)p=d._segment2;else{var b=d.divideAtTime(_,!0);o&&h.push(d,b),p=b._segment1;for(var x=n.length-1;x>=0;x--){var w=n[x];w._time=(w._time-_)/(1-_)}}m._setSegment(p);var k=p._intersection,C=m._intersection;if(k){f(k,C);for(var S=k;S;)f(S._intersection,k),S=S._next}else p._intersection=C}return i||g(h),a||t}function v(i,r,s,a,o){var h,l,u=Array.isArray(r)?r:r[s?"hor":"ver"],c=s?1:0,d=1^c,p=[i.x,i.y],f=p[c],g=p[d],m=f-1e-9,_=f+1e-9,y=0,b=0,x=0,w=0,k=!1,C=!1,S=1,I=[];function T(n){var l=n[d+0],u=n[d+2],p=n[d+4],y=n[d+6];if(g<=e(l,u,p,y)&&g>=t(l,u,p,y)){for(var b,C=n[c+0],T=n[c+2],E=n[c+4],A=n[c+6],P=m>e(C,T,E,A)||_e(l,u))){var p=n[c+0],y=n[c+2],b=n[c+4],C=n[c+6];if(l===u){(p<_&&C>m||C<_&&p>m)&&(k=!0);return}var T=g===l?0:g===u?1:m>e(p,y,b,C)||_0?I[0]:1,E=0===T?p:1===T?C:N.getPoint(n,T)[s?"y":"x"],A=l>u?1:-1,P=h[d]>h[d+6]?1:-1,M=h[c+6];return g!==l?(E_?w+=A:k=!0,E>f-1e-6&&E_&&(w+=A):p!=M&&(M<_&&E>_?(w+=A,k=!0):M>m&&Em&&E<_&&0===N.getTangent(n,T)[s?"x":"y"]&&v(i,r,!s,a,!0)}}(P[M]))return b}}for(var E=0,A=u.length;Ea.quality&&(a=I);break}c-=y}for(var g=o.length-1;g>=0;g--)o[g].segment._winding=a}function b(t,e){var i,n=[];function r(t){var i;return!!(t&&!t._visited&&(!e||e[(i=t._winding||{}).winding]&&!(e.unite&&2===i.winding&&i.windingL&&i.windingR)))}function s(t){if(t){for(var e=0,n=i.length;e=0;l--){var u=h[l],c=u._path,d=u._segment,p=d.getPrevious(),f=d.getNext();i(p,c)&&i(f,c)&&(d.remove(),p._handleOut._set(0,0),f._handleIn._set(0,0),p===d||p.getCurve().hasLength()||(f._handleIn.set(p._handleIn),p.remove()))}r&&(_(a,n&&function(t){var e=t.getCurve(),i=t.getSegment(),n=t._intersection,r=n._curve,s=n._segment;if(e&&r&&e._path&&r._path)return!0;i&&(i._intersection=null),s&&(s._intersection=null)},o),o&&g(o),e=b(s.each(e,function(t){s.push(this,t._segments)},[])));var m,v=e.length;return v>1&&t?(e!==t&&this.setChildren(e),m=this):1!==v||t||(e[0]!==this&&this.setSegments(e[0].removeSegments()),m=this),m||((m=new B(k.NO_INSERT)).addChildren(e),(m=m.reduce()).copyAttributes(this),this.replaceWith(m)),m},reorient:function(t,e){var n=this._children;return n&&n.length?this.setChildren(m(this.removeChildren(),function(e){return!!(t?e:1&e)},e)):e!==i&&this.setClockwise(e),this},getInteriorPoint:function(){var i=this.getBounds().getCenter(!0);if(!this.contains(i)){for(var n=this.getCurves(),r=i.y,s=[],a=[],o=0,h=n.length;o=t(u,c,d,p)&&r<=e(u,c,d,p))for(var f=N.getMonoCurves(l),g=0,m=f.length;g=v&&r<=y||r>=y&&r<=v)){var b=r===v?_[0]:r===y?_[6]:1===N.solveCubic(_,1,r,a,0,1)?N.getPoint(_,a[0]).x:(_[0]+_[6])/2;s.push(b)}}}s.length>1&&(s.sort(function(t,e){return t-e}),i.x=(s[0]+s[1])/2)}return i}}});var D=s.extend({_class:"PathFlattener",initialize:function(t,e,i,n,r){var s,a=[],o=[],h=0,l=1/(i||32),u=t._segments,c=u[0];function d(t,i){var s=N.getValues(t,i,r);a.push(s),function t(i,r,s,a){if(!(a-s>l)||n&&N.isStraight(i)||N.isFlatEnough(i,e||.25)){var u=i[6]-i[0],c=i[7]-i[1],d=Math.sqrt(u*u+c*c);d>0&&(h+=d,o.push({offset:h,curve:i,index:r,time:a}))}else{var p=N.subdivide(i,.5),f=(s+a)/2;t(p[0],r,s,f),t(p[1],r,f,a)}}(s,t._index,0,1)}for(var p=1,f=u.length;p=t){this.index=e;var a=i[e-1],o=a&&a.index===s.index?a.time:0,h=a?a.offset:0;return{index:s.index,time:o+(s.time-o)*(t-h)/(s.offset-h)}}}return{index:i[n-1].index,time:1}},drawPart:function(t,e,i){for(var n=this._get(e),r=this._get(i),s=n.index,a=r.index;s<=a;s++){var o=N.getPart(this.curves[s],s===n.index?n.time:0,s===r.index?r.time:1);s===n.index&&t.moveTo(o[0],o[1]),t.bezierCurveTo.apply(t,o.slice(2))}}},s.each(N._evaluateMethods,function(t){this[t+"At"]=function(e){var i=this._get(e);return N[t](this.curves[i.index],i.time)}},{})),F=s.extend({initialize:function(t){for(var e,i=this.points=[],n=t._segments,r=t._closed,s=0,a=n.length;s0&&(n=[new M(e[0])],i>1&&(this.fitCubic(n,t,0,i-1,e[1].subtract(e[0]),e[i-2].subtract(e[i-1])),this.closed&&(n.shift(),n.pop()))),n},fitCubic:function(t,e,i,n,r,s){var a=this.points;if(n-i==1){var o=a[i],h=a[n],l=o.getDistance(h)/3;this.addCurve(t,[o,o.add(r.normalize(l)),h.add(s.normalize(l)),h]);return}for(var u,c=this.chordLengthParameterize(i,n),d=Math.max(e,e*e),p=!0,f=0;f<=4;f++){var g=this.generateBezier(i,n,c,r,s),m=this.findMaxError(i,n,g,c);if(m.error=d)break;p=this.reparameterize(i,n,c,g),d=m.error}var _=a[u-1].subtract(a[u+1]);this.fitCubic(t,e,i,u,r,_),this.fitCubic(t,e,u,n,_.negate(),s)},addCurve:function(t,e){t[t.length-1].setHandleOut(e[1].subtract(e[0])),t.push(new M(e[3],e[2].subtract(e[3])))},generateBezier:function(t,e,i,n,r){for(var s=Math.abs,a=this.points,o=a[t],h=a[e],l=[[0,0],[0,0]],u=[0,0],c=0,d=e-t+1;c1e-12){var I=l[0][0]*u[1]-l[1][0]*u[0];k=(u[0]*l[1][1]-u[1]*l[0][1])/S,C=I/S}else{var T=l[0][0]+l[0][1],E=l[1][0]+l[1][1];k=C=s(T)>1e-12?u[0]/T:s(E)>1e-12?u[1]/E:0}var A,P,M=h.getDistance(o),O=1e-12*M;if(kM*M&&(k=C=M/3,A=P=null)}return[o,o.add(A||n.normalize(k)),h.add(P||r.normalize(C)),h]},reparameterize:function(t,e,i,n){for(var r=t;r<=e;r++)i[r-t]=this.findRoot(n,this.points[r],i[r-t]);for(var r=1,s=i.length;r=s&&(s=h,r=a)}return{error:s,index:r}}}),V=k.extend({_class:"TextItem",_applyMatrix:!1,_canApplyMatrix:!1,_serializeFields:{content:null},_boundsOptions:{stroke:!1,handle:!1},initialize:function(t){this._content="",this._lines=[];var e=t&&s.isPlainObject(t)&&t.x===i&&t.y===i;this._initialize(e&&t,!e&&f.read(arguments))},_equals:function(t){return this._content===t._content},copyContent:function(t){this.setContent(t._content)},getContent:function(){return this._content},setContent:function(t){this._content=""+t,this._lines=this._content.split(/\r\n|\n|\r/mg),this._changed(521)},isEmpty:function(){return!this._content},getCharacterStyle:"#getStyle",setCharacterStyle:"#setStyle",getParagraphStyle:"#getStyle",setParagraphStyle:"#setStyle"}),j=V.extend({_class:"PointText",initialize:function(){V.apply(this,arguments)},getPoint:function(){var t=this._matrix.getTranslation();return new g(t.x,t.y,this,"setPoint")},setPoint:function(){var t=f.read(arguments);this.translate(t.subtract(this._matrix.getTranslation()))},_draw:function(t,e,i){if(this._content){this._setStyles(t,e,i);var n=this._lines,r=this._style,s=r.hasFill(),a=r.hasStroke(),o=r.getLeading(),h=t.shadowColor;t.font=r.getFontStyle(),t.textAlign=r.getJustification();for(var l=0,u=n.length;l1&&(h-=1),a[o]=6*h<1?s+(r-s)*6*h:2*h<1?r:3*h<2?s+(r-s)*(2/3-h)*6:s}return a},"rgb-gray":function(t,e,i){return[.2989*t+.587*e+.114*i]},"gray-rgb":function(t){return[t,t,t]},"gray-hsb":function(t){return[0,0,t]},"gray-hsl":function(t){return[0,0,t]},"gradient-rgb":function(){return[]},"rgb-gradient":function(){return[]}};return s.each(e,function(t,n){i[n]=[],s.each(t,function(t,r){var a=s.capitalize(t),o=/^(hue|saturation)$/.test(t),h=i[n][r]="gradient"===n?"gradient"===t?function(t){var e=this._components[0];return t=q.read(Array.isArray(t)?t:arguments,0,{readNull:!0}),e!==t&&(e&&e._removeOwner(this),t&&t._addOwner(this)),t}:function(){return f.read(arguments,0,{readNull:"highlight"===t,clone:!0})}:function(t){return null==t||isNaN(t)?0:+t};this["get"+a]=function(){return this._type===n||o&&/^hs[bl]$/.test(this._type)?this._components[r]:this._convert(n)[r]},this["set"+a]=function(t){this._type===n||o&&/^hs[bl]$/.test(this._type)||(this._components=this._convert(n),this._properties=e[n],this._type=n),this._components[r]=h.call(this,t),this._changed()}},this)},{_class:"Color",_readIndex:!0,initialize:function a(o){var h,l,u,c,d=arguments,p=this.__read,f=0;Array.isArray(o)&&(o=(d=o)[0]);var g=null!=o&&typeof o;if("string"===g&&o in e&&(h=o,Array.isArray(o=d[1])?(l=o,u=d[2]):(p&&(f=1),d=s.slice(d,1),g=typeof o)),!l){if(c="number"===g?d:"object"===g&&null!=o.length?o:null){h||(h=c.length>=3?"rgb":"gray");var m=e[h].length;u=c[m],p&&(f+=c===arguments?m+(null!=u?1:0):1),c.length>m&&(c=s.slice(c,0,m))}else if("string"===g){var _=function(e){var i,s=e.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})([\da-f]{2})?$/i)||e.match(/^#([\da-f])([\da-f])([\da-f])([\da-f])?$/i),a="rgb";if(s){var o=s[4]?4:3;i=Array(o);for(var h=0;h1?1:t)*255)}return e=[n(e[0]),n(e[1]),n(e[2])],i<1&&e.push(i<0?0:i),t?"#"+(16777216+(e[0]<<16)+(e[1]<<8)+e[2]).toString(16).slice(1):(4==e.length?"rgba(":"rgb(")+e.join(",")+")"},toCanvasStyle:function(t,e){if(this._canvasStyle)return this._canvasStyle;if("gradient"!==this._type)return this._canvasStyle=this.toCSS();var i,n=this._components,r=n[0],s=r._stops,a=n[1],o=n[2],h=n[3],l=e&&e.inverted();if(l&&(a=l._transformPoint(a),o=l._transformPoint(o),h&&(h=l._transformPoint(h))),r._radial){var u=o.getDistance(a);if(h){var c=h.subtract(a);c.getLength()>u&&(h=a.add(c.normalize(u-.1)))}var d=h||a;i=t.createRadialGradient(d.x,d.y,0,a.x,a.y,u)}else i=t.createLinearGradient(a.x,a.y,o.x,o.y);for(var p=0,f=s.length;p0&&!(i instanceof B);if(s)for(var a=0,o=r.length;a0&&!(a instanceof B);if(l&&!t)for(var u=0,p=o.length;u0},hasStroke:function(){var t=this.getStrokeColor();return!!t&&t.alpha>0&&this.getStrokeWidth()>0},hasShadow:function(){var t=this.getShadowColor();return!!t&&t.alpha>0&&(this.getShadowBlur()>0||!this.getShadowOffset().isZero())},getView:function(){return this._project._view},getFontStyle:function(){var t=this.getFontSize();return this.getFontWeight()+" "+t+(/[a-z]/i.test(t+"")?" ":"px ")+this.getFontFamily()},getFont:"#getFontFamily",setFont:"#setFontFamily",getLeading:function t(){var e=t.base.call(this),i=this.getFontSize();return/pt|em|%|px/.test(i)&&(i=this.getView().getPixelSize(i)),null!=e?e:1.2*i}}),G=new function(){function t(t,e,i,n){for(var r=["","webkit","moz","Moz","ms","o"],s=e[0].toUpperCase()+e.substring(1),a=0;a<6;a++){var o=r[a],h=o?o+s:e;if(h in t){if(!i)return t[h];t[h]=n;break}}}return{getStyles:function(t){var e=t&&9!==t.nodeType?t.ownerDocument:t,i=e&&e.defaultView;return i&&i.getComputedStyle(t,"")},getBounds:function(t,e){var i,n=t.ownerDocument,r=n.body,s=n.documentElement;try{i=t.getBoundingClientRect()}catch(t){i={left:0,top:0,width:0,height:0}}var a=i.left-(s.clientLeft||r.clientLeft||0),o=i.top-(s.clientTop||r.clientTop||0);if(!e){var h=n.defaultView;a+=h.pageXOffset||s.scrollLeft||r.scrollLeft,o+=h.pageYOffset||s.scrollTop||r.scrollTop}return new v(a,o,i.width,i.height)},getViewportBounds:function(t){var e=t.ownerDocument,i=e.defaultView,n=e.documentElement;return new v(0,0,i.innerWidth||n.clientWidth,i.innerHeight||n.clientHeight)},getOffset:function(t,e){return G.getBounds(t,e).getPoint()},getSize:function(t){return G.getBounds(t,!0).getSize()},isInvisible:function(t){return G.getSize(t).equals(new m(0,0))},isInView:function(t){return!G.isInvisible(t)&&G.getViewportBounds(t).intersects(G.getBounds(t,!0))},isInserted:function(t){return r.body.contains(t)},getPrefixed:function(e,i){return e&&t(e,i)},setPrefixed:function(e,i,n){if("object"==typeof i)for(var r in i)t(e,r,!0,i[r]);else t(e,i,!0,n)}}},W={add:function(t,e){if(t)for(var i in e)for(var n=e[i],s=i.split(/[\s,]+/g),a=0,o=s.length;a1?s.hyphenate(e):e.toLowerCase())}function d(e,i,n,r){var a,o=K._focused;if(h[i]=e,e?l[i]=n:delete l[i],i.length>1&&(a=s.camelize(i))in u){u[a]=e;var c=th&&th.agent;if("meta"===a&&c&&c.mac){if(e)t={};else{for(var p in t)p in l&&d(!1,p,t[p],r);t=null}}}else e&&t&&(t[i]=n);o&&o._handleKeyEvent(e?"keydown":"keyup",r,i,n)}return W.add(r,{keydown:function(t){var i=c(t),n=th&&th.agent;i.length>1||n&&n.chrome&&(t.altKey||n.mac&&t.metaKey||!n.mac&&t.ctrlKey)?d(!0,i,o[i]||(i.length>1?"":i),t):e=i},keypress:function(t){if(e){var i=c(t),n=t.charCode,r=n>=32?String.fromCharCode(n):i.length>1?"":i;i!==e&&(i=r.toLowerCase()),d(!0,i,r,t),e=null}},keyup:function(t){var e=c(t);e in l&&d(!1,e,l[e],t)}}),W.add(n,{blur:function(t){for(var e in l)d(!1,e,l[e],t)}}),{modifiers:u,isDown:function(t){return!!h[t]}}},X=J.extend({_class:"MouseEvent",initialize:function(t,e,i,n,r){this.type=t,this.event=e,this.point=i,this.target=n,this.delta=r},toString:function(){return"{ type: '"+this.type+"', point: "+this.point+", target: "+this.target+(this.delta?", delta: "+this.delta:"")+", modifiers: "+this.getModifiers()+" }"}}),tt=J.extend({_class:"ToolEvent",_item:null,initialize:function(t,e,i){this.tool=t,this.type=e,this.event=i},_choosePoint:function(t,e){return t||(e?e.clone():null)},getPoint:function(){return this._choosePoint(this._point,this.tool._point)},setPoint:function(t){this._point=t},getLastPoint:function(){return this._choosePoint(this._lastPoint,this.tool._lastPoint)},setLastPoint:function(t){this._lastPoint=t},getDownPoint:function(){return this._choosePoint(this._downPoint,this.tool._downPoint)},setDownPoint:function(t){this._downPoint=t},getMiddlePoint:function(){return!this._middlePoint&&this.tool._lastPoint?this.tool._point.add(this.tool._lastPoint).divide(2):this._middlePoint},setMiddlePoint:function(t){this._middlePoint=t},getDelta:function(){return!this._delta&&this.tool._lastPoint?this.tool._point.subtract(this.tool._lastPoint):this._delta},setDelta:function(t){this._delta=t},getCount:function(){return this.tool[/^mouse(down|up)$/.test(this.type)?"_downCount":"_moveCount"]},setCount:function(t){this.tool[/^mouse(down|up)$/.test(this.type)?"downCount":"count"]=t},getItem:function(){if(!this._item){var t=this.tool._scope.project.hitTest(this.getPoint());if(t){for(var e=t.item,i=e._parent;/^(Group|CompoundPath)$/.test(i._class);)e=i,i=i._parent;this._item=e}}return this._item},setItem:function(t){this._item=t},toString:function(){return"{ type: "+this.type+", point: "+this.getPoint()+", count: "+this.getCount()+", modifiers: "+this.getModifiers()+" }"}}),te=h.extend({_class:"Tool",_list:"tools",_reference:"tool",_events:["onMouseDown","onMouseUp","onMouseDrag","onMouseMove","onActivate","onDeactivate","onEditOptions","onKeyDown","onKeyUp"],initialize:function(t){h.call(this),this._moveCount=-1,this._downCount=-1,this.set(t)},getMinDistance:function(){return this._minDistance},setMinDistance:function(t){this._minDistance=t,null!=t&&null!=this._maxDistance&&t>this._maxDistance&&(this._maxDistance=t)},getMaxDistance:function(){return this._maxDistance},setMaxDistance:function(t){this._maxDistance=t,null!=this._minDistance&&null!=t&&t=0&&s.equals(a))return!1;if(a&&(null!=t||null!=e)){var o=s.subtract(a),h=o.getLength();if(h<(t||0))return!1;e&&(s=a.add(o.normalize(Math.min(h,e))))}l._moveCount++}return l._point=s,l._lastPoint=a||s,n.down&&(l._moveCount=-1,l._downPoint=s,l._downCount++),!0}function c(){s&&(h=l.emit(t,new tt(l,t,e))||h)}if(n.down)u(),c();else if(n.up)u(null,o),c();else if(s)for(;u(a,o);)c();return h}}),ti=s.extend(a,{_class:"Tween",statics:{easings:new s({linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return t*(2-t)},easeInOutQuad:function(t){return t<.5?2*t*t:-1+2*(2-t)*t},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return--t*t*t+1},easeInOutCubic:function(t){return t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return 1- --t*t*t*t},easeInOutQuart:function(t){return t<.5?8*t*t*t*t:1-8*--t*t*t*t},easeInQuint:function(t){return t*t*t*t*t},easeOutQuint:function(t){return 1+--t*t*t*t*t},easeInOutQuint:function(t){return t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t}})},initialize:function t(e,i,n,r,s,a){this.object=e;var o=typeof s,h="function"===o;this.type=h?o:"string"===o?s:"linear",this.easing=h?s:t.easings[this.type],this.duration=r,this.running=!1,this._then=null,this._startTime=null;var l=i||n;this._keys=l?Object.keys(l):[],this._parsedKeys=this._parseKeys(this._keys),this._from=l&&this._getState(i),this._to=l&&this._getState(n),!1!==a&&this.start()},then:function(t){return this._then=t,this},start:function(){return this._startTime=null,this.running=!0,this},stop:function(){return this.running=!1,this},update:function(t){if(this.running){t>=1&&(t=1,this.running=!1);for(var e=this.easing(t),i=this._keys,n=function(i){return"function"==typeof i?i(e,t):i},r=0,a=i&&i.length;r255){var h=255-n,f=a-n;l=n+(l-n)*h/f,u=n+(u-n)*h/f,c=n+(c-n)*h/f}}function _(t,e,i){return p(t,e,i)-d(t,e,i)}function v(t,e,i,n){var r,s=[t,e,i],a=p(t,e,i),o=d(t,e,i);r=0===d(o=o===t?0:o===e?1:2,a=a===t?0:a===e?1:2)?1===p(o,a)?2:1:0,s[a]>s[o]?(s[r]=(s[r]-s[o])*n/(s[a]-s[o]),s[a]=n):s[r]=s[a]=0,s[o]=0,l=s[0],u=s[1],c=s[2]}var y={multiply:function(){l=r*t/255,u=a*e/255,c=o*i/255},screen:function(){l=r+t-r*t/255,u=a+e-a*e/255,c=o+i-o*i/255},overlay:function(){l=r<128?2*r*t/255:255-2*(255-r)*(255-t)/255,u=a<128?2*a*e/255:255-2*(255-a)*(255-e)/255,c=o<128?2*o*i/255:255-2*(255-o)*(255-i)/255},"soft-light":function(){var n=t*r/255;l=n+r*(255-(255-r)*(255-t)/255-n)/255,u=(n=e*a/255)+a*(255-(255-a)*(255-e)/255-n)/255,c=(n=i*o/255)+o*(255-(255-o)*(255-i)/255-n)/255},"hard-light":function(){l=t<128?2*t*r/255:255-2*(255-t)*(255-r)/255,u=e<128?2*e*a/255:255-2*(255-e)*(255-a)/255,c=i<128?2*i*o/255:255-2*(255-i)*(255-o)/255},"color-dodge":function(){l=0===r?0:255===t?255:d(255,255*r/(255-t)),u=0===a?0:255===e?255:d(255,255*a/(255-e)),c=0===o?0:255===i?255:d(255,255*o/(255-i))},"color-burn":function(){l=255===r?255:0===t?0:p(0,255-(255-r)*255/t),u=255===a?255:0===e?0:p(0,255-(255-a)*255/e),c=255===o?255:0===i?0:p(0,255-(255-o)*255/i)},darken:function(){l=rt?r:t,u=a>e?a:e,c=o>i?o:i},difference:function(){(l=r-t)<0&&(l=-l),(u=a-e)<0&&(u=-u),(c=o-i)<0&&(c=-c)},exclusion:function(){l=r+t*(255-r-r)/255,u=a+e*(255-a-a)/255,c=o+i*(255-o-o)/255},hue:function(){v(t,e,i,_(r,a,o)),m(l,u,c,g(r,a,o))},saturation:function(){v(r,a,o,_(t,e,i)),m(l,u,c,g(r,a,o))},luminosity:function(){m(r,a,o,g(t,e,i))},color:function(){m(t,e,i,g(r,a,o))},add:function(){l=d(r+t,255),u=d(a+e,255),c=d(o+i,255)},subtract:function(){l=p(r-t,0),u=p(a-e,0),c=p(o-i,0)},average:function(){l=(r+t)/2,u=(a+e)/2,c=(o+i)/2},negation:function(){l=255-f(255-t-r),u=255-f(255-e-a),c=255-f(255-i-o)}},b=this.nativeModes=s.each(["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","darker","copy","xor"],function(t){this[t]=!0},{}),x=tr.getContext(1,1,{willReadFrequently:!0});x&&(s.each(y,function(t,e){var i="darken"===e,n=!1;x.save();try{x.fillStyle=i?"#300":"#a00",x.fillRect(0,0,1,1),x.globalCompositeOperation=e,x.globalCompositeOperation===e&&(x.fillStyle=i?"#a00":"#300",x.fillRect(0,0,1,1),n=x.getImageData(0,0,1,1).data[0]!==i?170:51)}catch(t){}x.restore(),b[e]=n}),tr.release(x)),this.process=function(s,d,p,f,g){var m=d.canvas,_="normal"===s;if(_||b[s])p.save(),p.setTransform(1,0,0,1,0,0),p.globalAlpha=f,_||(p.globalCompositeOperation=s),p.drawImage(m,g.x,g.y),p.restore();else{var v=y[s];if(!v)return;for(var x=p.getImageData(g.x,g.y,m.width,m.height),w=x.data,k=d.getImageData(0,0,m.width,m.height).data,C=0,S=w.length;C=2&&!e.hasHandles()){if(l>2){o=e._closed?"polygon":"polyline";for(var c=[],d=0;d3){i.sort(function(t,e){return e.length-t.length}),e+="switch(str.length){";for(var n=0;n=170&&tF.test(String.fromCharCode(t)))},tZ=t.isIdentifierChar=function(t){return t<48?36===t:t<58||!(t<65)&&(t<91||(t<97?95===t:t<123||t>=170&&tV.test(String.fromCharCode(t))))};function tH(){this.line=p,this.column=s-f}function tG(){p=1,s=f=0,d=!0,t$()}function tW(t,i){o=s,e.locations&&(l=new tH),u=t,t$(),c=i,d=t.beforeExpr}function tK(){for(var t=s,r=e.onComment&&e.locations&&new tH,a=i.charCodeAt(s+=2);s8&&t<14)++s;else if(47===t){var r=i.charCodeAt(s+1);if(42===r)!function(){var t,n=e.onComment&&e.locations&&new tH,r=s,a=i.indexOf("*/",s+=2);if(-1===a&&S(s-2,"Unterminated comment"),s=a+2,e.locations)for(tU.lastIndex=r;(t=tU.exec(i))&&t.index=5760&&tB.test(String.fromCharCode(t)))++s;else break}}function tJ(t){if(t?s=a+1:a=s,e.locations&&(h=new tH),t)return tQ();if(s>=n)return tW(M);var r=i.charCodeAt(s);if(tq(r)||92===r)return t5();var o=function(t){switch(t){case 46:return(u=i.charCodeAt(s+1))>=48&&u<=57?t0(!0):(++s,tW(tp));case 40:return++s,tW(th);case 41:return++s,tW(tl);case 59:return++s,tW(tc);case 44:return++s,tW(tu);case 91:return++s,tW(tr);case 93:return++s,tW(ts);case 123:return++s,tW(ta);case 125:return++s,tW(to);case 58:return++s,tW(td);case 63:return++s,tW(tf);case 48:var r,o,h,l,u,c,g,_=i.charCodeAt(s+1);if(120===_||88===_)return s+=2,null==(l=tX(16))&&S(a+2,"Expected hexadecimal number"),tq(i.charCodeAt(s))&&S(s,"Identifier directly after number"),tW(T,l);case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return t0(!1);case 34:case 39:return function(t){s++;for(var r="";;){s>=n&&S(a,"Unterminated string constant");var o=i.charCodeAt(s);if(o===t)return++s,tW(A,r);if(92===o){o=i.charCodeAt(++s);var h=/^[0-7]+/.exec(i.slice(s,s+3));for(h&&(h=h[0]);h&&parseInt(h,8)>255;)h=h.slice(0,-1);if("0"===h&&(h=null),++s,h)b&&S(s-2,"Octal literal in strict mode"),r+=String.fromCharCode(parseInt(h,8)),s+=h.length-1;else switch(o){case 110:r+="\n";break;case 114:r+="\r";break;case 120:r+=String.fromCharCode(t1(2));break;case 117:r+=String.fromCharCode(t1(4));break;case 85:r+=String.fromCharCode(t1(8));break;case 116:r+=" ";break;case 98:r+="\b";break;case 118:r+="\v";break;case 102:r+="\f";break;case 48:r+="\x00";break;case 13:10===i.charCodeAt(s)&&++s;case 10:e.locations&&(f=s,++p);break;default:r+=String.fromCharCode(o)}}else(13===o||10===o||8232===o||8233===o)&&S(a,"Unterminated string constant"),r+=String.fromCharCode(o),++s}}(t);case 47:return c=i.charCodeAt(s+1),d?(++s,tQ()):61===c?tY(t_,2):tY(tg,1);case 37:case 42:return 61===i.charCodeAt(s+1)?tY(t_,2):tY(tA,1);case 124:case 38:return(g=i.charCodeAt(s+1))===t?tY(124===t?tb:tx,2):61===g?tY(t_,2):tY(124===t?tw:tC,1);case 94:return 61===i.charCodeAt(s+1)?tY(t_,2):tY(tk,1);case 43:case 45:return(r=i.charCodeAt(s+1))===t?45==r&&62==i.charCodeAt(s+2)&&tj.test(i.slice(m,s))?(s+=3,tK(),t$(),tJ()):tY(tv,2):61===r?tY(t_,2):tY(tE,1);case 60:case 62:return o=i.charCodeAt(s+1),h=1,o===t?(h=62===t&&62===i.charCodeAt(s+2)?3:2,61===i.charCodeAt(s+h))?tY(t_,h+1):tY(tT,h):33==o&&60==t&&45==i.charCodeAt(s+2)&&45==i.charCodeAt(s+3)?(s+=4,tK(),t$(),tJ()):(61===o&&(h=61===i.charCodeAt(s+2)?3:2),tY(tI,h));case 61:case 33:return 61===i.charCodeAt(s+1)?tY(tS,61===i.charCodeAt(s+2)?3:2):tY(61===t?tm:ty,1);case 126:return tY(ty,1)}return!1}(r);if(!1===o){var l=String.fromCharCode(r);if("\\"===l||tF.test(l))return t5();S(s,"Unexpected character '"+l+"'")}return o}function tY(t,e){var n=i.slice(s,s+e);s+=e,tW(t,n)}function tQ(){for(var t,e,r="",a=s;;){s>=n&&S(a,"Unterminated regular expression");var o=i.charAt(s);if(tj.test(o)&&S(a,"Unterminated regular expression"),t)t=!1;else{if("["===o)e=!0;else if("]"===o&&e)e=!1;else if("/"===o&&!e)break;t="\\"===o}++s}var r=i.slice(a,s);++s;var h=t2();h&&!/^[gmsiy]*$/.test(h)&&S(a,"Invalid regexp flag");try{var l=new RegExp(r,h)}catch(t){t instanceof SyntaxError&&S(a,t.message),S(t)}return tW(E,l)}function tX(t,e){for(var n=s,r=0,a=0,o=null==e?1/0:e;a=97?l-97+10:l>=65?l-65+10:l>=48&&l<=57?l-48:1/0)>=t)break;++s,r=r*t+h}return s===n||null!=e&&s-n!==e?null:r}function t0(t){var e=s,n=!1,r=48===i.charCodeAt(s);t||null!==tX(10)||S(e,"Invalid number"),46===i.charCodeAt(s)&&(++s,tX(10),n=!0);var a=i.charCodeAt(s);(69===a||101===a)&&((43===(a=i.charCodeAt(++s))||45===a)&&++s,null===tX(10)&&S(e,"Invalid number"),n=!0),tq(i.charCodeAt(s))&&S(s,"Identifier directly after number");var o,h=i.slice(e,s);return n?o=parseFloat(h):r&&1!==h.length?/[89]/.test(h)||b?S(e,"Invalid number"):o=parseInt(h,8):o=parseInt(h,10),tW(T,o)}function t1(t){var e=tX(16,t);return null===e&&S(a,"Bad character escape sequence"),e}function t2(){x=!1;for(var t,e=!0,n=s;;){var r=i.charCodeAt(s);if(tZ(r))x&&(t+=i.charAt(s)),++s;else if(92===r){x||(t=i.slice(n,s)),x=!0,117!=i.charCodeAt(++s)&&S(s,"Expecting Unicode escape sequence \\uXXXX"),++s;var a=t1(4),o=String.fromCharCode(a);o||S(s-1,"Invalid Unicode escape"),(e?tq(a):tZ(a))||S(s-4,"Invalid Unicode escape"),t+=o}else break;e=!1}return x?t:i.slice(n,s)}function t5(){var t=t2(),e=P;return!x&&tR(t)&&(e=tn[t]),tW(e,t)}function t3(){g=a,m=o,_=l,tJ()}function t6(t){if(b=t,s=a,e.locations)for(;s=5&&"ExpressionStatement"===t.type&&"Literal"===t.expression.type&&"use strict"===t.expression.value}function ei(t){if(u===t)return t3(),!0}function en(){return!e.strictSemicolons&&(u===M||u===to||tj.test(i.slice(m,a)))}function er(){ei(tc)||en()||ea()}function es(t){u===t?t3():ea()}function ea(){S(a,"Unexpected token")}function eo(t){"Identifier"!==t.type&&"MemberExpression"!==t.type&&S(t.start,"Assigning to rvalue"),b&&"Identifier"===t.type&&tz(t.name)&&S(t.start,"Assigning to "+t.name+" in strict mode")}var eh={kind:"loop"},el={kind:"switch"};function eu(){(u===tg||u===t_&&"/="==c)&&tJ(!0);var t,n,r=u,s=t8();switch(r){case O:case z:t3();var o=r===O;ei(tc)||en()?s.label=null:u!==P?ea():(s.label=eC(),er());for(var h=0;hi){var s=t7(e);s.left=e,s.operator=c;var a=u;return t3(),s.right=t(ev(),r,n),t(et(s,a===tb||a===tx?"LogicalExpression":"BinaryExpression"),i,n)}return e}(ev(),-1,t);if(ei(tf)){var i=t7(e);return i.test=e,i.consequent=em(!0),es(td),i.alternate=em(!0,t),et(i,"ConditionalExpression")}return e}(t);if(u.isAssign){var i=t7(e);return i.operator=c,i.left=e,t3(),i.right=e_(t),eo(e),et(i,"AssignmentExpression")}return e}function ev(){if(u.prefix){var t=t8(),e=u.isUpdate;return t.operator=c,t.prefix=!0,d=!0,t3(),t.argument=ev(),e?eo(t.argument):b&&"delete"===t.operator&&"Identifier"===t.argument.type&&S(t.start,"Deleting local variable in strict mode"),et(t,e?"UpdateExpression":"UnaryExpression")}for(var i=ey(eb());u.postfix&&!en();){var t=t7(i);t.operator=c,t.prefix=!1,t.argument=i,eo(i),t3(),i=et(t,"UpdateExpression")}return i}function ey(t,e){if(ei(tp)){var i=t7(t);return i.object=t,i.property=eC(!0),i.computed=!1,ey(et(i,"MemberExpression"),e)}if(ei(tr)){var i=t7(t);return i.object=t,i.property=em(),i.computed=!0,es(ts),ey(et(i,"MemberExpression"),e)}if(!(!e&&ei(th)))return t;var i=t7(t);return i.callee=t,i.arguments=ek(tl,!1),ey(et(i,"CallExpression"),e)}function eb(){switch(u){case Q:var t,n=t8();return t3(),et(n,"ThisExpression");case P:return eC();case T:case A:case E:var n=t8();return n.value=c,n.raw=i.slice(a,o),t3(),et(n,"Literal");case X:case tt:case te:var n=t8();return n.value=u.atomValue,n.raw=u.keyword,t3(),et(n,"Literal");case th:var r=h,s=a;t3();var d=em();return d.start=s,d.end=o,e.locations&&(d.loc.start=r,d.loc.end=l),e.ranges&&(d.range=[s,o]),es(tl),d;case tr:var n=t8();return t3(),n.elements=ek(ts,!0,!0),et(n,"ArrayExpression");case ta:return function(){var t=t8(),i=!0,n=!1;for(t.properties=[],t3();!ei(to);){if(i)i=!1;else if(es(tu),e.allowTrailingCommas&&ei(to))break;var r,s={key:ex()},a=!1;if(ei(td)?(s.value=em(!0),r=s.kind="init"):e.ecmaVersion>=5&&"Identifier"===s.key.type&&("get"===s.key.name||"set"===s.key.name)?(a=n=!0,r=s.kind=s.key.name,s.key=ex(),u!==th&&ea(),s.value=ew(t8(),!1)):ea(),"Identifier"===s.key.type&&(b||n))for(var o=0;o=0)for(var o=0;o=t)break;t+=n[1]}return t}function o(e){return t.substring(a(e.range[0]),a(e.range[1]))}function h(e,i){for(var n=a(e.range[0]),r=a(e.range[1]),o=0,h=s.length-1;h>=0;h--)if(n>s[h][0]){o=h+1;break}s.splice(o,0,[n,i.length-r+n]),t=t.substring(0,n)+i+t.substring(r)}var u,p=(i=i||{}).url||"",f=i.sourceMaps,g=i.paperFeatures||{},m=i.source||t,_=i.offset||0,v=th.agent,y=v.versionNumber,b=!1,x=/\r\n|\n|\r/mg;if(f&&(v.chrome&&y>=30||v.webkit&&y>=537.76||v.firefox&&y>=23||v.node)){if(v.node)_-=2;else if(n&&p&&!n.location.href.indexOf(p)){var w=r.getElementsByTagName("html")[0].innerHTML;_=w.substr(0,w.indexOf(t)+1).match(x).length+1}var k=["AA"+function(t){var e="";for(t=(Math.abs(t)<<1)+(t<0?1:0);t||!e;){var i=31&t;(t>>=5)&&(i|=32),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[i]}return e}((b=_>0&&!(v.chrome&&y>=36||v.safari&&y>=600||v.firefox&&y>=40||v.node))?0:_)+"A"];k.length=(t.match(x)||[]).length+1+(b?_:0),u={version:3,file:p,names:[],mappings:k.join(";AACA"),sourceRoot:"",sources:[p],sourcesContent:[m]}}return(!1!==g.operatorOverloading||!1!==g.moduleExports)&&function e(i,n,r){if(i){for(var s in i)if("range"!==s&&"loc"!==s){var l=i[s];if(Array.isArray(l))for(var u=0,p=l.length;u]/.test(i.operator)||"MemberExpression"===g&&i.computed)){if("UpdateExpression"===e.type){var n=o(e.argument),m="__$__("+n+', "'+e.operator[0]+'", 1)',_=n+" = "+m;e.prefix?_="("+_+")":("AssignmentExpression"===g||"VariableDeclarator"===g||"BinaryExpression"===g)&&(o(i.left||i.id)===n&&(_=m),_=n+"; "+_),h(e,_)}else if(/^.=$/.test(e.operator)&&"Literal"!==e.left.type){var l=o(e.left),u=o(e.right),m=l+" = __$__("+l+', "'+e.operator[0]+'", '+u+")";h(e,/^\(.*\)$/.test(o(e))?"("+m+")":m)}}}}(i,n),!1!==r.moduleExports&&function(t){switch(t.type){case"ExportDefaultDeclaration":h({range:[t.start,t.declaration.start]},"module.exports = ");break;case"ExportNamedDeclaration":var e=t.declaration,i=t.specifiers;if(e){var n=e.declarations;n&&(n.forEach(function(t){h(t,"module.exports."+o(t))}),h({range:[t.start,e.start+e.kind.length]},""))}else if(i){var r=i.map(function(t){var e=o(t);return"module.exports."+e+" = "+e+"; "}).join("");r&&h(t,r)}}}(i)}}(l(t,{ranges:!0,preserveParens:!0,sourceType:"module"}),null,g),u&&(b&&(t=Array(_+1).join("\n")+t),/^(inline|both)$/.test(f)&&(t+="\n//# sourceMappingURL=data:application/json;base64,"+e.btoa(unescape(encodeURIComponent(JSON.stringify(u))))),t+="\n//# sourceURL="+(p||"paperscript")),{url:p,source:m,code:t,map:u}}function y(t,e,i){th=e;var n,a=e.getView(),o=/\btool\.\w+|\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\b/.test(t)&&!/\bnew\s+Tool\b/.test(t)?new te:null,h=o?o._events:[],l=["onFrame","onResize"].concat(h),u=[],c=[];function d(e,i){for(var n in e)(i||!/^_/.test(n))&&RegExp("([\\b\\s\\W]|^)"+n.replace(/\$/g,"\\$")+"\\b").test(t)&&(u.push(n),c.push(e[n]))}t=("object"==typeof t?t:v(t,i)).code,d({__$__:g,$__:_,paper:e,tool:o},!0),d(e),t="var module = { exports: {} }; "+t;var p=s.each(l,function(e){RegExp("\\s+"+e+"\\b").test(t)&&(u.push(e),this.push("module.exports."+e+" = "+e+";"))},[]).join("\n");p&&(t+="\n"+p),t+="\nreturn module.exports;";var m=th.agent;if(r&&(m.chrome||m.firefox&&m.versionNumber<40)){var y=r.createElement("script"),b=r.head||r.getElementsByTagName("head")[0];m.firefox&&(t="\n"+t),y.appendChild(r.createTextNode("document.__paperscript__ = function("+u+") {"+t+"\n}")),b.appendChild(y),n=r.__paperscript__,delete r.__paperscript__,b.removeChild(y)}else n=Function(u,t);var p=n&&n.apply(e,c),x=p||{};return s.each(h,function(t){var e=x[t];e&&(o[t]=e)}),a&&(x.onResize&&a.setOnResize(x.onResize),a.emit("resize",{size:a.size,delta:new f}),x.onFrame&&a.setOnFrame(x.onFrame),a.requestUpdate()),p}function b(t){if(/^text\/(?:x-|)paperscript$/.test(t.type)&&"true"!==o.getAttribute(t,"ignore")){var e=o.getAttribute(t,"canvas"),i=r.getElementById(e),n=t.src||t.getAttribute("data-src"),s=o.hasAttribute(t,"async"),a="data-paper-scope";if(!i)throw Error('Unable to find canvas with id "'+e+'"');var h=o.get(i.getAttribute(a))||new o().setup(i);return i.setAttribute(a,h._id),n?tn.request({url:n,async:s,mimeType:"text/plain",onLoad:function(t){y(t,h,n)}}):y(t.innerHTML,h,t.baseURI),t.setAttribute("data-paper-ignore","true"),h}}function x(){s.each(r&&r.getElementsByTagName("script"),b)}return f.inject(p),m.inject(p),U.inject(p),n&&("complete"===r.readyState?setTimeout(x):W.add(n,{load:x})),{compile:v,execute:y,load:function(t){return t?b(t):x()},parse:l,calculateBinary:g,calculateUnary:_}}).call(this);var th=new(o.inject(s.exports,{Base:s,Numerical:d,Key:Q,DomEvent:W,DomElement:G,document:r,window:n,Symbol:A,PlacedSymbol:E}));return th.agent.node&&u("gFNhN")(th),"function"==typeof define&&define.amd?define("paper",th):t&&(t.exports=th),th}).call(this,"object"==typeof self?self:null)}),c("gFNhN",function(t,e){}),c("7bbl5",function(t,e){s(t.exports,"isIdentifierStart",function(){return p}),s(t.exports,"isIdentifierChar",function(){return f}),s(t.exports,"TokenType",function(){return g}),s(t.exports,"keywordTypes",function(){return y}),s(t.exports,"tokTypes",function(){return x}),s(t.exports,"lineBreak",function(){return w}),s(t.exports,"lineBreakG",function(){return k}),s(t.exports,"isNewLine",function(){return C}),s(t.exports,"nonASCIIwhitespace",function(){return I}),s(t.exports,"Position",function(){return R}),s(t.exports,"SourceLocation",function(){return B}),s(t.exports,"getLineInfo",function(){return D}),s(t.exports,"defaultOptions",function(){return F}),s(t.exports,"Parser",function(){return U}),s(t.exports,"TokContext",function(){return te}),s(t.exports,"tokContexts",function(){return ti}),s(t.exports,"Node",function(){return tl}),s(t.exports,"Token",function(){return tR}),s(t.exports,"version",function(){return tV}),s(t.exports,"parse",function(){return tj}),s(t.exports,"parseExpressionAt",function(){return tU}),s(t.exports,"tokenizer",function(){return tq});var i=[509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,370,1,81,2,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,193,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,84,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,406,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,9,5351,0,7,14,13835,9,87,9,39,4,60,6,26,9,1014,0,2,54,8,3,82,0,12,1,19628,1,4706,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,983,6,110,6,6,9,4759,9,787719,239],n=[0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,68,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,349,41,7,1,79,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,159,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,264,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,4026,582,8634,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,689,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,43,8,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,757,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,3104,541,1507,4938,6,4191],r="ªµºÀ-ÖØ-öø-ˁˆ-ˑˠ-ˤˬˮͰ-ʹͶͷͺ-ͽͿΆΈ-ΊΌΎ-ΡΣ-ϵϷ-ҁҊ-ԯԱ-Ֆՙՠ-ֈא-תׯ-ײؠ-يٮٯٱ-ۓەۥۦۮۯۺ-ۼۿܐܒ-ܯݍ-ޥޱߊ-ߪߴߵߺࠀ-ࠕࠚࠤࠨࡀ-ࡘࡠ-ࡪࡰ-ࢇࢉ-ࢎࢠ-ࣉऄ-हऽॐक़-ॡॱ-ঀঅ-ঌএঐও-নপ-রলশ-হঽৎড়ঢ়য়-ৡৰৱৼਅ-ਊਏਐਓ-ਨਪ-ਰਲਲ਼ਵਸ਼ਸਹਖ਼-ੜਫ਼ੲ-ੴઅ-ઍએ-ઑઓ-નપ-રલળવ-હઽૐૠૡૹଅ-ଌଏଐଓ-ନପ-ରଲଳଵ-ହଽଡ଼ଢ଼ୟ-ୡୱஃஅ-ஊஎ-ஐஒ-கஙசஜஞடணதந-பம-ஹௐఅ-ఌఎ-ఐఒ-నప-హఽౘ-ౚౝౠౡಀಅ-ಌಎ-ಐಒ-ನಪ-ಳವ-ಹಽೝೞೠೡೱೲഄ-ഌഎ-ഐഒ-ഺഽൎൔ-ൖൟ-ൡൺ-ൿඅ-ඖක-නඳ-රලව-ෆก-ะาำเ-ๆກຂຄຆ-ຊຌ-ຣລວ-ະາຳຽເ-ໄໆໜ-ໟༀཀ-ཇཉ-ཬྈ-ྌက-ဪဿၐ-ၕၚ-ၝၡၥၦၮ-ၰၵ-ႁႎႠ-ჅჇჍა-ჺჼ-ቈቊ-ቍቐ-ቖቘቚ-ቝበ-ኈኊ-ኍነ-ኰኲ-ኵኸ-ኾዀዂ-ዅወ-ዖዘ-ጐጒ-ጕጘ-ፚᎀ-ᎏᎠ-Ᏽᏸ-ᏽᐁ-ᙬᙯ-ᙿᚁ-ᚚᚠ-ᛪᛮ-ᛸᜀ-ᜑᜟ-ᜱᝀ-ᝑᝠ-ᝬᝮ-ᝰក-ឳៗៜᠠ-ᡸᢀ-ᢨᢪᢰ-ᣵᤀ-ᤞᥐ-ᥭᥰ-ᥴᦀ-ᦫᦰ-ᧉᨀ-ᨖᨠ-ᩔᪧᬅ-ᬳᭅ-ᭌᮃ-ᮠᮮᮯᮺ-ᯥᰀ-ᰣᱍ-ᱏᱚ-ᱽᲀ-ᲈᲐ-ᲺᲽ-Ჿᳩ-ᳬᳮ-ᳳᳵᳶᳺᴀ-ᶿḀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼιῂ-ῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲ-ῴῶ-ῼⁱⁿₐ-ₜℂℇℊ-ℓℕ℘-ℝℤΩℨK-ℹℼ-ℿⅅ-ⅉⅎⅠ-ↈⰀ-ⳤⳫ-ⳮⳲⳳⴀ-ⴥⴧⴭⴰ-ⵧⵯⶀ-ⶖⶠ-ⶦⶨ-ⶮⶰ-ⶶⶸ-ⶾⷀ-ⷆⷈ-ⷎⷐ-ⷖⷘ-ⷞ々-〇〡-〩〱-〵〸-〼ぁ-ゖ゛-ゟァ-ヺー-ヿㄅ-ㄯㄱ-ㆎㆠ-ㆿㇰ-ㇿ㐀-䶿一-ꒌꓐ-ꓽꔀ-ꘌꘐ-ꘟꘪꘫꙀ-ꙮꙿ-ꚝꚠ-ꛯꜗ-ꜟꜢ-ꞈꞋ-ꟊꟐꟑꟓꟕ-ꟙꟲ-ꠁꠃ-ꠅꠇ-ꠊꠌ-ꠢꡀ-ꡳꢂ-ꢳꣲ-ꣷꣻꣽꣾꤊ-ꤥꤰ-ꥆꥠ-ꥼꦄ-ꦲꧏꧠ-ꧤꧦ-ꧯꧺ-ꧾꨀ-ꨨꩀ-ꩂꩄ-ꩋꩠ-ꩶꩺꩾ-ꪯꪱꪵꪶꪹ-ꪽꫀꫂꫛ-ꫝꫠ-ꫪꫲ-ꫴꬁ-ꬆꬉ-ꬎꬑ-ꬖꬠ-ꬦꬨ-ꬮꬰ-ꭚꭜ-ꭩꭰ-ꯢ가-힣ힰ-ퟆퟋ-ퟻ豈-舘並-龎ff-stﬓ-ﬗיִײַ-ﬨשׁ-זּטּ-לּמּנּסּףּפּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-ﷻﹰ-ﹴﹶ-ﻼA-Za-zヲ-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ",a={3:"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",5:"class enum extends super const export import",6:"enum",strict:"implements interface let package private protected public static yield",strictBind:"eval arguments"},o="break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this",h={5:o,"5module":o+" export import",6:o+" const class extends export import super"},l=/^in(stanceof)?$/,u=RegExp("["+r+"]"),c=RegExp("["+r+"‌‍·̀-ͯ·҃-֑҇-ׇֽֿׁׂׅׄؐ-ًؚ-٩ٰۖ-ۜ۟-۪ۤۧۨ-ۭ۰-۹ܑܰ-݊ަ-ް߀-߉߫-߽߳ࠖ-࠙ࠛ-ࠣࠥ-ࠧࠩ-࡙࠭-࡛࢘-࢟࣊-ࣣ࣡-ःऺ-़ा-ॏ॑-ॗॢॣ०-९ঁ-ঃ়া-ৄেৈো-্ৗৢৣ০-৯৾ਁ-ਃ਼ਾ-ੂੇੈੋ-੍ੑ੦-ੱੵઁ-ઃ઼ા-ૅે-ૉો-્ૢૣ૦-૯ૺ-૿ଁ-ଃ଼ା-ୄେୈୋ-୍୕-ୗୢୣ୦-୯ஂா-ூெ-ைொ-்ௗ௦-௯ఀ-ఄ఼ా-ౄె-ైొ-్ౕౖౢౣ౦-౯ಁ-ಃ಼ಾ-ೄೆ-ೈೊ-್ೕೖೢೣ೦-೯ೳഀ-ഃ഻഼ാ-ൄെ-ൈൊ-്ൗൢൣ൦-൯ඁ-ඃ්ා-ුූෘ-ෟ෦-෯ෲෳัิ-ฺ็-๎๐-๙ັິ-ຼ່-໎໐-໙༘༙༠-༩༹༵༷༾༿ཱ-྄྆྇ྍ-ྗྙ-ྼ࿆ါ-ှ၀-၉ၖ-ၙၞ-ၠၢ-ၤၧ-ၭၱ-ၴႂ-ႍႏ-ႝ፝-፟፩-፱ᜒ-᜕ᜲ-᜴ᝒᝓᝲᝳ឴-៓៝០-៩᠋-᠍᠏-᠙ᢩᤠ-ᤫᤰ-᤻᥆-᥏᧐-᧚ᨗ-ᨛᩕ-ᩞ᩠-᩿᩼-᪉᪐-᪙᪰-᪽ᪿ-ᫎᬀ-ᬄ᬴-᭄᭐-᭙᭫-᭳ᮀ-ᮂᮡ-ᮭ᮰-᮹᯦-᯳ᰤ-᰷᱀-᱉᱐-᱙᳐-᳔᳒-᳨᳭᳴᳷-᳹᷀-᷿‿⁀⁔⃐-⃥⃜⃡-⃰⳯-⵿⳱ⷠ-〪ⷿ-゙゚〯꘠-꘩꙯ꙴ-꙽ꚞꚟ꛰꛱ꠂ꠆ꠋꠣ-ꠧ꠬ꢀꢁꢴ-ꣅ꣐-꣙꣠-꣱ꣿ-꤉ꤦ-꤭ꥇ-꥓ꦀ-ꦃ꦳-꧀꧐-꧙ꧥ꧰-꧹ꨩ-ꨶꩃꩌꩍ꩐-꩙ꩻ-ꩽꪰꪲ-ꪴꪷꪸꪾ꪿꫁ꫫ-ꫯꫵ꫶ꯣ-ꯪ꯬꯭꯰-꯹ﬞ︀-️︠-︯︳︴﹍-﹏0-9_]");function d(t,e){for(var i=65536,n=0;nt);n+=2)if((i+=e[n+1])>=t)return!0;return!1}function p(t,e){return t<65?36===t:t<91||(t<97?95===t:t<123||(t<=65535?t>=170&&u.test(String.fromCharCode(t)):!1!==e&&d(t,n)))}function f(t,e){return t<48?36===t:t<58||!(t<65)&&(t<91||(t<97?95===t:t<123||(t<=65535?t>=170&&c.test(String.fromCharCode(t)):!1!==e&&(d(t,n)||d(t,i)))))}var g=function(t,e){void 0===e&&(e={}),this.label=t,this.keyword=e.keyword,this.beforeExpr=!!e.beforeExpr,this.startsExpr=!!e.startsExpr,this.isLoop=!!e.isLoop,this.isAssign=!!e.isAssign,this.prefix=!!e.prefix,this.postfix=!!e.postfix,this.binop=e.binop||null,this.updateContext=null};function m(t,e){return new g(t,{beforeExpr:!0,binop:e})}var _={beforeExpr:!0},v={startsExpr:!0},y={};function b(t,e){return void 0===e&&(e={}),e.keyword=t,y[t]=new g(t,e)}var x={num:new g("num",v),regexp:new g("regexp",v),string:new g("string",v),name:new g("name",v),privateId:new g("privateId",v),eof:new g("eof"),bracketL:new g("[",{beforeExpr:!0,startsExpr:!0}),bracketR:new g("]"),braceL:new g("{",{beforeExpr:!0,startsExpr:!0}),braceR:new g("}"),parenL:new g("(",{beforeExpr:!0,startsExpr:!0}),parenR:new g(")"),comma:new g(",",_),semi:new g(";",_),colon:new g(":",_),dot:new g("."),question:new g("?",_),questionDot:new g("?."),arrow:new g("=>",_),template:new g("template"),invalidTemplate:new g("invalidTemplate"),ellipsis:new g("...",_),backQuote:new g("`",v),dollarBraceL:new g("${",{beforeExpr:!0,startsExpr:!0}),eq:new g("=",{beforeExpr:!0,isAssign:!0}),assign:new g("_=",{beforeExpr:!0,isAssign:!0}),incDec:new g("++/--",{prefix:!0,postfix:!0,startsExpr:!0}),prefix:new g("!/~",{beforeExpr:!0,prefix:!0,startsExpr:!0}),logicalOR:m("||",1),logicalAND:m("&&",2),bitwiseOR:m("|",3),bitwiseXOR:m("^",4),bitwiseAND:m("&",5),equality:m("==/!=/===/!==",6),relational:m("/<=/>=",7),bitShift:m("<>/>>>",8),plusMin:new g("+/-",{beforeExpr:!0,binop:9,prefix:!0,startsExpr:!0}),modulo:m("%",10),star:m("*",10),slash:m("/",10),starstar:new g("**",{beforeExpr:!0}),coalesce:m("??",1),_break:b("break"),_case:b("case",_),_catch:b("catch"),_continue:b("continue"),_debugger:b("debugger"),_default:b("default",_),_do:b("do",{isLoop:!0,beforeExpr:!0}),_else:b("else",_),_finally:b("finally"),_for:b("for",{isLoop:!0}),_function:b("function",v),_if:b("if"),_return:b("return",_),_switch:b("switch"),_throw:b("throw",_),_try:b("try"),_var:b("var"),_const:b("const"),_while:b("while",{isLoop:!0}),_with:b("with"),_new:b("new",{beforeExpr:!0,startsExpr:!0}),_this:b("this",v),_super:b("super",v),_class:b("class",v),_extends:b("extends",_),_export:b("export"),_import:b("import",v),_null:b("null",v),_true:b("true",v),_false:b("false",v),_in:b("in",{beforeExpr:!0,binop:7}),_instanceof:b("instanceof",{beforeExpr:!0,binop:7}),_typeof:b("typeof",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_void:b("void",{beforeExpr:!0,prefix:!0,startsExpr:!0}),_delete:b("delete",{beforeExpr:!0,prefix:!0,startsExpr:!0})},w=/\r\n?|\n|\u2028|\u2029/,k=RegExp(w.source,"g");function C(t){return 10===t||13===t||8232===t||8233===t}function S(t,e,i){void 0===i&&(i=t.length);for(var n=e;n>10)+55296,(1023&t)+56320)}var z=/(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/,R=function(t,e){this.line=t,this.column=e};R.prototype.offset=function(t){return new R(this.line,this.column+t)};var B=function(t,e,i){this.start=e,this.end=i,null!==t.sourceFile&&(this.source=t.sourceFile)};function D(t,e){for(var i=1,n=0;;){var r=S(t,n,e);if(r<0)return new R(i,e-n);++i,n=r}}var F={ecmaVersion:null,sourceType:"script",onInsertedSemicolon:null,onTrailingComma:null,allowReserved:null,allowReturnOutsideFunction:!1,allowImportExportEverywhere:!1,allowAwaitOutsideFunction:null,allowSuperOutsideMethod:null,allowHashBang:!1,checkPrivateFields:!0,locations:!1,onToken:null,onComment:null,ranges:!1,program:null,sourceFile:null,directSourceFile:null,preserveParens:!1},V=!1;function j(t,e){return 2|(t?4:0)|(e?8:0)}var U=function(t,e,i){this.options=t=function(t){var e,i={};for(var n in F)i[n]=t&&M(t,n)?t[n]:F[n];if("latest"===i.ecmaVersion?i.ecmaVersion=1e8:null==i.ecmaVersion?(!V&&"object"==typeof console&&console.warn&&(V=!0,console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future.")),i.ecmaVersion=11):i.ecmaVersion>=2015&&(i.ecmaVersion-=2009),null==i.allowReserved&&(i.allowReserved=i.ecmaVersion<5),t&&null!=t.allowHashBang||(i.allowHashBang=i.ecmaVersion>=14),O(i.onToken)){var r=i.onToken;i.onToken=function(t){return r.push(t)}}return O(i.onComment)&&(i.onComment=(e=i.onComment,function(t,n,r,s,a,o){var h={type:t?"Block":"Line",value:n,start:r,end:s};i.locations&&(h.loc=new B(this,a,o)),i.ranges&&(h.range=[r,s]),e.push(h)})),i}(t),this.sourceFile=t.sourceFile,this.keywords=N(h[t.ecmaVersion>=6?6:"module"===t.sourceType?"5module":5]);var n="";!0!==t.allowReserved&&(n=a[t.ecmaVersion>=6?6:5===t.ecmaVersion?5:3],"module"===t.sourceType&&(n+=" await")),this.reservedWords=N(n);var r=(n?n+" ":"")+a.strict;this.reservedWordsStrict=N(r),this.reservedWordsStrictBind=N(r+" "+a.strictBind),this.input=String(e),this.containsEsc=!1,i?(this.pos=i,this.lineStart=this.input.lastIndexOf("\n",i-1)+1,this.curLine=this.input.slice(0,this.lineStart).split(w).length):(this.pos=this.lineStart=0,this.curLine=1),this.type=x.eof,this.value=null,this.start=this.end=this.pos,this.startLoc=this.endLoc=this.curPosition(),this.lastTokEndLoc=this.lastTokStartLoc=null,this.lastTokStart=this.lastTokEnd=this.pos,this.context=this.initialContext(),this.exprAllowed=!0,this.inModule="module"===t.sourceType,this.strict=this.inModule||this.strictDirective(this.pos),this.potentialArrowAt=-1,this.potentialArrowInForAwait=!1,this.yieldPos=this.awaitPos=this.awaitIdentPos=0,this.labels=[],this.undefinedExports=Object.create(null),0===this.pos&&t.allowHashBang&&"#!"===this.input.slice(0,2)&&this.skipLineComment(2),this.scopeStack=[],this.enterScope(1),this.regexpState=null,this.privateNameStack=[]},q={inFunction:{configurable:!0},inGenerator:{configurable:!0},inAsync:{configurable:!0},canAwait:{configurable:!0},allowSuper:{configurable:!0},allowDirectSuper:{configurable:!0},treatFunctionsAsVar:{configurable:!0},allowNewDotTarget:{configurable:!0},inClassStaticBlock:{configurable:!0}};U.prototype.parse=function(){var t=this.options.program||this.startNode();return this.nextToken(),this.parseTopLevel(t)},q.inFunction.get=function(){return(2&this.currentVarScope().flags)>0},q.inGenerator.get=function(){return(8&this.currentVarScope().flags)>0&&!this.currentVarScope().inClassFieldInit},q.inAsync.get=function(){return(4&this.currentVarScope().flags)>0&&!this.currentVarScope().inClassFieldInit},q.canAwait.get=function(){for(var t=this.scopeStack.length-1;t>=0;t--){var e=this.scopeStack[t];if(e.inClassFieldInit||256&e.flags)return!1;if(2&e.flags)return(4&e.flags)>0}return this.inModule&&this.options.ecmaVersion>=13||this.options.allowAwaitOutsideFunction},q.allowSuper.get=function(){var t=this.currentThisScope(),e=t.flags,i=t.inClassFieldInit;return(64&e)>0||i||this.options.allowSuperOutsideMethod},q.allowDirectSuper.get=function(){return(128&this.currentThisScope().flags)>0},q.treatFunctionsAsVar.get=function(){return this.treatFunctionsAsVarInScope(this.currentScope())},q.allowNewDotTarget.get=function(){var t=this.currentThisScope(),e=t.flags,i=t.inClassFieldInit;return(258&e)>0||i},q.inClassStaticBlock.get=function(){return(256&this.currentVarScope().flags)>0},U.extend=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=this,n=0;n=,?^&]/.test(r)||"!"===r&&"="===this.input.charAt(n+1))}t+=e[0].length,T.lastIndex=t,t+=T.exec(this.input)[0].length,";"===this.input[t]&&t++}},Z.eat=function(t){return this.type===t&&(this.next(),!0)},Z.isContextual=function(t){return this.type===x.name&&this.value===t&&!this.containsEsc},Z.eatContextual=function(t){return!!this.isContextual(t)&&(this.next(),!0)},Z.expectContextual=function(t){this.eatContextual(t)||this.unexpected()},Z.canInsertSemicolon=function(){return this.type===x.eof||this.type===x.braceR||w.test(this.input.slice(this.lastTokEnd,this.start))},Z.insertSemicolon=function(){if(this.canInsertSemicolon())return this.options.onInsertedSemicolon&&this.options.onInsertedSemicolon(this.lastTokEnd,this.lastTokEndLoc),!0},Z.semicolon=function(){this.eat(x.semi)||this.insertSemicolon()||this.unexpected()},Z.afterTrailingComma=function(t,e){if(this.type===t)return this.options.onTrailingComma&&this.options.onTrailingComma(this.lastTokStart,this.lastTokStartLoc),e||this.next(),!0},Z.expect=function(t){this.eat(t)||this.unexpected()},Z.unexpected=function(t){this.raise(null!=t?t:this.start,"Unexpected token")};var G=function(){this.shorthandAssign=this.trailingComma=this.parenthesizedAssign=this.parenthesizedBind=this.doubleProto=-1};Z.checkPatternErrors=function(t,e){if(t){t.trailingComma>-1&&this.raiseRecoverable(t.trailingComma,"Comma is not permitted after the rest element");var i=e?t.parenthesizedAssign:t.parenthesizedBind;i>-1&&this.raiseRecoverable(i,e?"Assigning to rvalue":"Parenthesized pattern")}},Z.checkExpressionErrors=function(t,e){if(!t)return!1;var i=t.shorthandAssign,n=t.doubleProto;if(!e)return i>=0||n>=0;i>=0&&this.raise(i,"Shorthand property assignments are valid only in destructuring patterns"),n>=0&&this.raiseRecoverable(n,"Redefinition of __proto__ property")},Z.checkYieldAwaitInDefaultParams=function(){this.yieldPos&&(!this.awaitPos||this.yieldPos55295&&n<56320)return!0;if(p(n,!0)){for(var r=i+1;f(n=this.input.charCodeAt(r),!0);)++r;if(92===n||n>55295&&n<56320)return!0;var s=this.input.slice(i,r);if(!l.test(s))return!0}return!1},W.isAsyncFunction=function(){if(this.options.ecmaVersion<8||!this.isContextual("async"))return!1;T.lastIndex=this.pos;var t,e=T.exec(this.input),i=this.pos+e[0].length;return!w.test(this.input.slice(this.pos,i))&&"function"===this.input.slice(i,i+8)&&(i+8===this.input.length||!(f(t=this.input.charCodeAt(i+8))||t>55295&&t<56320))},W.parseStatement=function(t,e,i){var n,r=this.type,s=this.startNode();switch(this.isLet(t)&&(r=x._var,n="let"),r){case x._break:case x._continue:return this.parseBreakContinueStatement(s,r.keyword);case x._debugger:return this.parseDebuggerStatement(s);case x._do:return this.parseDoStatement(s);case x._for:return this.parseForStatement(s);case x._function:return t&&(this.strict||"if"!==t&&"label"!==t)&&this.options.ecmaVersion>=6&&this.unexpected(),this.parseFunctionStatement(s,!1,!t);case x._class:return t&&this.unexpected(),this.parseClass(s,!0);case x._if:return this.parseIfStatement(s);case x._return:return this.parseReturnStatement(s);case x._switch:return this.parseSwitchStatement(s);case x._throw:return this.parseThrowStatement(s);case x._try:return this.parseTryStatement(s);case x._const:case x._var:return n=n||this.value,t&&"var"!==n&&this.unexpected(),this.parseVarStatement(s,n);case x._while:return this.parseWhileStatement(s);case x._with:return this.parseWithStatement(s);case x.braceL:return this.parseBlock(!0,s);case x.semi:return this.parseEmptyStatement(s);case x._export:case x._import:if(this.options.ecmaVersion>10&&r===x._import){T.lastIndex=this.pos;var a=T.exec(this.input),o=this.pos+a[0].length,h=this.input.charCodeAt(o);if(40===h||46===h)return this.parseExpressionStatement(s,this.parseExpression())}return this.options.allowImportExportEverywhere||(e||this.raise(this.start,"'import' and 'export' may only appear at the top level"),this.inModule||this.raise(this.start,"'import' and 'export' may appear only with 'sourceType: module'")),r===x._import?this.parseImport(s):this.parseExport(s,i);default:if(this.isAsyncFunction())return t&&this.unexpected(),this.next(),this.parseFunctionStatement(s,!0,!t);var l=this.value,u=this.parseExpression();if(r===x.name&&"Identifier"===u.type&&this.eat(x.colon))return this.parseLabeledStatement(s,l,u,t);return this.parseExpressionStatement(s,u)}},W.parseBreakContinueStatement=function(t,e){var i="break"===e;this.next(),this.eat(x.semi)||this.insertSemicolon()?t.label=null:this.type!==x.name?this.unexpected():(t.label=this.parseIdent(),this.semicolon());for(var n=0;n=6?this.eat(x.semi):this.semicolon(),this.finishNode(t,"DoWhileStatement")},W.parseForStatement=function(t){this.next();var e=this.options.ecmaVersion>=9&&this.canAwait&&this.eatContextual("await")?this.lastTokStart:-1;if(this.labels.push(K),this.enterScope(0),this.expect(x.parenL),this.type===x.semi)return e>-1&&this.unexpected(e),this.parseFor(t,null);var i=this.isLet();if(this.type===x._var||this.type===x._const||i){var n=this.startNode(),r=i?"let":this.value;return(this.next(),this.parseVar(n,!0,r),this.finishNode(n,"VariableDeclaration"),(this.type===x._in||this.options.ecmaVersion>=6&&this.isContextual("of"))&&1===n.declarations.length)?(this.options.ecmaVersion>=9&&(this.type===x._in?e>-1&&this.unexpected(e):t.await=e>-1),this.parseForIn(t,n)):(e>-1&&this.unexpected(e),this.parseFor(t,n))}var s=this.isContextual("let"),a=!1,o=new G,h=this.parseExpression(!(e>-1)||"await",o);return this.type===x._in||(a=this.options.ecmaVersion>=6&&this.isContextual("of"))?(this.options.ecmaVersion>=9&&(this.type===x._in?e>-1&&this.unexpected(e):t.await=e>-1),s&&a&&this.raise(h.start,"The left-hand side of a for-of loop may not start with 'let'."),this.toAssignable(h,!1,o),this.checkLValPattern(h),this.parseForIn(t,h)):(this.checkExpressionErrors(o,!0),e>-1&&this.unexpected(e),this.parseFor(t,h))},W.parseFunctionStatement=function(t,e,i){return this.next(),this.parseFunction(t,Y|(i?0:Q),!1,e)},W.parseIfStatement=function(t){return this.next(),t.test=this.parseParenExpression(),t.consequent=this.parseStatement("if"),t.alternate=this.eat(x._else)?this.parseStatement("if"):null,this.finishNode(t,"IfStatement")},W.parseReturnStatement=function(t){return this.inFunction||this.options.allowReturnOutsideFunction||this.raise(this.start,"'return' outside of function"),this.next(),this.eat(x.semi)||this.insertSemicolon()?t.argument=null:(t.argument=this.parseExpression(),this.semicolon()),this.finishNode(t,"ReturnStatement")},W.parseSwitchStatement=function(t){this.next(),t.discriminant=this.parseParenExpression(),t.cases=[],this.expect(x.braceL),this.labels.push($),this.enterScope(0);for(var e,i=!1;this.type!==x.braceR;)if(this.type===x._case||this.type===x._default){var n=this.type===x._case;e&&this.finishNode(e,"SwitchCase"),t.cases.push(e=this.startNode()),e.consequent=[],this.next(),n?e.test=this.parseExpression():(i&&this.raiseRecoverable(this.lastTokStart,"Multiple default clauses"),i=!0,e.test=null),this.expect(x.colon)}else e||this.unexpected(),e.consequent.push(this.parseStatement(null));return this.exitScope(),e&&this.finishNode(e,"SwitchCase"),this.next(),this.labels.pop(),this.finishNode(t,"SwitchStatement")},W.parseThrowStatement=function(t){return this.next(),w.test(this.input.slice(this.lastTokEnd,this.start))&&this.raise(this.lastTokEnd,"Illegal newline after throw"),t.argument=this.parseExpression(),this.semicolon(),this.finishNode(t,"ThrowStatement")};var J=[];W.parseCatchClauseParam=function(){var t=this.parseBindingAtom(),e="Identifier"===t.type;return this.enterScope(e?32:0),this.checkLValPattern(t,e?4:2),this.expect(x.parenR),t},W.parseTryStatement=function(t){if(this.next(),t.block=this.parseBlock(),t.handler=null,this.type===x._catch){var e=this.startNode();this.next(),this.eat(x.parenL)?e.param=this.parseCatchClauseParam():(this.options.ecmaVersion<10&&this.unexpected(),e.param=null,this.enterScope(0)),e.body=this.parseBlock(!1),this.exitScope(),t.handler=this.finishNode(e,"CatchClause")}return t.finalizer=this.eat(x._finally)?this.parseBlock():null,t.handler||t.finalizer||this.raise(t.start,"Missing catch or finally clause"),this.finishNode(t,"TryStatement")},W.parseVarStatement=function(t,e,i){return this.next(),this.parseVar(t,!1,e,i),this.semicolon(),this.finishNode(t,"VariableDeclaration")},W.parseWhileStatement=function(t){return this.next(),t.test=this.parseParenExpression(),this.labels.push(K),t.body=this.parseStatement("while"),this.labels.pop(),this.finishNode(t,"WhileStatement")},W.parseWithStatement=function(t){return this.strict&&this.raise(this.start,"'with' in strict mode"),this.next(),t.object=this.parseParenExpression(),t.body=this.parseStatement("with"),this.finishNode(t,"WithStatement")},W.parseEmptyStatement=function(t){return this.next(),this.finishNode(t,"EmptyStatement")},W.parseLabeledStatement=function(t,e,i,n){for(var r=0,s=this.labels;r=0;o--){var h=this.labels[o];if(h.statementStart===t.start)h.statementStart=this.start,h.kind=a;else break}return this.labels.push({name:e,kind:a,statementStart:this.start}),t.body=this.parseStatement(n?-1===n.indexOf("label")?n+"label":n:"label"),this.labels.pop(),t.label=i,this.finishNode(t,"LabeledStatement")},W.parseExpressionStatement=function(t,e){return t.expression=e,this.semicolon(),this.finishNode(t,"ExpressionStatement")},W.parseBlock=function(t,e,i){for(void 0===t&&(t=!0),void 0===e&&(e=this.startNode()),e.body=[],this.expect(x.braceL),t&&this.enterScope(0);this.type!==x.braceR;){var n=this.parseStatement(null);e.body.push(n)}return i&&(this.strict=!1),this.next(),t&&this.exitScope(),this.finishNode(e,"BlockStatement")},W.parseFor=function(t,e){return t.init=e,this.expect(x.semi),t.test=this.type===x.semi?null:this.parseExpression(),this.expect(x.semi),t.update=this.type===x.parenR?null:this.parseExpression(),this.expect(x.parenR),t.body=this.parseStatement("for"),this.exitScope(),this.labels.pop(),this.finishNode(t,"ForStatement")},W.parseForIn=function(t,e){var i=this.type===x._in;return this.next(),"VariableDeclaration"===e.type&&null!=e.declarations[0].init&&(!i||this.options.ecmaVersion<8||this.strict||"var"!==e.kind||"Identifier"!==e.declarations[0].id.type)&&this.raise(e.start,(i?"for-in":"for-of")+" loop variable declaration may not have an initializer"),t.left=e,t.right=i?this.parseExpression():this.parseMaybeAssign(),this.expect(x.parenR),t.body=this.parseStatement("for"),this.exitScope(),this.labels.pop(),this.finishNode(t,i?"ForInStatement":"ForOfStatement")},W.parseVar=function(t,e,i,n){for(t.declarations=[],t.kind=i;;){var r=this.startNode();if(this.parseVarId(r,i),this.eat(x.eq)?r.init=this.parseMaybeAssign(e):n||"const"!==i||this.type===x._in||this.options.ecmaVersion>=6&&this.isContextual("of")?n||"Identifier"===r.id.type||e&&(this.type===x._in||this.isContextual("of"))?r.init=null:this.raise(this.lastTokEnd,"Complex binding patterns require an initialization value"):this.unexpected(),t.declarations.push(this.finishNode(r,"VariableDeclarator")),!this.eat(x.comma))break}return t},W.parseVarId=function(t,e){t.id=this.parseBindingAtom(),this.checkLValPattern(t.id,"var"===e?1:2,!1)};var Y=1,Q=2;function X(t,e){var i=t.computed,n=t.key;return!i&&("Identifier"===n.type&&n.name===e||"Literal"===n.type&&n.value===e)}W.parseFunction=function(t,e,i,n,r){this.initFunction(t),(this.options.ecmaVersion>=9||this.options.ecmaVersion>=6&&!n)&&(this.type===x.star&&e&Q&&this.unexpected(),t.generator=this.eat(x.star)),this.options.ecmaVersion>=8&&(t.async=!!n),e&Y&&(t.id=4&e&&this.type!==x.name?null:this.parseIdent(),t.id&&!(e&Q)&&this.checkLValSimple(t.id,this.strict||t.generator||t.async?this.treatFunctionsAsVar?1:2:3));var s=this.yieldPos,a=this.awaitPos,o=this.awaitIdentPos;return this.yieldPos=0,this.awaitPos=0,this.awaitIdentPos=0,this.enterScope(j(t.async,t.generator)),e&Y||(t.id=this.type===x.name?this.parseIdent():null),this.parseFunctionParams(t),this.parseFunctionBody(t,i,!1,r),this.yieldPos=s,this.awaitPos=a,this.awaitIdentPos=o,this.finishNode(t,e&Y?"FunctionDeclaration":"FunctionExpression")},W.parseFunctionParams=function(t){this.expect(x.parenL),t.params=this.parseBindingList(x.parenR,!1,this.options.ecmaVersion>=8),this.checkYieldAwaitInDefaultParams()},W.parseClass=function(t,e){this.next();var i=this.strict;this.strict=!0,this.parseClassId(t,e),this.parseClassSuper(t);var n=this.enterClassBody(),r=this.startNode(),s=!1;for(r.body=[],this.expect(x.braceL);this.type!==x.braceR;){var a=this.parseClassElement(null!==t.superClass);a&&(r.body.push(a),"MethodDefinition"===a.type&&"constructor"===a.kind?(s&&this.raiseRecoverable(a.start,"Duplicate constructor in the same class"),s=!0):a.key&&"PrivateIdentifier"===a.key.type&&function(t,e){var i=e.key.name,n=t[i],r="true";return("MethodDefinition"===e.type&&("get"===e.kind||"set"===e.kind)&&(r=(e.static?"s":"i")+e.kind),"iget"===n&&"iset"===r||"iset"===n&&"iget"===r||"sget"===n&&"sset"===r||"sset"===n&&"sget"===r)?(t[i]="true",!1):!!n||(t[i]=r,!1)}(n,a)&&this.raiseRecoverable(a.key.start,"Identifier '#"+a.key.name+"' has already been declared"))}return this.strict=i,this.next(),t.body=this.finishNode(r,"ClassBody"),this.exitClassBody(),this.finishNode(t,e?"ClassDeclaration":"ClassExpression")},W.parseClassElement=function(t){if(this.eat(x.semi))return null;var e=this.options.ecmaVersion,i=this.startNode(),n="",r=!1,s=!1,a="method",o=!1;if(this.eatContextual("static")){if(e>=13&&this.eat(x.braceL))return this.parseClassStaticBlock(i),i;this.isClassElementNameStart()||this.type===x.star?o=!0:n="static"}if(i.static=o,!n&&e>=8&&this.eatContextual("async")&&((this.isClassElementNameStart()||this.type===x.star)&&!this.canInsertSemicolon()?s=!0:n="async"),!n&&(e>=9||!s)&&this.eat(x.star)&&(r=!0),!n&&!s&&!r){var h=this.value;(this.eatContextual("get")||this.eatContextual("set"))&&(this.isClassElementNameStart()?a=h:n=h)}if(n?(i.computed=!1,i.key=this.startNodeAt(this.lastTokStart,this.lastTokStartLoc),i.key.name=n,this.finishNode(i.key,"Identifier")):this.parseClassElementName(i),e<13||this.type===x.parenL||"method"!==a||r||s){var l=!i.static&&X(i,"constructor");l&&"method"!==a&&this.raise(i.key.start,"Constructor can't have get/set modifier"),i.kind=l?"constructor":a,this.parseClassMethod(i,r,s,l&&t)}else this.parseClassField(i);return i},W.isClassElementNameStart=function(){return this.type===x.name||this.type===x.privateId||this.type===x.num||this.type===x.string||this.type===x.bracketL||this.type.keyword},W.parseClassElementName=function(t){this.type===x.privateId?("constructor"===this.value&&this.raise(this.start,"Classes can't have an element named '#constructor'"),t.computed=!1,t.key=this.parsePrivateIdent()):this.parsePropertyName(t)},W.parseClassMethod=function(t,e,i,n){var r=t.key;"constructor"===t.kind?(e&&this.raise(r.start,"Constructor can't be a generator"),i&&this.raise(r.start,"Constructor can't be an async method")):t.static&&X(t,"prototype")&&this.raise(r.start,"Classes may not have a static property named prototype");var s=t.value=this.parseMethod(e,i,n);return"get"===t.kind&&0!==s.params.length&&this.raiseRecoverable(s.start,"getter should have no params"),"set"===t.kind&&1!==s.params.length&&this.raiseRecoverable(s.start,"setter should have exactly one param"),"set"===t.kind&&"RestElement"===s.params[0].type&&this.raiseRecoverable(s.params[0].start,"Setter cannot use rest params"),this.finishNode(t,"MethodDefinition")},W.parseClassField=function(t){if(X(t,"constructor")?this.raise(t.key.start,"Classes can't have a field named 'constructor'"):t.static&&X(t,"prototype")&&this.raise(t.key.start,"Classes can't have a static field named 'prototype'"),this.eat(x.eq)){var e=this.currentThisScope(),i=e.inClassFieldInit;e.inClassFieldInit=!0,t.value=this.parseMaybeAssign(),e.inClassFieldInit=i}else t.value=null;return this.semicolon(),this.finishNode(t,"PropertyDefinition")},W.parseClassStaticBlock=function(t){t.body=[];var e=this.labels;for(this.labels=[],this.enterScope(320);this.type!==x.braceR;){var i=this.parseStatement(null);t.body.push(i)}return this.next(),this.exitScope(),this.labels=e,this.finishNode(t,"StaticBlock")},W.parseClassId=function(t,e){this.type===x.name?(t.id=this.parseIdent(),e&&this.checkLValSimple(t.id,2,!1)):(!0===e&&this.unexpected(),t.id=null)},W.parseClassSuper=function(t){t.superClass=this.eat(x._extends)?this.parseExprSubscripts(null,!1):null},W.enterClassBody=function(){var t={declared:Object.create(null),used:[]};return this.privateNameStack.push(t),t.declared},W.exitClassBody=function(){var t=this.privateNameStack.pop(),e=t.declared,i=t.used;if(this.options.checkPrivateFields)for(var n=this.privateNameStack.length,r=0===n?null:this.privateNameStack[n-1],s=0;s=11&&(this.eatContextual("as")?(t.exported=this.parseModuleExportName(),this.checkExport(e,t.exported,this.lastTokStart)):t.exported=null),this.expectContextual("from"),this.type!==x.string&&this.unexpected(),t.source=this.parseExprAtom(),this.semicolon(),this.finishNode(t,"ExportAllDeclaration")},W.parseExport=function(t,e){if(this.next(),this.eat(x.star))return this.parseExportAllDeclaration(t,e);if(this.eat(x._default))return this.checkExport(e,"default",this.lastTokStart),t.declaration=this.parseExportDefaultDeclaration(),this.finishNode(t,"ExportDefaultDeclaration");if(this.shouldParseExportStatement())t.declaration=this.parseExportDeclaration(t),"VariableDeclaration"===t.declaration.type?this.checkVariableExport(e,t.declaration.declarations):this.checkExport(e,t.declaration.id,t.declaration.id.start),t.specifiers=[],t.source=null;else{if(t.declaration=null,t.specifiers=this.parseExportSpecifiers(e),this.eatContextual("from"))this.type!==x.string&&this.unexpected(),t.source=this.parseExprAtom();else{for(var i=0,n=t.specifiers;i=13&&this.type===x.string){var t=this.parseLiteral(this.value);return z.test(t.value)&&this.raise(t.start,"An export name cannot include a lone surrogate."),t}return this.parseIdent(!0)},W.adaptDirectivePrologue=function(t){for(var e=0;e=5&&"ExpressionStatement"===t.type&&"Literal"===t.expression.type&&"string"==typeof t.expression.value&&('"'===this.input[t.start]||"'"===this.input[t.start])};var tt=U.prototype;tt.toAssignable=function(t,e,i){if(this.options.ecmaVersion>=6&&t)switch(t.type){case"Identifier":this.inAsync&&"await"===t.name&&this.raise(t.start,"Cannot use 'await' as identifier inside an async function");break;case"ObjectPattern":case"ArrayPattern":case"AssignmentPattern":case"RestElement":break;case"ObjectExpression":t.type="ObjectPattern",i&&this.checkPatternErrors(i,!0);for(var n=0,r=t.properties;n=8&&!o&&"async"===h.name&&!this.canInsertSemicolon()&&this.eat(x._function))return this.overrideContext(ti.f_expr),this.parseFunction(this.startNodeAt(s,a),0,!1,!0,e);if(r&&!this.canInsertSemicolon()){if(this.eat(x.arrow))return this.parseArrowExpression(this.startNodeAt(s,a),[h],!1,e);if(this.options.ecmaVersion>=8&&"async"===h.name&&this.type===x.name&&!o&&(!this.potentialArrowInForAwait||"of"!==this.value||this.containsEsc))return h=this.parseIdent(!1),(this.canInsertSemicolon()||!this.eat(x.arrow))&&this.unexpected(),this.parseArrowExpression(this.startNodeAt(s,a),[h],!0,e)}return h;case x.regexp:var l=this.value;return(n=this.parseLiteral(l.value)).regex={pattern:l.pattern,flags:l.flags},n;case x.num:case x.string:return this.parseLiteral(this.value);case x._null:case x._true:case x._false:return(n=this.startNode()).value=this.type===x._null?null:this.type===x._true,n.raw=this.type.keyword,this.next(),this.finishNode(n,"Literal");case x.parenL:var u=this.start,c=this.parseParenAndDistinguishExpression(r,e);return t&&(t.parenthesizedAssign<0&&!this.isSimpleAssignTarget(c)&&(t.parenthesizedAssign=u),t.parenthesizedBind<0&&(t.parenthesizedBind=u)),c;case x.bracketL:return n=this.startNode(),this.next(),n.elements=this.parseExprList(x.bracketR,!0,!0,t),this.finishNode(n,"ArrayExpression");case x.braceL:return this.overrideContext(ti.b_expr),this.parseObj(!1,t);case x._function:return n=this.startNode(),this.next(),this.parseFunction(n,0);case x._class:return this.parseClass(this.startNode(),!1);case x._new:return this.parseNew();case x.backQuote:return this.parseTemplate();case x._import:if(this.options.ecmaVersion>=11)return this.parseExprImport(i);return this.unexpected();default:return this.parseExprAtomDefault()}},tr.parseExprAtomDefault=function(){this.unexpected()},tr.parseExprImport=function(t){var e=this.startNode();this.containsEsc&&this.raiseRecoverable(this.start,"Escape sequence in keyword import");var i=this.parseIdent(!0);return this.type!==x.parenL||t?this.type===x.dot?(e.meta=i,this.parseImportMeta(e)):void this.unexpected():this.parseDynamicImport(e)},tr.parseDynamicImport=function(t){if(this.next(),t.source=this.parseMaybeAssign(),!this.eat(x.parenR)){var e=this.start;this.eat(x.comma)&&this.eat(x.parenR)?this.raiseRecoverable(e,"Trailing comma is not allowed in import()"):this.unexpected(e)}return this.finishNode(t,"ImportExpression")},tr.parseImportMeta=function(t){this.next();var e=this.containsEsc;return t.property=this.parseIdent(!0),"meta"!==t.property.name&&this.raiseRecoverable(t.property.start,"The only valid meta property for import is 'import.meta'"),e&&this.raiseRecoverable(t.start,"'import.meta' must not contain escaped characters"),"module"===this.options.sourceType||this.options.allowImportExportEverywhere||this.raiseRecoverable(t.start,"Cannot use 'import.meta' outside a module"),this.finishNode(t,"MetaProperty")},tr.parseLiteral=function(t){var e=this.startNode();return e.value=t,e.raw=this.input.slice(this.start,this.end),110===e.raw.charCodeAt(e.raw.length-1)&&(e.bigint=e.raw.slice(0,-1).replace(/_/g,"")),this.next(),this.finishNode(e,"Literal")},tr.parseParenExpression=function(){this.expect(x.parenL);var t=this.parseExpression();return this.expect(x.parenR),t},tr.shouldParseArrow=function(t){return!this.canInsertSemicolon()},tr.parseParenAndDistinguishExpression=function(t,e){var i,n=this.start,r=this.startLoc,s=this.options.ecmaVersion>=8;if(this.options.ecmaVersion>=6){this.next();var a,o=this.start,h=this.startLoc,l=[],u=!0,c=!1,d=new G,p=this.yieldPos,f=this.awaitPos;for(this.yieldPos=0,this.awaitPos=0;this.type!==x.parenR;){if(u?u=!1:this.expect(x.comma),s&&this.afterTrailingComma(x.parenR,!0)){c=!0;break}if(this.type===x.ellipsis){a=this.start,l.push(this.parseParenItem(this.parseRestBinding())),this.type===x.comma&&this.raiseRecoverable(this.start,"Comma is not permitted after the rest element");break}l.push(this.parseMaybeAssign(!1,d,this.parseParenItem))}var g=this.lastTokEnd,m=this.lastTokEndLoc;if(this.expect(x.parenR),t&&this.shouldParseArrow(l)&&this.eat(x.arrow))return this.checkPatternErrors(d,!1),this.checkYieldAwaitInDefaultParams(),this.yieldPos=p,this.awaitPos=f,this.parseParenArrowList(n,r,l,e);(!l.length||c)&&this.unexpected(this.lastTokStart),a&&this.unexpected(a),this.checkExpressionErrors(d,!0),this.yieldPos=p||this.yieldPos,this.awaitPos=f||this.awaitPos,l.length>1?((i=this.startNodeAt(o,h)).expressions=l,this.finishNodeAt(i,"SequenceExpression",g,m)):i=l[0]}else i=this.parseParenExpression();if(!this.options.preserveParens)return i;var _=this.startNodeAt(n,r);return _.expression=i,this.finishNode(_,"ParenthesizedExpression")},tr.parseParenItem=function(t){return t},tr.parseParenArrowList=function(t,e,i,n){return this.parseArrowExpression(this.startNodeAt(t,e),i,!1,n)};var ts=[];tr.parseNew=function(){this.containsEsc&&this.raiseRecoverable(this.start,"Escape sequence in keyword new");var t=this.startNode(),e=this.parseIdent(!0);if(this.options.ecmaVersion>=6&&this.eat(x.dot)){t.meta=e;var i=this.containsEsc;return t.property=this.parseIdent(!0),"target"!==t.property.name&&this.raiseRecoverable(t.property.start,"The only valid meta property for new is 'new.target'"),i&&this.raiseRecoverable(t.start,"'new.target' must not contain escaped characters"),this.allowNewDotTarget||this.raiseRecoverable(t.start,"'new.target' can only be used in functions and class static block"),this.finishNode(t,"MetaProperty")}var n=this.start,r=this.startLoc;return t.callee=this.parseSubscripts(this.parseExprAtom(null,!1,!0),n,r,!0,!1),this.eat(x.parenL)?t.arguments=this.parseExprList(x.parenR,this.options.ecmaVersion>=8,!1):t.arguments=ts,this.finishNode(t,"NewExpression")},tr.parseTemplateElement=function(t){var e=t.isTagged,i=this.startNode();return this.type===x.invalidTemplate?(e||this.raiseRecoverable(this.start,"Bad escape sequence in untagged template literal"),i.value={raw:this.value,cooked:null}):i.value={raw:this.input.slice(this.start,this.end).replace(/\r\n?/g,"\n"),cooked:this.value},this.next(),i.tail=this.type===x.backQuote,this.finishNode(i,"TemplateElement")},tr.parseTemplate=function(t){void 0===t&&(t={});var e=t.isTagged;void 0===e&&(e=!1);var i=this.startNode();this.next(),i.expressions=[];var n=this.parseTemplateElement({isTagged:e});for(i.quasis=[n];!n.tail;)this.type===x.eof&&this.raise(this.pos,"Unterminated template literal"),this.expect(x.dollarBraceL),i.expressions.push(this.parseExpression()),this.expect(x.braceR),i.quasis.push(n=this.parseTemplateElement({isTagged:e}));return this.next(),this.finishNode(i,"TemplateLiteral")},tr.isAsyncProp=function(t){return!t.computed&&"Identifier"===t.key.type&&"async"===t.key.name&&(this.type===x.name||this.type===x.num||this.type===x.string||this.type===x.bracketL||this.type.keyword||this.options.ecmaVersion>=9&&this.type===x.star)&&!w.test(this.input.slice(this.lastTokEnd,this.start))},tr.parseObj=function(t,e){var i=this.startNode(),n=!0,r={};for(i.properties=[],this.next();!this.eat(x.braceR);){if(n)n=!1;else if(this.expect(x.comma),this.options.ecmaVersion>=5&&this.afterTrailingComma(x.braceR))break;var s=this.parseProperty(t,e);t||this.checkPropClash(s,r,e),i.properties.push(s)}return this.finishNode(i,t?"ObjectPattern":"ObjectExpression")},tr.parseProperty=function(t,e){var i,n,r,s,a=this.startNode();if(this.options.ecmaVersion>=9&&this.eat(x.ellipsis))return t?(a.argument=this.parseIdent(!1),this.type===x.comma&&this.raiseRecoverable(this.start,"Comma is not permitted after the rest element"),this.finishNode(a,"RestElement")):(a.argument=this.parseMaybeAssign(!1,e),this.type===x.comma&&e&&e.trailingComma<0&&(e.trailingComma=this.start),this.finishNode(a,"SpreadElement"));this.options.ecmaVersion>=6&&(a.method=!1,a.shorthand=!1,(t||e)&&(r=this.start,s=this.startLoc),t||(i=this.eat(x.star)));var o=this.containsEsc;return this.parsePropertyName(a),!t&&!o&&this.options.ecmaVersion>=8&&!i&&this.isAsyncProp(a)?(n=!0,i=this.options.ecmaVersion>=9&&this.eat(x.star),this.parsePropertyName(a)):n=!1,this.parsePropertyValue(a,t,i,n,r,s,e,o),this.finishNode(a,"Property")},tr.parseGetterSetter=function(t){t.kind=t.key.name,this.parsePropertyName(t),t.value=this.parseMethod(!1);var e="get"===t.kind?0:1;if(t.value.params.length!==e){var i=t.value.start;"get"===t.kind?this.raiseRecoverable(i,"getter should have no params"):this.raiseRecoverable(i,"setter should have exactly one param")}else"set"===t.kind&&"RestElement"===t.value.params[0].type&&this.raiseRecoverable(t.value.params[0].start,"Setter cannot use rest params")},tr.parsePropertyValue=function(t,e,i,n,r,s,a,o){(i||n)&&this.type===x.colon&&this.unexpected(),this.eat(x.colon)?(t.value=e?this.parseMaybeDefault(this.start,this.startLoc):this.parseMaybeAssign(!1,a),t.kind="init"):this.options.ecmaVersion>=6&&this.type===x.parenL?(e&&this.unexpected(),t.kind="init",t.method=!0,t.value=this.parseMethod(i,n)):e||o||!(this.options.ecmaVersion>=5)||t.computed||"Identifier"!==t.key.type||"get"!==t.key.name&&"set"!==t.key.name||this.type===x.comma||this.type===x.braceR||this.type===x.eq?this.options.ecmaVersion>=6&&!t.computed&&"Identifier"===t.key.type?((i||n)&&this.unexpected(),this.checkUnreserved(t.key),"await"!==t.key.name||this.awaitIdentPos||(this.awaitIdentPos=r),t.kind="init",e?t.value=this.parseMaybeDefault(r,s,this.copyNode(t.key)):this.type===x.eq&&a?(a.shorthandAssign<0&&(a.shorthandAssign=this.start),t.value=this.parseMaybeDefault(r,s,this.copyNode(t.key))):t.value=this.copyNode(t.key),t.shorthand=!0):this.unexpected():((i||n)&&this.unexpected(),this.parseGetterSetter(t))},tr.parsePropertyName=function(t){if(this.options.ecmaVersion>=6){if(this.eat(x.bracketL))return t.computed=!0,t.key=this.parseMaybeAssign(),this.expect(x.bracketR),t.key;t.computed=!1}return t.key=this.type===x.num||this.type===x.string?this.parseExprAtom():this.parseIdent("never"!==this.options.allowReserved)},tr.initFunction=function(t){t.id=null,this.options.ecmaVersion>=6&&(t.generator=t.expression=!1),this.options.ecmaVersion>=8&&(t.async=!1)},tr.parseMethod=function(t,e,i){var n=this.startNode(),r=this.yieldPos,s=this.awaitPos,a=this.awaitIdentPos;return this.initFunction(n),this.options.ecmaVersion>=6&&(n.generator=t),this.options.ecmaVersion>=8&&(n.async=!!e),this.yieldPos=0,this.awaitPos=0,this.awaitIdentPos=0,this.enterScope(64|j(e,n.generator)|(i?128:0)),this.expect(x.parenL),n.params=this.parseBindingList(x.parenR,!1,this.options.ecmaVersion>=8),this.checkYieldAwaitInDefaultParams(),this.parseFunctionBody(n,!1,!0,!1),this.yieldPos=r,this.awaitPos=s,this.awaitIdentPos=a,this.finishNode(n,"FunctionExpression")},tr.parseArrowExpression=function(t,e,i,n){var r=this.yieldPos,s=this.awaitPos,a=this.awaitIdentPos;return this.enterScope(16|j(i,!1)),this.initFunction(t),this.options.ecmaVersion>=8&&(t.async=!!i),this.yieldPos=0,this.awaitPos=0,this.awaitIdentPos=0,t.params=this.toAssignableList(e,!0),this.parseFunctionBody(t,!0,!1,n),this.yieldPos=r,this.awaitPos=s,this.awaitIdentPos=a,this.finishNode(t,"ArrowFunctionExpression")},tr.parseFunctionBody=function(t,e,i,n){var r=e&&this.type!==x.braceL,s=this.strict,a=!1;if(r)t.body=this.parseMaybeAssign(n),t.expression=!0,this.checkParams(t,!1);else{var o=this.options.ecmaVersion>=7&&!this.isSimpleParamList(t.params);(!s||o)&&(a=this.strictDirective(this.end))&&o&&this.raiseRecoverable(t.start,"Illegal 'use strict' directive in function with non-simple parameter list");var h=this.labels;this.labels=[],a&&(this.strict=!0),this.checkParams(t,!s&&!a&&!e&&!i&&this.isSimpleParamList(t.params)),this.strict&&t.id&&this.checkLValSimple(t.id,5),t.body=this.parseBlock(!1,void 0,a&&!s),t.expression=!1,this.adaptDirectivePrologue(t.body.body),this.labels=h}this.exitScope()},tr.isSimpleParamList=function(t){for(var e=0;e-1||r.functions.indexOf(t)>-1||r.var.indexOf(t)>-1,r.lexical.push(t),this.inModule&&1&r.flags&&delete this.undefinedExports[t]}else if(4===e)this.currentScope().lexical.push(t);else if(3===e){var s=this.currentScope();n=this.treatFunctionsAsVar?s.lexical.indexOf(t)>-1:s.lexical.indexOf(t)>-1||s.var.indexOf(t)>-1,s.functions.push(t)}else for(var a=this.scopeStack.length-1;a>=0;--a){var o=this.scopeStack[a];if(o.lexical.indexOf(t)>-1&&!(32&o.flags&&o.lexical[0]===t)||!this.treatFunctionsAsVarInScope(o)&&o.functions.indexOf(t)>-1){n=!0;break}if(o.var.push(t),this.inModule&&1&o.flags&&delete this.undefinedExports[t],259&o.flags)break}n&&this.raiseRecoverable(i,"Identifier '"+t+"' has already been declared")},to.checkLocalExport=function(t){-1===this.scopeStack[0].lexical.indexOf(t.name)&&-1===this.scopeStack[0].var.indexOf(t.name)&&(this.undefinedExports[t.name]=t)},to.currentScope=function(){return this.scopeStack[this.scopeStack.length-1]},to.currentVarScope=function(){for(var t=this.scopeStack.length-1;;t--){var e=this.scopeStack[t];if(259&e.flags)return e}},to.currentThisScope=function(){for(var t=this.scopeStack.length-1;;t--){var e=this.scopeStack[t];if(259&e.flags&&!(16&e.flags))return e}};var tl=function(t,e,i){this.type="",this.start=e,this.end=0,t.options.locations&&(this.loc=new B(t,i)),t.options.directSourceFile&&(this.sourceFile=t.options.directSourceFile),t.options.ranges&&(this.range=[e,0])},tu=U.prototype;function tc(t,e,i,n){return t.type=e,t.end=i,this.options.locations&&(t.loc.end=n),this.options.ranges&&(t.range[1]=i),t}tu.startNode=function(){return new tl(this,this.start,this.startLoc)},tu.startNodeAt=function(t,e){return new tl(this,t,e)},tu.finishNode=function(t,e){return tc.call(this,t,e,this.lastTokEnd,this.lastTokEndLoc)},tu.finishNodeAt=function(t,e,i,n){return tc.call(this,t,e,i,n)},tu.copyNode=function(t){var e=new tl(this,t.start,this.startLoc);for(var i in t)e[i]=t[i];return e};for(var td="ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS",tp=td+" Extended_Pictographic",tf=tp+" EBase EComp EMod EPres ExtPict",tg={9:td,10:tp,11:tp,12:tf,13:tf,14:tf},tm={9:"",10:"",11:"",12:"",13:"",14:"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji"},t_="Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu",tv="Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb",ty=tv+" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd",tb=ty+" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho",tx=tb+" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi",tw=tx+" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith",tk={9:tv,10:ty,11:tb,12:tx,13:tw,14:tw+" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz"},tC={},tS=0,tI=[9,10,11,12,13,14];tS=6?"uy":"")+(t.options.ecmaVersion>=9?"s":"")+(t.options.ecmaVersion>=13?"d":"")+(t.options.ecmaVersion>=15?"v":""),this.unicodeProperties=tC[t.options.ecmaVersion>=14?14:t.options.ecmaVersion],this.source="",this.flags="",this.start=0,this.switchU=!1,this.switchV=!1,this.switchN=!1,this.pos=0,this.lastIntValue=0,this.lastStringValue="",this.lastAssertionIsQuantifiable=!1,this.numCapturingParens=0,this.maxBackReference=0,this.groupNames=[],this.backReferenceNames=[]};function tA(t){return 36===t||t>=40&&t<=43||46===t||63===t||t>=91&&t<=94||t>=123&&t<=125}function tP(t){return t>=65&&t<=90||t>=97&&t<=122}function tM(t){return tP(t)||95===t}function tO(t){return t>=48&&t<=57}function tN(t){return t>=48&&t<=57||t>=65&&t<=70||t>=97&&t<=102}function tL(t){return t>=65&&t<=70?10+(t-65):t>=97&&t<=102?10+(t-97):t-48}function tz(t){return t>=48&&t<=55}tE.prototype.reset=function(t,e,i){var n=-1!==i.indexOf("v"),r=-1!==i.indexOf("u");this.start=0|t,this.source=e+"",this.flags=i,n&&this.parser.options.ecmaVersion>=15?(this.switchU=!0,this.switchV=!0,this.switchN=!0):(this.switchU=r&&this.parser.options.ecmaVersion>=6,this.switchV=!1,this.switchN=r&&this.parser.options.ecmaVersion>=9)},tE.prototype.raise=function(t){this.parser.raiseRecoverable(this.start,"Invalid regular expression: /"+this.source+"/: "+t)},tE.prototype.at=function(t,e){void 0===e&&(e=!1);var i=this.source,n=i.length;if(t>=n)return -1;var r=i.charCodeAt(t);if(!(e||this.switchU)||r<=55295||r>=57344||t+1>=n)return r;var s=i.charCodeAt(t+1);return s>=56320&&s<=57343?(r<<10)+s-56613888:r},tE.prototype.nextIndex=function(t,e){void 0===e&&(e=!1);var i=this.source,n=i.length;if(t>=n)return n;var r,s=i.charCodeAt(t);return!(e||this.switchU)||s<=55295||s>=57344||t+1>=n||(r=i.charCodeAt(t+1))<56320||r>57343?t+1:t+2},tE.prototype.current=function(t){return void 0===t&&(t=!1),this.at(this.pos,t)},tE.prototype.lookahead=function(t){return void 0===t&&(t=!1),this.at(this.nextIndex(this.pos,t),t)},tE.prototype.advance=function(t){void 0===t&&(t=!1),this.pos=this.nextIndex(this.pos,t)},tE.prototype.eat=function(t,e){return void 0===e&&(e=!1),this.current(e)===t&&(this.advance(e),!0)},tE.prototype.eatChars=function(t,e){void 0===e&&(e=!1);for(var i=this.pos,n=0;n-1&&this.raise(t.start,"Duplicate regular expression flag"),"u"===a&&(n=!0),"v"===a&&(r=!0)}this.options.ecmaVersion>=15&&n&&r&&this.raise(t.start,"Invalid regular expression flag")},tT.validateRegExpPattern=function(t){this.regexp_pattern(t),!t.switchN&&this.options.ecmaVersion>=9&&t.groupNames.length>0&&(t.switchN=!0,this.regexp_pattern(t))},tT.regexp_pattern=function(t){t.pos=0,t.lastIntValue=0,t.lastStringValue="",t.lastAssertionIsQuantifiable=!1,t.numCapturingParens=0,t.maxBackReference=0,t.groupNames.length=0,t.backReferenceNames.length=0,this.regexp_disjunction(t),t.pos!==t.source.length&&(t.eat(41)&&t.raise("Unmatched ')'"),(t.eat(93)||t.eat(125))&&t.raise("Lone quantifier brackets")),t.maxBackReference>t.numCapturingParens&&t.raise("Invalid escape");for(var e=0,i=t.backReferenceNames;e=9&&(i=t.eat(60)),t.eat(61)||t.eat(33))return this.regexp_disjunction(t),t.eat(41)||t.raise("Unterminated group"),t.lastAssertionIsQuantifiable=!i,!0}return t.pos=e,!1},tT.regexp_eatQuantifier=function(t,e){return void 0===e&&(e=!1),!!this.regexp_eatQuantifierPrefix(t,e)&&(t.eat(63),!0)},tT.regexp_eatQuantifierPrefix=function(t,e){return t.eat(42)||t.eat(43)||t.eat(63)||this.regexp_eatBracedQuantifier(t,e)},tT.regexp_eatBracedQuantifier=function(t,e){var i=t.pos;if(t.eat(123)){var n=0,r=-1;if(this.regexp_eatDecimalDigits(t)&&(n=t.lastIntValue,t.eat(44)&&this.regexp_eatDecimalDigits(t)&&(r=t.lastIntValue),t.eat(125)))return -1!==r&&r=9?this.regexp_groupSpecifier(t):63===t.current()&&t.raise("Invalid group"),this.regexp_disjunction(t),t.eat(41))return t.numCapturingParens+=1,!0;t.raise("Unterminated group")}return!1},tT.regexp_eatExtendedAtom=function(t){return t.eat(46)||this.regexp_eatReverseSolidusAtomEscape(t)||this.regexp_eatCharacterClass(t)||this.regexp_eatUncapturingGroup(t)||this.regexp_eatCapturingGroup(t)||this.regexp_eatInvalidBracedQuantifier(t)||this.regexp_eatExtendedPatternCharacter(t)},tT.regexp_eatInvalidBracedQuantifier=function(t){return this.regexp_eatBracedQuantifier(t,!0)&&t.raise("Nothing to repeat"),!1},tT.regexp_eatSyntaxCharacter=function(t){var e=t.current();return!!tA(e)&&(t.lastIntValue=e,t.advance(),!0)},tT.regexp_eatPatternCharacters=function(t){for(var e=t.pos,i=0;-1!==(i=t.current())&&!tA(i);)t.advance();return t.pos!==e},tT.regexp_eatExtendedPatternCharacter=function(t){var e=t.current();return -1!==e&&36!==e&&(!(e>=40)||!(e<=43))&&46!==e&&63!==e&&91!==e&&94!==e&&124!==e&&(t.advance(),!0)},tT.regexp_groupSpecifier=function(t){if(t.eat(63)){if(this.regexp_eatGroupName(t)){-1!==t.groupNames.indexOf(t.lastStringValue)&&t.raise("Duplicate capture group name"),t.groupNames.push(t.lastStringValue);return}t.raise("Invalid group")}},tT.regexp_eatGroupName=function(t){if(t.lastStringValue="",t.eat(60)){if(this.regexp_eatRegExpIdentifierName(t)&&t.eat(62))return!0;t.raise("Invalid capture group name")}return!1},tT.regexp_eatRegExpIdentifierName=function(t){if(t.lastStringValue="",this.regexp_eatRegExpIdentifierStart(t)){for(t.lastStringValue+=L(t.lastIntValue);this.regexp_eatRegExpIdentifierPart(t);)t.lastStringValue+=L(t.lastIntValue);return!0}return!1},tT.regexp_eatRegExpIdentifierStart=function(t){var e,i=t.pos,n=this.options.ecmaVersion>=11,r=t.current(n);return(t.advance(n),92===r&&this.regexp_eatRegExpUnicodeEscapeSequence(t,n)&&(r=t.lastIntValue),p(e=r,!0)||36===e||95===e)?(t.lastIntValue=r,!0):(t.pos=i,!1)},tT.regexp_eatRegExpIdentifierPart=function(t){var e,i=t.pos,n=this.options.ecmaVersion>=11,r=t.current(n);return(t.advance(n),92===r&&this.regexp_eatRegExpUnicodeEscapeSequence(t,n)&&(r=t.lastIntValue),f(e=r,!0)||36===e||95===e||8204===e||8205===e)?(t.lastIntValue=r,!0):(t.pos=i,!1)},tT.regexp_eatAtomEscape=function(t){return!!(this.regexp_eatBackReference(t)||this.regexp_eatCharacterClassEscape(t)||this.regexp_eatCharacterEscape(t)||t.switchN&&this.regexp_eatKGroupName(t))||(t.switchU&&(99===t.current()&&t.raise("Invalid unicode escape"),t.raise("Invalid escape")),!1)},tT.regexp_eatBackReference=function(t){var e=t.pos;if(this.regexp_eatDecimalEscape(t)){var i=t.lastIntValue;if(t.switchU)return i>t.maxBackReference&&(t.maxBackReference=i),!0;if(i<=t.numCapturingParens)return!0;t.pos=e}return!1},tT.regexp_eatKGroupName=function(t){if(t.eat(107)){if(this.regexp_eatGroupName(t))return t.backReferenceNames.push(t.lastStringValue),!0;t.raise("Invalid named reference")}return!1},tT.regexp_eatCharacterEscape=function(t){return this.regexp_eatControlEscape(t)||this.regexp_eatCControlLetter(t)||this.regexp_eatZero(t)||this.regexp_eatHexEscapeSequence(t)||this.regexp_eatRegExpUnicodeEscapeSequence(t,!1)||!t.switchU&&this.regexp_eatLegacyOctalEscapeSequence(t)||this.regexp_eatIdentityEscape(t)},tT.regexp_eatCControlLetter=function(t){var e=t.pos;if(t.eat(99)){if(this.regexp_eatControlLetter(t))return!0;t.pos=e}return!1},tT.regexp_eatZero=function(t){return!(48!==t.current()||tO(t.lookahead()))&&(t.lastIntValue=0,t.advance(),!0)},tT.regexp_eatControlEscape=function(t){var e=t.current();return 116===e?(t.lastIntValue=9,t.advance(),!0):110===e?(t.lastIntValue=10,t.advance(),!0):118===e?(t.lastIntValue=11,t.advance(),!0):102===e?(t.lastIntValue=12,t.advance(),!0):114===e&&(t.lastIntValue=13,t.advance(),!0)},tT.regexp_eatControlLetter=function(t){var e=t.current();return!!tP(e)&&(t.lastIntValue=e%32,t.advance(),!0)},tT.regexp_eatRegExpUnicodeEscapeSequence=function(t,e){void 0===e&&(e=!1);var i=t.pos,n=e||t.switchU;if(t.eat(117)){if(this.regexp_eatFixedHexDigits(t,4)){var r,s=t.lastIntValue;if(n&&s>=55296&&s<=56319){var a=t.pos;if(t.eat(92)&&t.eat(117)&&this.regexp_eatFixedHexDigits(t,4)){var o=t.lastIntValue;if(o>=56320&&o<=57343)return t.lastIntValue=(s-55296)*1024+(o-56320)+65536,!0}t.pos=a,t.lastIntValue=s}return!0}if(n&&t.eat(123)&&this.regexp_eatHexDigits(t)&&t.eat(125)&&(r=t.lastIntValue)>=0&&r<=1114111)return!0;n&&t.raise("Invalid unicode escape"),t.pos=i}return!1},tT.regexp_eatIdentityEscape=function(t){if(t.switchU)return!!this.regexp_eatSyntaxCharacter(t)||!!t.eat(47)&&(t.lastIntValue=47,!0);var e=t.current();return 99!==e&&(!t.switchN||107!==e)&&(t.lastIntValue=e,t.advance(),!0)},tT.regexp_eatDecimalEscape=function(t){t.lastIntValue=0;var e=t.current();if(e>=49&&e<=57){do t.lastIntValue=10*t.lastIntValue+(e-48),t.advance();while((e=t.current())>=48&&e<=57)return!0}return!1},tT.regexp_eatCharacterClassEscape=function(t){var e,i=t.current();if(100===i||68===i||115===i||83===i||119===i||87===i)return t.lastIntValue=-1,t.advance(),1;var n=!1;if(t.switchU&&this.options.ecmaVersion>=9&&((n=80===i)||112===i)){if(t.lastIntValue=-1,t.advance(),t.eat(123)&&(e=this.regexp_eatUnicodePropertyValueExpression(t))&&t.eat(125))return n&&2===e&&t.raise("Invalid property name"),e;t.raise("Invalid property name")}return 0},tT.regexp_eatUnicodePropertyValueExpression=function(t){var e=t.pos;if(this.regexp_eatUnicodePropertyName(t)&&t.eat(61)){var i=t.lastStringValue;if(this.regexp_eatUnicodePropertyValue(t)){var n=t.lastStringValue;return this.regexp_validateUnicodePropertyNameAndValue(t,i,n),1}}if(t.pos=e,this.regexp_eatLoneUnicodePropertyNameOrValue(t)){var r=t.lastStringValue;return this.regexp_validateUnicodePropertyNameOrValue(t,r)}return 0},tT.regexp_validateUnicodePropertyNameAndValue=function(t,e,i){M(t.unicodeProperties.nonBinary,e)||t.raise("Invalid property name"),t.unicodeProperties.nonBinary[e].test(i)||t.raise("Invalid property value")},tT.regexp_validateUnicodePropertyNameOrValue=function(t,e){return t.unicodeProperties.binary.test(e)?1:t.switchV&&t.unicodeProperties.binaryOfStrings.test(e)?2:void t.raise("Invalid property name")},tT.regexp_eatUnicodePropertyName=function(t){var e=0;for(t.lastStringValue="";tM(e=t.current());)t.lastStringValue+=L(e),t.advance();return""!==t.lastStringValue},tT.regexp_eatUnicodePropertyValue=function(t){var e,i=0;for(t.lastStringValue="";tM(e=i=t.current())||tO(e);)t.lastStringValue+=L(i),t.advance();return""!==t.lastStringValue},tT.regexp_eatLoneUnicodePropertyNameOrValue=function(t){return this.regexp_eatUnicodePropertyValue(t)},tT.regexp_eatCharacterClass=function(t){if(t.eat(91)){var e=t.eat(94),i=this.regexp_classContents(t);return t.eat(93)||t.raise("Unterminated character class"),e&&2===i&&t.raise("Negated character class may contain strings"),!0}return!1},tT.regexp_classContents=function(t){return 93===t.current()?1:t.switchV?this.regexp_classSetExpression(t):(this.regexp_nonEmptyClassRanges(t),1)},tT.regexp_nonEmptyClassRanges=function(t){for(;this.regexp_eatClassAtom(t);){var e=t.lastIntValue;if(t.eat(45)&&this.regexp_eatClassAtom(t)){var i=t.lastIntValue;t.switchU&&(-1===e||-1===i)&&t.raise("Invalid character class"),-1!==e&&-1!==i&&e>i&&t.raise("Range out of order in character class")}}},tT.regexp_eatClassAtom=function(t){var e=t.pos;if(t.eat(92)){if(this.regexp_eatClassEscape(t))return!0;if(t.switchU){var i=t.current();(99===i||tz(i))&&t.raise("Invalid class escape"),t.raise("Invalid escape")}t.pos=e}var n=t.current();return 93!==n&&(t.lastIntValue=n,t.advance(),!0)},tT.regexp_eatClassEscape=function(t){var e=t.pos;if(t.eat(98))return t.lastIntValue=8,!0;if(t.switchU&&t.eat(45))return t.lastIntValue=45,!0;if(!t.switchU&&t.eat(99)){if(this.regexp_eatClassControlLetter(t))return!0;t.pos=e}return this.regexp_eatCharacterClassEscape(t)||this.regexp_eatCharacterEscape(t)},tT.regexp_classSetExpression=function(t){var e,i=1;if(this.regexp_eatClassSetRange(t));else if(e=this.regexp_eatClassSetOperand(t)){2===e&&(i=2);for(var n=t.pos;t.eatChars([38,38]);){if(38!==t.current()&&(e=this.regexp_eatClassSetOperand(t))){2!==e&&(i=1);continue}t.raise("Invalid character in character class")}if(n!==t.pos)return i;for(;t.eatChars([45,45]);)this.regexp_eatClassSetOperand(t)||t.raise("Invalid character in character class");if(n!==t.pos)return i}else t.raise("Invalid character in character class");for(;;)if(!this.regexp_eatClassSetRange(t)){if(!(e=this.regexp_eatClassSetOperand(t)))return i;2===e&&(i=2)}},tT.regexp_eatClassSetRange=function(t){var e=t.pos;if(this.regexp_eatClassSetCharacter(t)){var i=t.lastIntValue;if(t.eat(45)&&this.regexp_eatClassSetCharacter(t)){var n=t.lastIntValue;return -1!==i&&-1!==n&&i>n&&t.raise("Range out of order in character class"),!0}t.pos=e}return!1},tT.regexp_eatClassSetOperand=function(t){return this.regexp_eatClassSetCharacter(t)?1:this.regexp_eatClassStringDisjunction(t)||this.regexp_eatNestedClass(t)},tT.regexp_eatNestedClass=function(t){var e=t.pos;if(t.eat(91)){var i=t.eat(94),n=this.regexp_classContents(t);if(t.eat(93))return i&&2===n&&t.raise("Negated character class may contain strings"),n;t.pos=e}if(t.eat(92)){var r=this.regexp_eatCharacterClassEscape(t);if(r)return r;t.pos=e}return null},tT.regexp_eatClassStringDisjunction=function(t){var e=t.pos;if(t.eatChars([92,113])){if(t.eat(123)){var i=this.regexp_classStringDisjunctionContents(t);if(t.eat(125))return i}else t.raise("Invalid escape");t.pos=e}return null},tT.regexp_classStringDisjunctionContents=function(t){for(var e=this.regexp_classString(t);t.eat(124);)2===this.regexp_classString(t)&&(e=2);return e},tT.regexp_classString=function(t){for(var e=0;this.regexp_eatClassSetCharacter(t);)e++;return 1===e?1:2},tT.regexp_eatClassSetCharacter=function(t){var e,i=t.pos;if(t.eat(92))return!!(this.regexp_eatCharacterEscape(t)||this.regexp_eatClassSetReservedPunctuator(t))||(t.eat(98)?(t.lastIntValue=8,!0):(t.pos=i,!1));var n=t.current();return!(n<0||n===t.lookahead()&&(33===n||n>=35&&n<=38||n>=42&&n<=44||46===n||n>=58&&n<=64||94===n||96===n||126===n)||40===(e=n)||41===e||45===e||47===e||e>=91&&e<=93||e>=123&&e<=125)&&(t.advance(),t.lastIntValue=n,!0)},tT.regexp_eatClassSetReservedPunctuator=function(t){var e=t.current();return!!(33===e||35===e||37===e||38===e||44===e||45===e||e>=58&&e<=62||64===e||96===e||126===e)&&(t.lastIntValue=e,t.advance(),!0)},tT.regexp_eatClassControlLetter=function(t){var e=t.current();return(!!tO(e)||95===e)&&(t.lastIntValue=e%32,t.advance(),!0)},tT.regexp_eatHexEscapeSequence=function(t){var e=t.pos;if(t.eat(120)){if(this.regexp_eatFixedHexDigits(t,2))return!0;t.switchU&&t.raise("Invalid escape"),t.pos=e}return!1},tT.regexp_eatDecimalDigits=function(t){var e=t.pos,i=0;for(t.lastIntValue=0;tO(i=t.current());)t.lastIntValue=10*t.lastIntValue+(i-48),t.advance();return t.pos!==e},tT.regexp_eatHexDigits=function(t){var e=t.pos,i=0;for(t.lastIntValue=0;tN(i=t.current());)t.lastIntValue=16*t.lastIntValue+tL(i),t.advance();return t.pos!==e},tT.regexp_eatLegacyOctalEscapeSequence=function(t){if(this.regexp_eatOctalDigit(t)){var e=t.lastIntValue;if(this.regexp_eatOctalDigit(t)){var i=t.lastIntValue;e<=3&&this.regexp_eatOctalDigit(t)?t.lastIntValue=64*e+8*i+t.lastIntValue:t.lastIntValue=8*e+i}else t.lastIntValue=e;return!0}return!1},tT.regexp_eatOctalDigit=function(t){var e=t.current();return tz(e)?(t.lastIntValue=e-48,t.advance(),!0):(t.lastIntValue=0,!1)},tT.regexp_eatFixedHexDigits=function(t,e){var i=t.pos;t.lastIntValue=0;for(var n=0;n=this.input.length)?this.finishToken(x.eof):t.override?t.override(this):void this.readToken(this.fullCharCodeAtPos())},tB.readToken=function(t){return p(t,this.options.ecmaVersion>=6)||92===t?this.readWord():this.getTokenFromCode(t)},tB.fullCharCodeAtPos=function(){var t=this.input.charCodeAt(this.pos);if(t<=55295||t>=56320)return t;var e=this.input.charCodeAt(this.pos+1);return e<=56319||e>=57344?t:(t<<10)+e-56613888},tB.skipBlockComment=function(){var t=this.options.onComment&&this.curPosition(),e=this.pos,i=this.input.indexOf("*/",this.pos+=2);if(-1===i&&this.raise(this.pos-2,"Unterminated comment"),this.pos=i+2,this.options.locations)for(var n=void 0,r=e;(n=S(this.input,r,this.pos))>-1;)++this.curLine,r=this.lineStart=n;this.options.onComment&&this.options.onComment(!0,this.input.slice(e+2,i),e,this.pos,t,this.curPosition())},tB.skipLineComment=function(t){for(var e=this.pos,i=this.options.onComment&&this.curPosition(),n=this.input.charCodeAt(this.pos+=t);this.pos8&&t<14||t>=5760&&I.test(String.fromCharCode(t)))++this.pos;else break e}}},tB.finishToken=function(t,e){this.end=this.pos,this.options.locations&&(this.endLoc=this.curPosition());var i=this.type;this.type=t,this.value=e,this.updateContext(i)},tB.readToken_dot=function(){var t=this.input.charCodeAt(this.pos+1);if(t>=48&&t<=57)return this.readNumber(!0);var e=this.input.charCodeAt(this.pos+2);return this.options.ecmaVersion>=6&&46===t&&46===e?(this.pos+=3,this.finishToken(x.ellipsis)):(++this.pos,this.finishToken(x.dot))},tB.readToken_slash=function(){var t=this.input.charCodeAt(this.pos+1);return this.exprAllowed?(++this.pos,this.readRegexp()):61===t?this.finishOp(x.assign,2):this.finishOp(x.slash,1)},tB.readToken_mult_modulo_exp=function(t){var e=this.input.charCodeAt(this.pos+1),i=1,n=42===t?x.star:x.modulo;return(this.options.ecmaVersion>=7&&42===t&&42===e&&(++i,n=x.starstar,e=this.input.charCodeAt(this.pos+2)),61===e)?this.finishOp(x.assign,i+1):this.finishOp(n,i)},tB.readToken_pipe_amp=function(t){var e=this.input.charCodeAt(this.pos+1);return e===t?this.options.ecmaVersion>=12&&61===this.input.charCodeAt(this.pos+2)?this.finishOp(x.assign,3):this.finishOp(124===t?x.logicalOR:x.logicalAND,2):61===e?this.finishOp(x.assign,2):this.finishOp(124===t?x.bitwiseOR:x.bitwiseAND,1)},tB.readToken_caret=function(){return 61===this.input.charCodeAt(this.pos+1)?this.finishOp(x.assign,2):this.finishOp(x.bitwiseXOR,1)},tB.readToken_plus_min=function(t){var e=this.input.charCodeAt(this.pos+1);return e===t?45===e&&!this.inModule&&62===this.input.charCodeAt(this.pos+2)&&(0===this.lastTokEnd||w.test(this.input.slice(this.lastTokEnd,this.pos)))?(this.skipLineComment(3),this.skipSpace(),this.nextToken()):this.finishOp(x.incDec,2):61===e?this.finishOp(x.assign,2):this.finishOp(x.plusMin,1)},tB.readToken_lt_gt=function(t){var e=this.input.charCodeAt(this.pos+1),i=1;return e===t?(i=62===t&&62===this.input.charCodeAt(this.pos+2)?3:2,61===this.input.charCodeAt(this.pos+i))?this.finishOp(x.assign,i+1):this.finishOp(x.bitShift,i):33!==e||60!==t||this.inModule||45!==this.input.charCodeAt(this.pos+2)||45!==this.input.charCodeAt(this.pos+3)?(61===e&&(i=2),this.finishOp(x.relational,i)):(this.skipLineComment(4),this.skipSpace(),this.nextToken())},tB.readToken_eq_excl=function(t){var e=this.input.charCodeAt(this.pos+1);return 61===e?this.finishOp(x.equality,61===this.input.charCodeAt(this.pos+2)?3:2):61===t&&62===e&&this.options.ecmaVersion>=6?(this.pos+=2,this.finishToken(x.arrow)):this.finishOp(61===t?x.eq:x.prefix,1)},tB.readToken_question=function(){var t=this.options.ecmaVersion;if(t>=11){var e=this.input.charCodeAt(this.pos+1);if(46===e){var i=this.input.charCodeAt(this.pos+2);if(i<48||i>57)return this.finishOp(x.questionDot,2)}if(63===e)return t>=12&&61===this.input.charCodeAt(this.pos+2)?this.finishOp(x.assign,3):this.finishOp(x.coalesce,2)}return this.finishOp(x.question,1)},tB.readToken_numberSign=function(){var t=this.options.ecmaVersion,e=35;if(t>=13&&(++this.pos,p(e=this.fullCharCodeAtPos(),!0)||92===e))return this.finishToken(x.privateId,this.readWord1());this.raise(this.pos,"Unexpected character '"+L(e)+"'")},tB.getTokenFromCode=function(t){switch(t){case 46:return this.readToken_dot();case 40:return++this.pos,this.finishToken(x.parenL);case 41:return++this.pos,this.finishToken(x.parenR);case 59:return++this.pos,this.finishToken(x.semi);case 44:return++this.pos,this.finishToken(x.comma);case 91:return++this.pos,this.finishToken(x.bracketL);case 93:return++this.pos,this.finishToken(x.bracketR);case 123:return++this.pos,this.finishToken(x.braceL);case 125:return++this.pos,this.finishToken(x.braceR);case 58:return++this.pos,this.finishToken(x.colon);case 96:if(this.options.ecmaVersion<6)break;return++this.pos,this.finishToken(x.backQuote);case 48:var e=this.input.charCodeAt(this.pos+1);if(120===e||88===e)return this.readRadixNumber(16);if(this.options.ecmaVersion>=6){if(111===e||79===e)return this.readRadixNumber(8);if(98===e||66===e)return this.readRadixNumber(2)}case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return this.readNumber(!1);case 34:case 39:return this.readString(t);case 47:return this.readToken_slash();case 37:case 42:return this.readToken_mult_modulo_exp(t);case 124:case 38:return this.readToken_pipe_amp(t);case 94:return this.readToken_caret();case 43:case 45:return this.readToken_plus_min(t);case 60:case 62:return this.readToken_lt_gt(t);case 61:case 33:return this.readToken_eq_excl(t);case 63:return this.readToken_question();case 126:return this.finishOp(x.prefix,1);case 35:return this.readToken_numberSign()}this.raise(this.pos,"Unexpected character '"+L(t)+"'")},tB.finishOp=function(t,e){var i=this.input.slice(this.pos,this.pos+e);return this.pos+=e,this.finishToken(t,i)},tB.readRegexp=function(){for(var t,e,i=this.pos;;){this.pos>=this.input.length&&this.raise(i,"Unterminated regular expression");var n=this.input.charAt(this.pos);if(w.test(n)&&this.raise(i,"Unterminated regular expression"),t)t=!1;else{if("["===n)e=!0;else if("]"===n&&e)e=!1;else if("/"===n&&!e)break;t="\\"===n}++this.pos}var r=this.input.slice(i,this.pos);++this.pos;var s=this.pos,a=this.readWord1();this.containsEsc&&this.unexpected(s);var o=this.regexpState||(this.regexpState=new tE(this));o.reset(i,r,a),this.validateRegExpFlags(o),this.validateRegExpPattern(o);var h=null;try{h=new RegExp(r,a)}catch(t){}return this.finishToken(x.regexp,{pattern:r,flags:a,value:h})},tB.readInt=function(t,e,i){for(var n=this.options.ecmaVersion>=12&&void 0===e,r=i&&48===this.input.charCodeAt(this.pos),s=this.pos,a=0,o=0,h=0,l=null==e?1/0:e;h=97?u-97+10:u>=65?u-65+10:u>=48&&u<=57?u-48:1/0)>=t)break;o=u,a=a*t+c}return(n&&95===o&&this.raiseRecoverable(this.pos-1,"Numeric separator is not allowed at the last of digits"),this.pos===s||null!=e&&this.pos-s!==e)?null:a},tB.readRadixNumber=function(t){var e=this.pos;this.pos+=2;var i=this.readInt(t);return null==i&&this.raise(this.start+2,"Expected number in radix "+t),this.options.ecmaVersion>=11&&110===this.input.charCodeAt(this.pos)?(i=tD(this.input.slice(e,this.pos)),++this.pos):p(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number"),this.finishToken(x.num,i)},tB.readNumber=function(t){var e,i=this.pos;t||null!==this.readInt(10,void 0,!0)||this.raise(i,"Invalid number");var n=this.pos-i>=2&&48===this.input.charCodeAt(i);n&&this.strict&&this.raise(i,"Invalid number");var r=this.input.charCodeAt(this.pos);if(!n&&!t&&this.options.ecmaVersion>=11&&110===r){var s=tD(this.input.slice(i,this.pos));return++this.pos,p(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number"),this.finishToken(x.num,s)}n&&/[89]/.test(this.input.slice(i,this.pos))&&(n=!1),46!==r||n||(++this.pos,this.readInt(10),r=this.input.charCodeAt(this.pos)),69!==r&&101!==r||n||((43===(r=this.input.charCodeAt(++this.pos))||45===r)&&++this.pos,null===this.readInt(10)&&this.raise(i,"Invalid number")),p(this.fullCharCodeAtPos())&&this.raise(this.pos,"Identifier directly after number");var a=(e=this.input.slice(i,this.pos),n?parseInt(e,8):parseFloat(e.replace(/_/g,"")));return this.finishToken(x.num,a)},tB.readCodePoint=function(){var t;if(123===this.input.charCodeAt(this.pos)){this.options.ecmaVersion<6&&this.unexpected();var e=++this.pos;t=this.readHexChar(this.input.indexOf("}",this.pos)-this.pos),++this.pos,t>1114111&&this.invalidStringToken(e,"Code point out of bounds")}else t=this.readHexChar(4);return t},tB.readString=function(t){for(var e="",i=++this.pos;;){this.pos>=this.input.length&&this.raise(this.start,"Unterminated string constant");var n=this.input.charCodeAt(this.pos);if(n===t)break;92===n?(e+=this.input.slice(i,this.pos)+this.readEscapedChar(!1),i=this.pos):8232===n||8233===n?(this.options.ecmaVersion<10&&this.raise(this.start,"Unterminated string constant"),++this.pos,this.options.locations&&(this.curLine++,this.lineStart=this.pos)):(C(n)&&this.raise(this.start,"Unterminated string constant"),++this.pos)}return e+=this.input.slice(i,this.pos++),this.finishToken(x.string,e)};var tF={};tB.tryReadTemplateToken=function(){this.inTemplateElement=!0;try{this.readTmplToken()}catch(t){if(t===tF)this.readInvalidTemplateToken();else throw t}this.inTemplateElement=!1},tB.invalidStringToken=function(t,e){if(this.inTemplateElement&&this.options.ecmaVersion>=9)throw tF;this.raise(t,e)},tB.readTmplToken=function(){for(var t="",e=this.pos;;){this.pos>=this.input.length&&this.raise(this.start,"Unterminated template");var i=this.input.charCodeAt(this.pos);if(96===i||36===i&&123===this.input.charCodeAt(this.pos+1)){if(this.pos===this.start&&(this.type===x.template||this.type===x.invalidTemplate)){if(36===i)return this.pos+=2,this.finishToken(x.dollarBraceL);return++this.pos,this.finishToken(x.backQuote)}return t+=this.input.slice(e,this.pos),this.finishToken(x.template,t)}if(92===i)t+=this.input.slice(e,this.pos)+this.readEscapedChar(!0),e=this.pos;else if(C(i)){switch(t+=this.input.slice(e,this.pos),++this.pos,i){case 13:10===this.input.charCodeAt(this.pos)&&++this.pos;case 10:t+="\n";break;default:t+=String.fromCharCode(i)}this.options.locations&&(++this.curLine,this.lineStart=this.pos),e=this.pos}else++this.pos}},tB.readInvalidTemplateToken=function(){for(;this.pos=48&&e<=55){var n=this.input.substr(this.pos-1,3).match(/^[0-7]+/)[0],r=parseInt(n,8);return r>255&&(r=parseInt(n=n.slice(0,-1),8)),this.pos+=n.length-1,e=this.input.charCodeAt(this.pos),("0"!==n||56===e||57===e)&&(this.strict||t)&&this.invalidStringToken(this.pos-1-n.length,t?"Octal literal in template string":"Octal literal in strict mode"),String.fromCharCode(r)}if(C(e))return"";return String.fromCharCode(e)}},tB.readHexChar=function(t){var e=this.pos,i=this.readInt(16,t);return null===i&&this.invalidStringToken(e,"Bad character escape sequence"),i},tB.readWord1=function(){this.containsEsc=!1;for(var t="",e=!0,i=this.pos,n=this.options.ecmaVersion>=6;this.post.map(t=>"x"===t?{type:"Tile"}:null))},solution:[{amount:100,type:"Connections"}]}}),c("4QHZj",function(t,e){t.exports=JSON.parse('{"layout":{"tiles":[[{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"},{"items":[{"openings":[null,null,null,{"color":["red","blue"],"type":"Beam"},null,null],"type":"Terminus"}],"modifiers":[{"type":"Rotate"}],"type":"Tile"},{"items":[{"openings":[null,null,null,null,{"color":"green","type":"Beam"},null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"}],[{"items":[{"openings":[{"color":"red","type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Rotate"},{"type":"Toggle"}],"type":"Tile"},{"items":[{"openings":[{"color":"blue","type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"modifiers":[{"type":"Lock"},{"type":"Toggle"}],"type":"Tile"},{"items":[{"direction":0,"type":"Portal"}],"modifiers":[{"type":"Immutable"}],"type":"Tile"}]]},"solution":[{"amount":1,"type":"Connections"}]}')}),c("7Uxjd",function(t,e){t.exports=JSON.parse('{"layout":{"tiles":[[{"items":[{"color":"red","openings":[null,null,null,{"on":true,"type":"Beam"},null,null],"type":"Terminus"}],"type":"Tile"}],[{"items":[{"type":"Reflector"}],"modifiers":[{"type":"Rotate"}],"type":"Tile"}],[{"items":[{"color":"green","openings":[null,{"on":true,"type":"Beam"},null,null,null,null],"type":"Terminus"}],"type":"Tile"},{"items":[{"color":"blue","openings":[{"on":true,"type":"Beam"},null,null,null,null,null],"type":"Terminus"}],"type":"Tile"}]]},"solution":[{"amount":999,"type":"Connections"}]}')});const d=document.getElementById("feedback-container"),p=document.getElementById("dialog"),f=document.getElementById("help");document.getElementById("info").addEventListener("click",()=>{p.open||p.showModal()}),document.getElementById("feedback").addEventListener("click",()=>{f.setAttribute("open","true"),d.scrollIntoView(!0)});var g=class{constructor(t){this.selfOptions=t||{},this.pipes={}}options(t){return t&&(this.selfOptions=t),this.selfOptions}pipe(t,e){let i=e;if("string"==typeof t){if(void 0===i)return this.pipes[t];this.pipes[t]=i}if(t&&t.name){if((i=t).processor===this)return i;this.pipes[i.name]=i}return i.processor=this,i}process(t,e){let i,n=t;n.options=this.options();let r=e||t.pipe||"default";for(;r;)void 0!==n.nextAfterChildren&&(n.next=n.nextAfterChildren,n.nextAfterChildren=null),"string"==typeof r&&(r=this.pipe(r)),r.process(n),i=r,r=null,n&&n.next&&(r=(n=n.next).pipe||i);return n.hasResult?n.result:void 0}},m=class{constructor(t){this.name=t,this.filters=[]}process(t){if(!this.processor)throw Error("add this pipe to a processor before using it");let e=this.debug,i=this.filters.length;for(let n=0;nt.filterName)}after(t,...e){let i=this.indexOf(t);return this.filters.splice(i+1,0,...e),this}before(t,...e){let i=this.indexOf(t);return this.filters.splice(i,0,...e),this}replace(t,...e){let i=this.indexOf(t);return this.filters.splice(i,1,...e),this}remove(t){let e=this.indexOf(t);return this.filters.splice(e,1),this}clear(){return this.filters.length=0,this}shouldHaveResult(t){if(!1===t){this.resultCheck=null;return}if(!this.resultCheck)return this.resultCheck=t=>{if(!t.hasResult){console.log(t);let e=Error(`${this.name} failed`);throw e.noResult=!0,e}},this}};class _{setResult(t){return this.result=t,this.hasResult=!0,this}exit(){return this.exiting=!0,this}push(t,e){return t.parent=this,void 0!==e&&(t.childName=e),t.root=this.root||this,t.options=t.options||this.options,this.children?(this.children[this.children.length-1].next=t,this.children.push(t)):(this.children=[t],this.nextAfterChildren=this.next||null,this.next=t),t.next=this,this}}function v(t){if("object"!=typeof t)return t;if(null===t)return null;if(Array.isArray(t))return t.map(v);if(t instanceof Date)return new Date(t.getTime());if(t instanceof RegExp)return function(t){let e=/^\/(.*)\/([gimyu]*)$/.exec(t.toString());return new RegExp(e[1],e[2])}(t);let e={};for(let i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=v(t[i]));return e}var y=class extends _{constructor(t,e){super(),this.left=t,this.right=e,this.pipe="diff"}setResult(t){if(this.options.cloneDiffValues&&"object"==typeof t){let e="function"==typeof this.options.cloneDiffValues?this.options.cloneDiffValues:v;"object"==typeof t[0]&&(t[0]=e(t[0])),"object"==typeof t[1]&&(t[1]=e(t[1]))}return super.setResult(t)}},b=class extends _{constructor(t,e){super(),this.left=t,this.delta=e,this.pipe="patch"}},x=class extends _{constructor(t){super(),this.delta=t,this.pipe="reverse"}};const w=function(t){if(t.left===t.right){t.setResult(void 0).exit();return}if(void 0===t.left){if("function"==typeof t.right)throw Error("functions are not supported");t.setResult([t.right]).exit();return}if(void 0===t.right){t.setResult([t.left,0,0]).exit();return}if("function"==typeof t.left||"function"==typeof t.right)throw Error("functions are not supported");if(t.leftType=null===t.left?"null":typeof t.left,t.rightType=null===t.right?"null":typeof t.right,t.leftType!==t.rightType||"boolean"===t.leftType||"number"===t.leftType||("object"===t.leftType&&(t.leftIsArray=Array.isArray(t.left)),"object"===t.rightType&&(t.rightIsArray=Array.isArray(t.right)),t.leftIsArray!==t.rightIsArray)){t.setResult([t.left,t.right]).exit();return}t.left instanceof RegExp&&(t.right instanceof RegExp?t.setResult([t.left.toString(),t.right.toString()]).exit():t.setResult([t.left,t.right]).exit())};w.filterName="trivial";const k=function(t){if(void 0===t.delta){t.setResult(t.left).exit();return}if(t.nested=!Array.isArray(t.delta),t.nested)return;let e=t.delta;if(1===e.length){t.setResult(e[0]).exit();return}if(2===e.length){if(t.left instanceof RegExp){let i=/^\/(.*)\/([gimyu]+)$/.exec(e[1]);if(i){t.setResult(new RegExp(i[1],i[2])).exit();return}}t.setResult(e[1]).exit();return}3===e.length&&0===e[2]&&t.setResult(void 0).exit()};k.filterName="trivial";const C=function(t){if(void 0===t.delta){t.setResult(t.delta).exit();return}if(t.nested=!Array.isArray(t.delta),t.nested)return;let e=t.delta;if(1===e.length){t.setResult([e[0],0,0]).exit();return}if(2===e.length){t.setResult([e[1],e[0]]).exit();return}3===e.length&&0===e[2]&&t.setResult([e[0]]).exit()};C.filterName="trivial";const S=t=>{let e;if(!t||!t.children)return;let i=t.children.length,n=t.result;for(let r=0;r{let e,i;if(t.leftIsArray||"object"!==t.leftType)return;let n=t.left,r=t.right,s=t.options.propertyFilter;for(e in n)Object.prototype.hasOwnProperty.call(n,e)&&(!s||s(e,t))&&(i=new y(n[e],r[e]),t.push(i,e));for(e in r)Object.prototype.hasOwnProperty.call(r,e)&&(!s||s(e,t))&&void 0===n[e]&&(i=new y(void 0,r[e]),t.push(i,e));if(!t.children||0===t.children.length){t.setResult(void 0).exit();return}t.exit()};I.filterName="objects";const T=function(t){let e,i;if(!t.nested)return;let n=t.delta;if(!n._t){for(e in n)i=new b(t.left[e],n[e]),t.push(i,e);t.exit()}};T.filterName="objects";const E=function(t){let e;if(!t||!t.children||t.delta._t)return;let i=t.left,n=t.children.length;for(let r=0;r{let e;if(!t||!t.children||t.delta._t)return;let i=t.children.length,n={};for(let r=0;rt[r-1][s]?--s:--r;return a};var L={get:function(t,e,i,n){let r=n||{};return N(O(t,e,i||M,r),t,e,r)}};function z(t,e,i,n,r){let s=t[i],a=e[n];if(s===a)return!0;if("object"!=typeof s||"object"!=typeof a)return!1;let o=r.objectHash;if(!o)return r.matchByPosition&&i===n;r.hashCache1=r.hashCache1||[];let h=r.hashCache1[i];if(void 0===h&&(r.hashCache1[i]=h=o(s,i)),void 0===h)return!1;r.hashCache2=r.hashCache2||[];let l=r.hashCache2[n];return void 0===l&&(r.hashCache2[n]=l=o(a,n)),void 0!==l&&h===l}const R=function(t){let e,i,n,r,s;if(!t.leftIsArray)return;let a={objectHash:t.options&&t.options.objectHash,matchByPosition:t.options&&t.options.matchByPosition},o=0,h=0,l=t.left,u=t.right,c=l.length,d=u.length;for(c>0&&d>0&&!a.objectHash&&"boolean"!=typeof a.matchByPosition&&(a.matchByPosition=!function(t,e,i,n){for(let r=0;rg.indices1.indexOf(e-o)&&(s[`_${e}`]=[l[e],0,0],m.push(e));let _=!0;t.options&&t.options.arrays&&!1===t.options.arrays.detectMove&&(_=!1);let v=!1;t.options&&t.options.arrays&&t.options.arrays.includeValueOnMove&&(v=!0);let b=m.length;for(e=o;e0){for(let c=0;ct-e,numericallyBy:t=>(e,i)=>e[t]-i[t]},D=function(t){let e,i,n;if(!t.nested)return;let r=t.delta;if("a"!==r._t)return;let s=t.left,a=[],o=[],h=[];for(e in r)if("_t"!==e){if("_"===e[0]){let t=e;if(0===r[t][2]||3===r[t][2])a.push(parseInt(e.slice(1),10));else throw Error(`only removal or move can be applied at original array indices, invalid diff type: ${r[t][2]}`)}else{let t=e;1===r[t].length?o.push({index:parseInt(t,10),value:r[t][0]}):h.push({index:parseInt(t,10),delta:r[t]})}}for(e=(a=a.sort(B.numerically)).length-1;e>=0;e--){i=a[e];let t=r[`_${i}`],n=s.splice(i,1)[0];3===t[2]&&o.push({index:t[1],value:n})}let l=(o=o.sort(B.numericallyBy("index"))).length;for(e=0;e0)for(e=0;e{if("string"==typeof e&&"_"===e[0])return parseInt(e.substring(1),10);if(Array.isArray(i)&&0===i[2])return`_${e}`;let n=+e;for(let i in t){let r=t[i];if(Array.isArray(r)){if(3===r[2]){let t=parseInt(i.substring(1),10),s=r[1];if(s===+e)return t;t<=n&&s>n?n++:t>=n&&s{let e;if(!t||!t.children)return;let i=t.delta;if("a"!==i._t)return;let n=t.children.length,r={_t:"a"};for(let s=0;s=0;)t[e]=0}const Q=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),X=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),tt=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),te=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ti=Array(576);Y(ti);const tn=Array(60);Y(tn);const tr=Array(512);Y(tr);const ts=Array(256);Y(ts);const ta=Array(29);Y(ta);const to=Array(30);function th(t,e,i,n,r){this.static_tree=t,this.extra_bits=e,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=t&&t.length}function tl(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}Y(to);const tu=t=>t<256?tr[t]:tr[256+(t>>>7)],tc=(t,e)=>{t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255},td=(t,e,i)=>{t.bi_valid>16-i?(t.bi_buf|=e<>16-t.bi_valid,t.bi_valid+=i-16):(t.bi_buf|=e<{td(t,i[2*e],i[2*e+1])},tf=(t,e)=>{let i=0;do i|=1&t,t>>>=1,i<<=1;while(--e>0)return i>>>1},tg=t=>{16===t.bi_valid?(tc(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)},tm=(t,e)=>{let i,n,r,s,a,o;let h=e.dyn_tree,l=e.max_code,u=e.stat_desc.static_tree,c=e.stat_desc.has_stree,d=e.stat_desc.extra_bits,p=e.stat_desc.extra_base,f=e.stat_desc.max_length,g=0;for(s=0;s<=15;s++)t.bl_count[s]=0;for(h[2*t.heap[t.heap_max]+1]=0,i=t.heap_max+1;i<573;i++)(s=h[2*h[2*(n=t.heap[i])+1]+1]+1)>f&&(s=f,g++),h[2*n+1]=s,!(n>l)&&(t.bl_count[s]++,a=0,n>=p&&(a=d[n-p]),o=h[2*n],t.opt_len+=o*(s+a),c&&(t.static_len+=o*(u[2*n+1]+a)));if(0!==g){do{for(s=f-1;0===t.bl_count[s];)s--;t.bl_count[s]--,t.bl_count[s+1]+=2,t.bl_count[f]--,g-=2}while(g>0)for(s=f;0!==s;s--)for(n=t.bl_count[s];0!==n;)!((r=t.heap[--i])>l)&&(h[2*r+1]!==s&&(t.opt_len+=(s-h[2*r+1])*h[2*r],h[2*r+1]=s),n--)}},t_=(t,e,i)=>{let n,r;let s=Array(16),a=0;for(n=1;n<=15;n++)a=a+i[n-1]<<1,s[n]=a;for(r=0;r<=e;r++){let e=t[2*r+1];0!==e&&(t[2*r]=tf(s[e]++,e))}},tv=()=>{let n,r,s,a,o;let h=Array(16);for(a=0,s=0;a<28;a++)for(n=0,ta[a]=s;n<1<>=7;a<30;a++)for(n=0,to[a]=o<<7;n<1<{let e;for(e=0;e<286;e++)t.dyn_ltree[2*e]=0;for(e=0;e<30;e++)t.dyn_dtree[2*e]=0;for(e=0;e<19;e++)t.bl_tree[2*e]=0;t.dyn_ltree[512]=1,t.opt_len=t.static_len=0,t.sym_next=t.matches=0},tb=t=>{t.bi_valid>8?tc(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0},tx=(t,e,i,n)=>{let r=2*e,s=2*i;return t[r]{let n=t.heap[i],r=i<<1;for(;r<=t.heap_len&&(r{let n,r,s,a;let o=0;if(0!==t.sym_next)do n=(255&t.pending_buf[t.sym_buf+o++])+((255&t.pending_buf[t.sym_buf+o++])<<8),r=t.pending_buf[t.sym_buf+o++],0===n?tp(t,r,e):(tp(t,(s=ts[r])+256+1,e),0!==(a=Q[s])&&td(t,r-=ta[s],a),tp(t,s=tu(--n),i),0!==(a=X[s])&&td(t,n-=to[s],a));while(o{let i,n,r;let s=e.dyn_tree,a=e.stat_desc.static_tree,o=e.stat_desc.has_stree,h=e.stat_desc.elems,l=-1;for(i=0,t.heap_len=0,t.heap_max=573;i>1;i>=1;i--)tw(t,s,i);r=h;do i=t.heap[1],t.heap[1]=t.heap[t.heap_len--],tw(t,s,1),n=t.heap[1],t.heap[--t.heap_max]=i,t.heap[--t.heap_max]=n,s[2*r]=s[2*i]+s[2*n],t.depth[r]=(t.depth[i]>=t.depth[n]?t.depth[i]:t.depth[n])+1,s[2*i+1]=s[2*n+1]=r,t.heap[1]=r++,tw(t,s,1);while(t.heap_len>=2)t.heap[--t.heap_max]=t.heap[1],tm(t,e),t_(s,l,t.bl_count)},tS=(t,e,i)=>{let n,r;let s=-1,a=e[1],o=0,h=7,l=4;for(0===a&&(h=138,l=3),e[(i+1)*2+1]=65535,n=0;n<=i;n++)r=a,a=e[(n+1)*2+1],++o{let n,r;let s=-1,a=e[1],o=0,h=7,l=4;for(0===a&&(h=138,l=3),n=0;n<=i;n++)if(r=a,a=e[(n+1)*2+1],!(++o{let e;for(tS(t,t.dyn_ltree,t.l_desc.max_code),tS(t,t.dyn_dtree,t.d_desc.max_code),tC(t,t.bl_desc),e=18;e>=3&&0===t.bl_tree[2*te[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e},tE=(t,e,i,n)=>{let r;for(td(t,e-257,5),td(t,i-1,5),td(t,n-4,4),r=0;r{let e,i=4093624447;for(e=0;e<=31;e++,i>>>=1)if(1&i&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e<256;e++)if(0!==t.dyn_ltree[2*e])return 1;return 0};let tP=!1;const tM=(t,e,i,n)=>{td(t,0+(n?1:0),3),tb(t),tc(t,i),tc(t,~i),i&&t.pending_buf.set(t.window.subarray(e,e+i),t.pending),t.pending+=i};var tO={_tr_init:n=>{tP||(tv(),tP=!0),n.l_desc=new tl(n.dyn_ltree,t),n.d_desc=new tl(n.dyn_dtree,e),n.bl_desc=new tl(n.bl_tree,i),n.bi_buf=0,n.bi_valid=0,ty(n)},_tr_stored_block:tM,_tr_flush_block:(t,e,i,n)=>{let r,s;let a=0;t.level>0?(2===t.strm.data_type&&(t.strm.data_type=tA(t)),tC(t,t.l_desc),tC(t,t.d_desc),a=tT(t),r=t.opt_len+3+7>>>3,(s=t.static_len+3+7>>>3)<=r&&(r=s)):r=s=i+5,i+4<=r&&-1!==e?tM(t,e,i,n):4===t.strategy||s===r?(td(t,2+(n?1:0),3),tk(t,ti,tn)):(td(t,4+(n?1:0),3),tE(t,t.l_desc.max_code+1,t.d_desc.max_code+1,a+1),tk(t,t.dyn_ltree,t.dyn_dtree)),ty(t),n&&tb(t)},_tr_tally:(t,e,i)=>(t.pending_buf[t.sym_buf+t.sym_next++]=e,t.pending_buf[t.sym_buf+t.sym_next++]=e>>8,t.pending_buf[t.sym_buf+t.sym_next++]=i,0===e?t.dyn_ltree[2*i]++:(t.matches++,e--,t.dyn_ltree[(ts[i]+256+1)*2]++,t.dyn_dtree[2*tu(e)]++),t.sym_next===t.sym_end),_tr_align:t=>{td(t,2,3),tp(t,256,ti),tg(t)}},tN=(t,e,i,n)=>{let r=65535&t|0,s=t>>>16&65535|0,a=0;for(;0!==i;){a=i>2e3?2e3:i,i-=a;do s=s+(r=r+e[n++]|0)|0;while(--a)r%=65521,s%=65521}return r|s<<16|0};const tL=new Uint32Array((()=>{let t,e=[];for(var i=0;i<256;i++){t=i;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e})());var tz=(t,e,i,n)=>{let r=n+i;t^=-1;for(let i=n;i>>8^tL[(t^e[i])&255];return -1^t},tR={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},tB={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{_tr_init:tD,_tr_stored_block:tF,_tr_flush_block:tV,_tr_tally:tj,_tr_align:tU}=tO,{Z_NO_FLUSH:tq,Z_PARTIAL_FLUSH:tZ,Z_FULL_FLUSH:tH,Z_FINISH:tG,Z_BLOCK:tW,Z_OK:tK,Z_STREAM_END:t$,Z_STREAM_ERROR:tJ,Z_DATA_ERROR:tY,Z_BUF_ERROR:tQ,Z_DEFAULT_COMPRESSION:tX,Z_FILTERED:t0,Z_HUFFMAN_ONLY:t1,Z_RLE:t2,Z_FIXED:t5,Z_DEFAULT_STRATEGY:t3,Z_UNKNOWN:t6,Z_DEFLATED:t4}=tB,t9=(t,e)=>(t.msg=tR[e],e),t8=t=>2*t-(t>4?9:0),t7=t=>{let e=t.length;for(;--e>=0;)t[e]=0},et=t=>{let e,i,n;let r=t.w_size;n=e=t.hash_size;do i=t.head[--n],t.head[n]=i>=r?i-r:0;while(--e)n=e=r;do i=t.prev[--n],t.prev[n]=i>=r?i-r:0;while(--e)};let ee=(t,e,i)=>(e<{let e=t.state,i=e.pending;i>t.avail_out&&(i=t.avail_out),0!==i&&(t.output.set(e.pending_buf.subarray(e.pending_out,e.pending_out+i),t.next_out),t.next_out+=i,e.pending_out+=i,t.total_out+=i,t.avail_out-=i,e.pending-=i,0===e.pending&&(e.pending_out=0))},en=(t,e)=>{tV(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,ei(t.strm)},er=(t,e)=>{t.pending_buf[t.pending++]=e},es=(t,e)=>{t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e},ea=(t,e,i,n)=>{let r=t.avail_in;return(r>n&&(r=n),0===r)?0:(t.avail_in-=r,e.set(t.input.subarray(t.next_in,t.next_in+r),i),1===t.state.wrap?t.adler=tN(t.adler,e,r,i):2===t.state.wrap&&(t.adler=tz(t.adler,e,r,i)),t.next_in+=r,t.total_in+=r,r)},eo=(t,e)=>{let i,n,r=t.max_chain_length,s=t.strstart,a=t.prev_length,o=t.nice_match,h=t.strstart>t.w_size-262?t.strstart-(t.w_size-262):0,l=t.window,u=t.w_mask,c=t.prev,d=t.strstart+258,p=l[s+a-1],f=l[s+a];t.prev_length>=t.good_match&&(r>>=2),o>t.lookahead&&(o=t.lookahead);do{if(l[(i=e)+a]!==f||l[i+a-1]!==p||l[i]!==l[s]||l[++i]!==l[s+1])continue;s+=2,i++;do;while(l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&l[++s]===l[++i]&&sa){if(t.match_start=e,a=n,n>=o)break;p=l[s+a-1],f=l[s+a]}}while((e=c[e&u])>h&&0!=--r)return a<=t.lookahead?a:t.lookahead},eh=t=>{let e,i,n;let r=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=r+(r-262)&&(t.window.set(t.window.subarray(r,r+r-i),0),t.match_start-=r,t.strstart-=r,t.block_start-=r,t.insert>t.strstart&&(t.insert=t.strstart),et(t),i+=r),0===t.strm.avail_in)break;if(e=ea(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=e,t.lookahead+t.insert>=3)for(n=t.strstart-t.insert,t.ins_h=t.window[n],t.ins_h=ee(t,t.ins_h,t.window[n+1]);t.insert&&(t.ins_h=ee(t,t.ins_h,t.window[n+3-1]),t.prev[n&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=n,n++,t.insert--,!(t.lookahead+t.insert<3)););}while(t.lookahead<262&&0!==t.strm.avail_in)},el=(t,e)=>{let i=t.pending_buf_size-5>t.w_size?t.w_size:t.pending_buf_size-5,n,r,s,a=0,o=t.strm.avail_in;do{if(n=65535,s=t.bi_valid+42>>3,t.strm.avail_out(r=t.strstart-t.block_start)+t.strm.avail_in&&(n=r+t.strm.avail_in),n>s&&(n=s),n>8,t.pending_buf[t.pending-2]=~n,t.pending_buf[t.pending-1]=~n>>8,ei(t.strm),r&&(r>n&&(r=n),t.strm.output.set(t.window.subarray(t.block_start,t.block_start+r),t.strm.next_out),t.strm.next_out+=r,t.strm.avail_out-=r,t.strm.total_out+=r,t.block_start+=r,n-=r),n&&(ea(t.strm,t.strm.output,t.strm.next_out,n),t.strm.next_out+=n,t.strm.avail_out-=n,t.strm.total_out+=n)}while(0===a)return((o-=t.strm.avail_in)&&(o>=t.w_size?(t.matches=2,t.window.set(t.strm.input.subarray(t.strm.next_in-t.w_size,t.strm.next_in),0),t.strstart=t.w_size,t.insert=t.strstart):(t.window_size-t.strstart<=o&&(t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,t.insert>t.strstart&&(t.insert=t.strstart)),t.window.set(t.strm.input.subarray(t.strm.next_in-o,t.strm.next_in),t.strstart),t.strstart+=o,t.insert+=o>t.w_size-t.insert?t.w_size-t.insert:o),t.block_start=t.strstart),t.high_waters&&t.block_start>=t.w_size&&(t.block_start-=t.w_size,t.strstart-=t.w_size,t.window.set(t.window.subarray(t.w_size,t.w_size+t.strstart),0),t.matches<2&&t.matches++,s+=t.w_size,t.insert>t.strstart&&(t.insert=t.strstart)),s>t.strm.avail_in&&(s=t.strm.avail_in),s&&(ea(t.strm,t.window,t.strstart,s),t.strstart+=s,t.insert+=s>t.w_size-t.insert?t.w_size-t.insert:s),t.high_water>3,i=(s=t.pending_buf_size-s>65535?65535:t.pending_buf_size-s)>t.w_size?t.w_size:s,((r=t.strstart-t.block_start)>=i||(r||e===tG)&&e!==tq&&0===t.strm.avail_in&&r<=s)&&(n=r>s?s:r,a=e===tG&&0===t.strm.avail_in&&n===r?1:0,tF(t,t.block_start,n,a),t.block_start+=n,ei(t.strm)),a?3:1)},eu=(t,e)=>{let i,n;for(;;){if(t.lookahead<262){if(eh(t),t.lookahead<262&&e===tq)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==i&&t.strstart-i<=t.w_size-262&&(t.match_length=eo(t,i)),t.match_length>=3){if(n=tj(t,t.strstart-t.match_start,t.match_length-3),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=3){t.match_length--;do t.strstart++,t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(0!=--t.match_length)t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=ee(t,t.ins_h,t.window[t.strstart+1])}else n=tj(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(en(t,!1),0===t.strm.avail_out))return 1}return(t.insert=t.strstart<2?t.strstart:2,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2},ec=(t,e)=>{let i,n,r;for(;;){if(t.lookahead<262){if(eh(t),t.lookahead<262&&e===tq)return 1;if(0===t.lookahead)break}if(i=0,t.lookahead>=3&&(t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=2,0!==i&&t.prev_length4096)&&(t.match_length=2)),t.prev_length>=3&&t.match_length<=t.prev_length){r=t.strstart+t.lookahead-3,n=tj(t,t.strstart-1-t.prev_match,t.prev_length-3),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=r&&(t.ins_h=ee(t,t.ins_h,t.window[t.strstart+3-1]),i=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(0!=--t.prev_length)if(t.match_available=0,t.match_length=2,t.strstart++,n&&(en(t,!1),0===t.strm.avail_out))return 1}else if(t.match_available){if((n=tj(t,0,t.window[t.strstart-1]))&&en(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return 1}else t.match_available=1,t.strstart++,t.lookahead--}return(t.match_available&&(n=tj(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<2?t.strstart:2,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2},ed=(t,e)=>{let i,n,r,s;let a=t.window;for(;;){if(t.lookahead<=258){if(eh(t),t.lookahead<=258&&e===tq)return 1;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=3&&t.strstart>0&&(n=a[r=t.strstart-1])===a[++r]&&n===a[++r]&&n===a[++r]){s=t.strstart+258;do;while(n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&n===a[++r]&&rt.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=3?(i=tj(t,1,t.match_length-3),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(i=tj(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),i&&(en(t,!1),0===t.strm.avail_out))return 1}return(t.insert=0,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2},ep=(t,e)=>{let i;for(;;){if(0===t.lookahead&&(eh(t),0===t.lookahead)){if(e===tq)return 1;break}if(t.match_length=0,i=tj(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,i&&(en(t,!1),0===t.strm.avail_out))return 1}return(t.insert=0,e===tG)?(en(t,!0),0===t.strm.avail_out)?3:4:t.sym_next&&(en(t,!1),0===t.strm.avail_out)?1:2};function ef(t,e,i,n,r){this.good_length=t,this.max_lazy=e,this.nice_length=i,this.max_chain=n,this.func=r}const eg=[new ef(0,0,0,0,el),new ef(4,4,8,4,eu),new ef(4,5,16,8,eu),new ef(4,6,32,32,eu),new ef(4,4,16,16,ec),new ef(8,16,32,32,ec),new ef(8,16,128,128,ec),new ef(8,32,128,256,ec),new ef(32,128,258,1024,ec),new ef(32,258,258,4096,ec)],em=t=>{t.window_size=2*t.w_size,t7(t.head),t.max_lazy_match=eg[t.level].max_lazy,t.good_match=eg[t.level].good_length,t.nice_match=eg[t.level].nice_length,t.max_chain_length=eg[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=2,t.match_available=0,t.ins_h=0};function e_(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=t4,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(1146),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),t7(this.dyn_ltree),t7(this.dyn_dtree),t7(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),t7(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),t7(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}const ev=t=>{if(!t)return 1;let e=t.state;return e&&e.strm===t&&(42===e.status||57===e.status||69===e.status||73===e.status||91===e.status||103===e.status||113===e.status||666===e.status)?0:1},ey=t=>{if(ev(t))return t9(t,tJ);t.total_in=t.total_out=0,t.data_type=t6;let e=t.state;return e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=2===e.wrap?57:e.wrap?42:113,t.adler=2===e.wrap?0:1,e.last_flush=-2,tD(e),tK},eb=t=>{let e=ey(t);return e===tK&&em(t.state),e},ex=(t,e,i,n,r,s)=>{if(!t)return tJ;let a=1;if(e===tX&&(e=6),n<0?(a=0,n=-n):n>15&&(a=2,n-=16),r<1||r>9||i!==t4||n<8||n>15||e<0||e>9||s<0||s>t5||8===n&&1!==a)return t9(t,tJ);8===n&&(n=9);let o=new e_;return t.state=o,o.strm=t,o.status=42,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<ex(t,e,t4,15,8,t3),deflateInit2:ex,deflateReset:eb,deflateResetKeep:ey,deflateSetHeader:(t,e)=>ev(t)||2!==t.state.wrap?tJ:(t.state.gzhead=e,tK),deflate:(t,e)=>{if(ev(t)||e>tW||e<0)return t?t9(t,tJ):tJ;let i=t.state;if(!t.output||0!==t.avail_in&&!t.input||666===i.status&&e!==tG)return t9(t,0===t.avail_out?tQ:tJ);let n=i.last_flush;if(i.last_flush=e,0!==i.pending){if(ei(t),0===t.avail_out)return i.last_flush=-1,tK}else if(0===t.avail_in&&t8(e)<=t8(n)&&e!==tG)return t9(t,tQ);if(666===i.status&&0!==t.avail_in)return t9(t,tQ);if(42===i.status&&0===i.wrap&&(i.status=113),42===i.status){let e=t4+(i.w_bits-8<<4)<<8;if(e|=(i.strategy>=t1||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(e|=32),es(i,e+=31-e%31),0!==i.strstart&&(es(i,t.adler>>>16),es(i,65535&t.adler)),t.adler=1,i.status=113,ei(t),0!==i.pending)return i.last_flush=-1,tK}if(57===i.status){if(t.adler=0,er(i,31),er(i,139),er(i,8),i.gzhead)er(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),er(i,255&i.gzhead.time),er(i,i.gzhead.time>>8&255),er(i,i.gzhead.time>>16&255),er(i,i.gzhead.time>>24&255),er(i,9===i.level?2:i.strategy>=t1||i.level<2?4:0),er(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(er(i,255&i.gzhead.extra.length),er(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=tz(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69;else if(er(i,0),er(i,0),er(i,0),er(i,0),er(i,0),er(i,9===i.level?2:i.strategy>=t1||i.level<2?4:0),er(i,3),i.status=113,ei(t),0!==i.pending)return i.last_flush=-1,tK}if(69===i.status){if(i.gzhead.extra){let e=i.pending,n=(65535&i.gzhead.extra.length)-i.gzindex;for(;i.pending+n>i.pending_buf_size;){let r=i.pending_buf_size-i.pending;if(i.pending_buf.set(i.gzhead.extra.subarray(i.gzindex,i.gzindex+r),i.pending),i.pending=i.pending_buf_size,i.gzhead.hcrc&&i.pending>e&&(t.adler=tz(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex+=r,ei(t),0!==i.pending)return i.last_flush=-1,tK;e=0,n-=r}let r=new Uint8Array(i.gzhead.extra);i.pending_buf.set(r.subarray(i.gzindex,i.gzindex+n),i.pending),i.pending+=n,i.gzhead.hcrc&&i.pending>e&&(t.adler=tz(t.adler,i.pending_buf,i.pending-e,e)),i.gzindex=0}i.status=73}if(73===i.status){if(i.gzhead.name){let e,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n)),ei(t),0!==i.pending)return i.last_flush=-1,tK;n=0}e=i.gzindexn&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n)),i.gzindex=0}i.status=91}if(91===i.status){if(i.gzhead.comment){let e,n=i.pending;do{if(i.pending===i.pending_buf_size){if(i.gzhead.hcrc&&i.pending>n&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n)),ei(t),0!==i.pending)return i.last_flush=-1,tK;n=0}e=i.gzindexn&&(t.adler=tz(t.adler,i.pending_buf,i.pending-n,n))}i.status=103}if(103===i.status){if(i.gzhead.hcrc){if(i.pending+2>i.pending_buf_size&&(ei(t),0!==i.pending))return i.last_flush=-1,tK;er(i,255&t.adler),er(i,t.adler>>8&255),t.adler=0}if(i.status=113,ei(t),0!==i.pending)return i.last_flush=-1,tK}if(0!==t.avail_in||0!==i.lookahead||e!==tq&&666!==i.status){let n=0===i.level?el(i,e):i.strategy===t1?ep(i,e):i.strategy===t2?ed(i,e):eg[i.level].func(i,e);if((3===n||4===n)&&(i.status=666),1===n||3===n)return 0===t.avail_out&&(i.last_flush=-1),tK;if(2===n&&(e===tZ?tU(i):e!==tW&&(tF(i,0,0,!1),e===tH&&(t7(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),ei(t),0===t.avail_out))return i.last_flush=-1,tK}return e!==tG?tK:i.wrap<=0?t$:(2===i.wrap?(er(i,255&t.adler),er(i,t.adler>>8&255),er(i,t.adler>>16&255),er(i,t.adler>>24&255),er(i,255&t.total_in),er(i,t.total_in>>8&255),er(i,t.total_in>>16&255),er(i,t.total_in>>24&255)):(es(i,t.adler>>>16),es(i,65535&t.adler)),ei(t),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?tK:t$)},deflateEnd:t=>{if(ev(t))return tJ;let e=t.state.status;return t.state=null,113===e?t9(t,tY):tK},deflateSetDictionary:(t,e)=>{let i=e.length;if(ev(t))return tJ;let n=t.state,r=n.wrap;if(2===r||1===r&&42!==n.status||n.lookahead)return tJ;if(1===r&&(t.adler=tN(t.adler,e,i,0)),n.wrap=0,i>=n.w_size){0===r&&(t7(n.head),n.strstart=0,n.block_start=0,n.insert=0);let t=new Uint8Array(n.w_size);t.set(e.subarray(i-n.w_size,i),0),e=t,i=n.w_size}let s=t.avail_in,a=t.next_in,o=t.input;for(t.avail_in=i,t.next_in=0,t.input=e,eh(n);n.lookahead>=3;){let t=n.strstart,e=n.lookahead-2;do n.ins_h=ee(n,n.ins_h,n.window[t+3-1]),n.prev[t&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=t,t++;while(--e)n.strstart=t,n.lookahead=2,eh(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=2,n.match_available=0,t.next_in=a,t.input=o,t.avail_in=s,n.wrap=r,tK},deflateInfo:"pako deflate (from Nodeca project)"};const ek=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var eC={assign:function(t){let e=Array.prototype.slice.call(arguments,1);for(;e.length;){let i=e.shift();if(i){if("object"!=typeof i)throw TypeError(i+"must be non-object");for(let e in i)ek(i,e)&&(t[e]=i[e])}}return t},flattenChunks:t=>{let e=0;for(let i=0,n=t.length;i=252?6:t>=248?5:t>=240?4:t>=224?3:t>=192?2:1;eI[254]=eI[254]=1;const eT=(t,e)=>{if(e<65534&&t.subarray&&eS)return String.fromCharCode.apply(null,t.length===e?t:t.subarray(0,e));let i="";for(let n=0;n{if("function"==typeof TextEncoder&&TextEncoder.prototype.encode)return new TextEncoder().encode(t);let e,i,n,r,s,a=t.length,o=0;for(r=0;r>>6:(i<65536?e[s++]=224|i>>>12:(e[s++]=240|i>>>18,e[s++]=128|i>>>12&63),e[s++]=128|i>>>6&63),e[s++]=128|63&i);return e},buf2string:(t,e)=>{let i,n;let r=e||t.length;if("function"==typeof TextDecoder&&TextDecoder.prototype.decode)return new TextDecoder().decode(t.subarray(0,e));let s=Array(2*r);for(n=0,i=0;i4){s[n++]=65533,i+=a-1;continue}for(e&=2===a?31:3===a?15:7;a>1&&i1){s[n++]=65533;continue}e<65536?s[n++]=e:(e-=65536,s[n++]=55296|e>>10&1023,s[n++]=56320|1023&e)}return eT(s,n)},utf8border:(t,e)=>{(e=e||t.length)>t.length&&(e=t.length);let i=e-1;for(;i>=0&&(192&t[i])==128;)i--;return i<0||0===i?e:i+eI[t[i]]>e?i:e}},eA=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0};const eP=Object.prototype.toString,{Z_NO_FLUSH:eM,Z_SYNC_FLUSH:eO,Z_FULL_FLUSH:eN,Z_FINISH:eL,Z_OK:ez,Z_STREAM_END:eR,Z_DEFAULT_COMPRESSION:eB,Z_DEFAULT_STRATEGY:eD,Z_DEFLATED:eF}=tB;function eV(t){this.options=eC.assign({level:eB,method:eF,chunkSize:16384,windowBits:15,memLevel:8,strategy:eD},t||{});let e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new eA,this.strm.avail_out=0;let i=ew.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(i!==ez)throw Error(tR[i]);if(e.header&&ew.deflateSetHeader(this.strm,e.header),e.dictionary){let t;if(t="string"==typeof e.dictionary?eE.string2buf(e.dictionary):"[object ArrayBuffer]"===eP.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,(i=ew.deflateSetDictionary(this.strm,t))!==ez)throw Error(tR[i]);this._dict_set=!0}}function ej(t,e){let i=new eV(e);if(i.push(t,!0),i.err)throw i.msg||tR[i.err];return i.result}eV.prototype.push=function(t,e){let i,n;let r=this.strm,s=this.options.chunkSize;if(this.ended)return!1;for(n=e===~~e?e:!0===e?eL:eM,"string"==typeof t?r.input=eE.string2buf(t):"[object ArrayBuffer]"===eP.call(t)?r.input=new Uint8Array(t):r.input=t,r.next_in=0,r.avail_in=r.input.length;;){if(0===r.avail_out&&(r.output=new Uint8Array(s),r.next_out=0,r.avail_out=s),(n===eO||n===eN)&&r.avail_out<=6){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if((i=ew.deflate(r,n))===eR)return r.next_out>0&&this.onData(r.output.subarray(0,r.next_out)),i=ew.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===ez;if(0===r.avail_out){this.onData(r.output);continue}if(n>0&&r.next_out>0){this.onData(r.output.subarray(0,r.next_out)),r.avail_out=0;continue}if(0===r.avail_in)break}return!0},eV.prototype.onData=function(t){this.chunks.push(t)},eV.prototype.onEnd=function(t){t===ez&&(this.result=eC.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};var eU=function(t,e){let i,n,r,s,a,o,h,l,u,c,d,p,f,g,m,_,v,y,b,x,w,k,C,S;let I=t.state;i=t.next_in,C=t.input,n=i+(t.avail_in-5),r=t.next_out,S=t.output,s=r-(e-t.avail_out),a=r+(t.avail_out-257),o=I.dmax,h=I.wsize,l=I.whave,u=I.wnext,c=I.window,d=I.hold,p=I.bits,f=I.lencode,g=I.distcode,m=(1<>>=y=v>>>24,p-=y,0==(y=v>>>16&255))S[r++]=65535&v;else if(16&y)for(b=65535&v,(y&=15)&&(p>>=y,p-=y),p<15&&(d+=C[i++]<>>=y=v>>>24,p-=y,16&(y=v>>>16&255)){if(x=65535&v,p<(y&=15)&&(d+=C[i++]<o){t.msg="invalid distance too far back",I.mode=16209;break i}if(d>>>=y,p-=y,x>(y=r-s)){if((y=x-y)>l&&I.sane){t.msg="invalid distance too far back",I.mode=16209;break i}if(w=0,k=c,0===u){if(w+=h-y,y2;)S[r++]=k[w++],S[r++]=k[w++],S[r++]=k[w++],b-=3;b&&(S[r++]=k[w++],b>1&&(S[r++]=k[w++]))}else{w=r-x;do S[r++]=S[w++],S[r++]=S[w++],S[r++]=S[w++],b-=3;while(b>2)b&&(S[r++]=S[w++],b>1&&(S[r++]=S[w++]))}}else if((64&y)==0){v=g[(65535&v)+(d&(1<>3,p-=b<<3,d&=(1<{let h,l,u,c,d,p,f,g,m;let _=o.bits,v=0,y=0,b=0,x=0,w=0,k=0,C=0,S=0,I=0,T=0,E=null,A=new Uint16Array(16),P=new Uint16Array(16),M=null;for(v=0;v<=15;v++)A[v]=0;for(y=0;y=1&&0===A[x];x--);if(w>x&&(w=x),0===x)return r[s++]=20971520,r[s++]=20971520,o.bits=1,0;for(b=1;b0&&(0===t||1!==x))return -1;for(v=1,P[1]=0;v<15;v++)P[v+1]=P[v]+A[v];for(y=0;y852||2===t&&I>592)return 1;for(;;){f=v-C,a[y]+1=p?(g=M[a[y]-p],m=E[a[y]-p]):(g=96,m=0),h=1<>C)+(l-=h)]=f<<24|g<<16|m|0;while(0!==l)for(h=1<>=1;if(0!==h?(T&=h-1,T+=h):T=0,y++,0==--A[v]){if(v===x)break;v=e[i+a[y]]}if(v>w&&(T&c)!==u){for(0===C&&(C=w),d+=b,S=1<<(k=v-C);k+C852||2===t&&I>592)return 1;r[u=T&c]=w<<24|k<<16|d-s|0}}return 0!==T&&(r[d+T]=v-C<<24|4194304),o.bits=w,0};const{Z_FINISH:eK,Z_BLOCK:e$,Z_TREES:eJ,Z_OK:eY,Z_STREAM_END:eQ,Z_NEED_DICT:eX,Z_STREAM_ERROR:e0,Z_DATA_ERROR:e1,Z_MEM_ERROR:e2,Z_BUF_ERROR:e5,Z_DEFLATED:e3}=tB,e6=t=>(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);function e4(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const e9=t=>{if(!t)return 1;let e=t.state;return!e||e.strm!==t||e.mode<16180||e.mode>16211?1:0},e8=t=>{if(e9(t))return e0;let e=t.state;return t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=16180,e.last=0,e.havedict=0,e.flags=-1,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new Int32Array(852),e.distcode=e.distdyn=new Int32Array(592),e.sane=1,e.back=-1,eY},e7=t=>{if(e9(t))return e0;let e=t.state;return e.wsize=0,e.whave=0,e.wnext=0,e8(t)},it=(t,e)=>{let i;if(e9(t))return e0;let n=t.state;return(e<0?(i=0,e=-e):(i=(e>>4)+5,e<48&&(e&=15)),e&&(e<8||e>15))?e0:(null!==n.window&&n.wbits!==e&&(n.window=null),n.wrap=i,n.wbits=e,e7(t))},ie=(t,e)=>{if(!t)return e0;let i=new e4;t.state=i,i.strm=t,i.window=null,i.mode=16180;let n=it(t,e);return n!==eY&&(t.state=null),n};let ii=!0;const ir=t=>{if(ii){n=new Int32Array(512),r=new Int32Array(32);let e=0;for(;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(eW(1,t.lens,0,288,n,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;eW(2,t.lens,0,32,r,0,t.work,{bits:5}),ii=!1}t.lencode=n,t.lenbits=9,t.distcode=r,t.distbits=5},is=(t,e,i,n)=>{let r;let s=t.state;return null===s.window&&(s.wsize=1<=s.wsize?(s.window.set(e.subarray(i-s.wsize,i),0),s.wnext=0,s.whave=s.wsize):((r=s.wsize-s.wnext)>n&&(r=n),s.window.set(e.subarray(i-n,i-n+r),s.wnext),(n-=r)?(s.window.set(e.subarray(i-n,i),0),s.wnext=n,s.whave=s.wsize):(s.wnext+=r,s.wnext===s.wsize&&(s.wnext=0),s.whaveie(t,15),inflateInit2:ie,inflate:(t,e)=>{let i,n,r,s,a,o,h,l,u,c,d,p,f,g,m,_,v,y,b,x,w,k,C,S;let I=0,T=new Uint8Array(4),E=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(e9(t)||!t.output||!t.input&&0!==t.avail_in)return e0;16191===(i=t.state).mode&&(i.mode=16192),a=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=i.hold,u=i.bits,c=o,d=h,k=eY;n:for(;;)switch(i.mode){case 16180:if(0===i.wrap){i.mode=16192;break}for(;u<16;){if(0===o)break n;o--,l+=n[s++]<>>8&255,i.check=tz(i.check,T,2,0),l=0,u=0,i.mode=16181;break}if(i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&l)<<8)+(l>>8))%31){t.msg="incorrect header check",i.mode=16209;break}if((15&l)!==e3){t.msg="unknown compression method",i.mode=16209;break}if(l>>>=4,u-=4,w=(15&l)+8,0===i.wbits&&(i.wbits=w),w>15||w>i.wbits){t.msg="invalid window size",i.mode=16209;break}i.dmax=1<>8&1),512&i.flags&&4&i.wrap&&(T[0]=255&l,T[1]=l>>>8&255,i.check=tz(i.check,T,2,0)),l=0,u=0,i.mode=16182;case 16182:for(;u<32;){if(0===o)break n;o--,l+=n[s++]<>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,i.check=tz(i.check,T,4,0)),l=0,u=0,i.mode=16183;case 16183:for(;u<16;){if(0===o)break n;o--,l+=n[s++]<>8),512&i.flags&&4&i.wrap&&(T[0]=255&l,T[1]=l>>>8&255,i.check=tz(i.check,T,2,0)),l=0,u=0,i.mode=16184;case 16184:if(1024&i.flags){for(;u<16;){if(0===o)break n;o--,l+=n[s++]<>>8&255,i.check=tz(i.check,T,2,0)),l=0,u=0}else i.head&&(i.head.extra=null);i.mode=16185;case 16185:if(1024&i.flags&&((p=i.length)>o&&(p=o),p&&(i.head&&(w=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Uint8Array(i.head.extra_len)),i.head.extra.set(n.subarray(s,s+p),w)),512&i.flags&&4&i.wrap&&(i.check=tz(i.check,n,p,s)),o-=p,s+=p,i.length-=p),i.length))break n;i.length=0,i.mode=16186;case 16186:if(2048&i.flags){if(0===o)break n;p=0;do w=n[s+p++],i.head&&w&&i.length<65536&&(i.head.name+=String.fromCharCode(w));while(w&&p>9&1,i.head.done=!0),t.adler=i.check=0,i.mode=16191;break;case 16189:for(;u<32;){if(0===o)break n;o--,l+=n[s++]<>>=7&u,u-=7&u,i.mode=16206;break}for(;u<3;){if(0===o)break n;o--,l+=n[s++]<>>=1)){case 0:i.mode=16193;break;case 1:if(ir(i),i.mode=16199,e===eJ){l>>>=2,u-=2;break n}break;case 2:i.mode=16196;break;case 3:t.msg="invalid block type",i.mode=16209}l>>>=2,u-=2;break;case 16193:for(l>>>=7&u,u-=7&u;u<32;){if(0===o)break n;o--,l+=n[s++]<>>16^65535)){t.msg="invalid stored block lengths",i.mode=16209;break}if(i.length=65535&l,l=0,u=0,i.mode=16194,e===eJ)break n;case 16194:i.mode=16195;case 16195:if(p=i.length){if(p>o&&(p=o),p>h&&(p=h),0===p)break n;r.set(n.subarray(s,s+p),a),o-=p,s+=p,h-=p,a+=p,i.length-=p;break}i.mode=16191;break;case 16196:for(;u<14;){if(0===o)break n;o--,l+=n[s++]<>>=5,u-=5,i.ndist=(31&l)+1,l>>>=5,u-=5,i.ncode=(15&l)+4,l>>>=4,u-=4,i.nlen>286||i.ndist>30){t.msg="too many length or distance symbols",i.mode=16209;break}i.have=0,i.mode=16197;case 16197:for(;i.have>>=3,u-=3}for(;i.have<19;)i.lens[E[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,C={bits:i.lenbits},k=eW(0,i.lens,0,19,i.lencode,0,i.work,C),i.lenbits=C.bits,k){t.msg="invalid code lengths set",i.mode=16209;break}i.have=0,i.mode=16198;case 16198:for(;i.have>>24,_=I>>>16&255,v=65535&I,!(m<=u);){if(0===o)break n;o--,l+=n[s++]<>>=m,u-=m,i.lens[i.have++]=v;else{if(16===v){for(S=m+2;u>>=m,u-=m,0===i.have){t.msg="invalid bit length repeat",i.mode=16209;break}w=i.lens[i.have-1],p=3+(3&l),l>>>=2,u-=2}else if(17===v){for(S=m+3;u>>=m,u-=m,w=0,p=3+(7&l),l>>>=3,u-=3}else{for(S=m+7;u>>=m,u-=m,w=0,p=11+(127&l),l>>>=7,u-=7}if(i.have+p>i.nlen+i.ndist){t.msg="invalid bit length repeat",i.mode=16209;break}for(;p--;)i.lens[i.have++]=w}}if(16209===i.mode)break;if(0===i.lens[256]){t.msg="invalid code -- missing end-of-block",i.mode=16209;break}if(i.lenbits=9,C={bits:i.lenbits},k=eW(1,i.lens,0,i.nlen,i.lencode,0,i.work,C),i.lenbits=C.bits,k){t.msg="invalid literal/lengths set",i.mode=16209;break}if(i.distbits=6,i.distcode=i.distdyn,C={bits:i.distbits},k=eW(2,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,C),i.distbits=C.bits,k){t.msg="invalid distances set",i.mode=16209;break}if(i.mode=16199,e===eJ)break n;case 16199:i.mode=16200;case 16200:if(o>=6&&h>=258){t.next_out=a,t.avail_out=h,t.next_in=s,t.avail_in=o,i.hold=l,i.bits=u,eU(t,d),a=t.next_out,r=t.output,h=t.avail_out,s=t.next_in,n=t.input,o=t.avail_in,l=i.hold,u=i.bits,16191===i.mode&&(i.back=-1);break}for(i.back=0;m=(I=i.lencode[l&(1<>>24,_=I>>>16&255,v=65535&I,!(m<=u);){if(0===o)break n;o--,l+=n[s++]<>y)])>>>24,_=I>>>16&255,v=65535&I,!(y+m<=u);){if(0===o)break n;o--,l+=n[s++]<>>=y,u-=y,i.back+=y}if(l>>>=m,u-=m,i.back+=m,i.length=v,0===_){i.mode=16205;break}if(32&_){i.back=-1,i.mode=16191;break}if(64&_){t.msg="invalid literal/length code",i.mode=16209;break}i.extra=15&_,i.mode=16201;case 16201:if(i.extra){for(S=i.extra;u>>=i.extra,u-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=16202;case 16202:for(;m=(I=i.distcode[l&(1<>>24,_=I>>>16&255,v=65535&I,!(m<=u);){if(0===o)break n;o--,l+=n[s++]<>y)])>>>24,_=I>>>16&255,v=65535&I,!(y+m<=u);){if(0===o)break n;o--,l+=n[s++]<>>=y,u-=y,i.back+=y}if(l>>>=m,u-=m,i.back+=m,64&_){t.msg="invalid distance code",i.mode=16209;break}i.offset=v,i.extra=15&_,i.mode=16203;case 16203:if(i.extra){for(S=i.extra;u>>=i.extra,u-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){t.msg="invalid distance too far back",i.mode=16209;break}i.mode=16204;case 16204:if(0===h)break n;if(p=d-h,i.offset>p){if((p=i.offset-p)>i.whave&&i.sane){t.msg="invalid distance too far back",i.mode=16209;break}p>i.wnext?(p-=i.wnext,f=i.wsize-p):f=i.wnext-p,p>i.length&&(p=i.length),g=i.window}else g=r,f=a-i.offset,p=i.length;p>h&&(p=h),h-=p,i.length-=p;do r[a++]=g[f++];while(--p)0===i.length&&(i.mode=16200);break;case 16205:if(0===h)break n;r[a++]=i.length,h--,i.mode=16200;break;case 16206:if(i.wrap){for(;u<32;){if(0===o)break n;o--,l|=n[s++]<{if(e9(t))return e0;let e=t.state;return e.window&&(e.window=null),t.state=null,eY},inflateGetHeader:(t,e)=>{if(e9(t))return e0;let i=t.state;return(2&i.wrap)==0?e0:(i.head=e,e.done=!1,eY)},inflateSetDictionary:(t,e)=>{let i;let n=e.length;return e9(t)||0!==(i=t.state).wrap&&16190!==i.mode?e0:16190===i.mode&&tN(1,e,n,0)!==i.check?e1:is(t,e,n,n)?(i.mode=16210,e2):(i.havedict=1,eY)},inflateInfo:"pako inflate (from Nodeca project)"},io=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1};const ih=Object.prototype.toString,{Z_NO_FLUSH:il,Z_FINISH:iu,Z_OK:ic,Z_STREAM_END:id,Z_NEED_DICT:ip,Z_STREAM_ERROR:ig,Z_DATA_ERROR:im,Z_MEM_ERROR:i_}=tB;function iv(t){this.options=eC.assign({chunkSize:65536,windowBits:15,to:""},t||{});let e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(15&e.windowBits)==0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new eA,this.strm.avail_out=0;let i=ia.inflateInit2(this.strm,e.windowBits);if(i!==ic||(this.header=new io,ia.inflateGetHeader(this.strm,this.header),e.dictionary&&("string"==typeof e.dictionary?e.dictionary=eE.string2buf(e.dictionary):"[object ArrayBuffer]"===ih.call(e.dictionary)&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(i=ia.inflateSetDictionary(this.strm,e.dictionary))!==ic)))throw Error(tR[i])}function iy(t,e){let i=new iv(e);if(i.push(t),i.err)throw i.msg||tR[i.err];return i.result}iv.prototype.push=function(t,e){let i,n,r;let s=this.strm,a=this.options.chunkSize,o=this.options.dictionary;if(this.ended)return!1;for(n=e===~~e?e:!0===e?iu:il,"[object ArrayBuffer]"===ih.call(t)?s.input=new Uint8Array(t):s.input=t,s.next_in=0,s.avail_in=s.input.length;;){for(0===s.avail_out&&(s.output=new Uint8Array(a),s.next_out=0,s.avail_out=a),(i=ia.inflate(s,n))===ip&&o&&((i=ia.inflateSetDictionary(s,o))===ic?i=ia.inflate(s,n):i===im&&(i=ip));s.avail_in>0&&i===id&&s.state.wrap>0&&0!==t[s.next_in];)ia.inflateReset(s),i=ia.inflate(s,n);switch(i){case ig:case im:case ip:case i_:return this.onEnd(i),this.ended=!0,!1}if(r=s.avail_out,s.next_out&&(0===s.avail_out||i===id)){if("string"===this.options.to){let t=eE.utf8border(s.output,s.next_out),e=s.next_out-t,i=eE.buf2string(s.output,t);s.next_out=e,s.avail_out=a-e,e&&s.output.set(s.output.subarray(t,t+e),0),this.onData(i)}else this.onData(s.output.length===s.next_out?s.output:s.output.subarray(0,s.next_out))}if(i!==ic||0!==r){if(i===id)return i=ia.inflateEnd(this.strm),this.onEnd(i),this.ended=!0,!0;if(0===s.avail_in)break}}return!0},iv.prototype.onData=function(t){this.chunks.push(t)},iv.prototype.onEnd=function(t){t===ic&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=eC.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg};const{Deflate:ib,deflate:ix,deflateRaw:iw,gzip:ik}={Deflate:eV,deflate:ej,deflateRaw:function(t,e){return(e=e||{}).raw=!0,ej(t,e)},gzip:function(t,e){return(e=e||{}).gzip=!0,ej(t,e)},constants:tB},{Inflate:iC,inflate:iS,inflateRaw:iI,ungzip:iT}={Inflate:iv,inflate:iy,inflateRaw:function(t,e){return(e=e||{}).raw=!0,iy(t,e)},ungzip:iy,constants:tB};var iE={Deflate:ib,deflate:ix,deflateRaw:iw,gzip:ik,Inflate:iC,inflate:iS,inflateRaw:iI,ungzip:iT,constants:tB},iA={};iA=function(){for(var t=function(t,e,i){return void 0===e&&(e=0),void 0===i&&(i=1),ti?i:t},e={},i=0,n=["Boolean","Number","String","Function","Array","Date","RegExp","Undefined","Null"];i255)&&(e._clipped=!0),e[i]=t(e[i],0,255)):3===i&&(e[i]=t(e[i],0,1));return e},limit:t,type:s,unpack:function(t,e){return(void 0===e&&(e=null),t.length>=3)?Array.prototype.slice.call(t):"object"==s(t[0])&&e?e.split("").filter(function(e){return void 0!==t[0][e]}).map(function(e){return t[0][e]}):t[0]},last:function(t){if(t.length<2)return null;var e=t.length-1;return"string"==s(t[e])?t[e].toLowerCase():null},TWOPI:2*a,PITHIRD:a/3,DEG2RAD:a/180,RAD2DEG:180/a},h={format:{},autodetect:[]},l=o.last,u=o.clip_rgb,c=o.type,d=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("object"===c(t[0])&&t[0].constructor&&t[0].constructor===this.constructor)return t[0];var i=l(t),n=!1;if(!i){n=!0,h.sorted||(h.autodetect=h.autodetect.sort(function(t,e){return e.p-t.p}),h.sorted=!0);for(var r=0,s=h.autodetect;r4?t[4]:1;return 1===s?[0,0,0,a]:[i>=1?0:255*(1-i)*(1-s),n>=1?0:255*(1-n)*(1-s),r>=1?0:255*(1-r)*(1-s),a]},h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===v(t=_(t,"cmyk"))&&4===t.length)return"cmyk"}});var b=o.unpack,x=o.last,w=function(t){return Math.round(100*t)/100},k=o.unpack,C=function(){for(var t,e,i=[],n=arguments.length;n--;)i[n]=arguments[n];var r=(i=k(i,"rgba"))[0],s=i[1],a=i[2],o=Math.min(r/=255,s/=255,a/=255),h=Math.max(r,s,a),l=(h+o)/2;return(h===o?(t=0,e=Number.NaN):t=l<.5?(h-o)/(h+o):(h-o)/(2-h-o),r==h?e=(s-a)/(h-o):s==h?e=2+(a-r)/(h-o):a==h&&(e=4+(r-s)/(h-o)),(e*=60)<0&&(e+=360),i.length>3&&void 0!==i[3])?[e,t,l,i[3]]:[e,t,l]},S=o.unpack,I=o.last,T=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=b(t,"hsla"),n=x(t)||"lsa";return i[0]=w(i[0]||0),i[1]=w(100*i[1])+"%",i[2]=w(100*i[2])+"%","hsla"===n||i.length>3&&i[3]<1?(i[3]=i.length>3?i[3]:1,n="hsla"):i.length=3,n+"("+i.join(",")+")"},E=Math.round,A=o.unpack,P=Math.round,M=function(){for(var t,e,i,n,r=[],s=arguments.length;s--;)r[s]=arguments[s];var a=(r=A(r,"hsl"))[0],o=r[1],h=r[2];if(0===o)e=i=n=255*h;else{var l=[0,0,0],u=[0,0,0],c=h<.5?h*(1+o):h+o-h*o,d=2*h-c,p=a/360;l[0]=p+1/3,l[1]=p,l[2]=p-1/3;for(var f=0;f<3;f++)l[f]<0&&(l[f]+=1),l[f]>1&&(l[f]-=1),6*l[f]<1?u[f]=d+(c-d)*6*l[f]:2*l[f]<1?u[f]=c:3*l[f]<2?u[f]=d+(c-d)*(2/3-l[f])*6:u[f]=d;e=(t=[P(255*u[0]),P(255*u[1]),P(255*u[2])])[0],i=t[1],n=t[2]}return r.length>3?[e,i,n,r[3]]:[e,i,n,1]},O=/^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/,N=/^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/,L=/^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,z=/^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,R=/^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/,B=/^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/,D=Math.round,F=function(t){if(t=t.toLowerCase().trim(),h.format.named)try{return h.format.named(t)}catch(t){}if(e=t.match(O)){for(var e,i=e.slice(1,4),n=0;n<3;n++)i[n]=+i[n];return i[3]=1,i}if(e=t.match(N)){for(var r=e.slice(1,5),s=0;s<4;s++)r[s]=+r[s];return r}if(e=t.match(L)){for(var a=e.slice(1,4),o=0;o<3;o++)a[o]=D(2.55*a[o]);return a[3]=1,a}if(e=t.match(z)){for(var l=e.slice(1,5),u=0;u<3;u++)l[u]=D(2.55*l[u]);return l[3]=+l[3],l}if(e=t.match(R)){var c=e.slice(1,4);c[1]*=.01,c[2]*=.01;var d=M(c);return d[3]=1,d}if(e=t.match(B)){var p=e.slice(1,4);p[1]*=.01,p[2]*=.01;var f=M(p);return f[3]=+e[4],f}};F.test=function(t){return O.test(t)||N.test(t)||L.test(t)||z.test(t)||R.test(t)||B.test(t)};var V=o.type,j=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=S(t,"rgba"),n=I(t)||"rgb";return"hsl"==n.substr(0,3)?T(C(i),n):(i[0]=E(i[0]),i[1]=E(i[1]),i[2]=E(i[2]),("rgba"===n||i.length>3&&i[3]<1)&&(i[3]=i.length>3?i[3]:1,n="rgba"),n+"("+i.slice(0,"rgb"===n?3:4).join(",")+")")};d.prototype.css=function(t){return j(this._rgb,t)},p.css=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["css"])))},h.format.css=F,h.autodetect.push({p:5,test:function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];if(!e.length&&"string"===V(t)&&F.test(t))return"css"}});var U=o.unpack;h.format.gl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=U(t,"rgba");return i[0]*=255,i[1]*=255,i[2]*=255,i},p.gl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["gl"])))},d.prototype.gl=function(){var t=this._rgb;return[t[0]/255,t[1]/255,t[2]/255,t[3]]};var q=o.unpack,Z=o.unpack,H=Math.floor,G=o.unpack,W=o.type,K=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];var n=q(e,"rgb"),r=n[0],s=n[1],a=n[2],o=Math.min(r,s,a),h=Math.max(r,s,a),l=h-o;return 0===l?t=Number.NaN:(r===h&&(t=(s-a)/l),s===h&&(t=2+(a-r)/l),a===h&&(t=4+(r-s)/l),(t*=60)<0&&(t+=360)),[t,100*l/255,o/(255-l)*100]};d.prototype.hcg=function(){return K(this._rgb)},p.hcg=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hcg"])))},h.format.hcg=function(){for(var t,e,i,n,r,s,a,o,h,l=[],u=arguments.length;u--;)l[u]=arguments[u];var c=(l=Z(l,"hcg"))[0],d=l[1],p=l[2];p*=255;var f=255*d;if(0===d)a=o=h=p;else{360===c&&(c=0),c>360&&(c-=360),c<0&&(c+=360);var g=H(c/=60),m=c-g,_=p*(1-d),v=_+f*(1-m),y=_+f*m,b=_+f;switch(g){case 0:a=(t=[b,y,_])[0],o=t[1],h=t[2];break;case 1:a=(e=[v,b,_])[0],o=e[1],h=e[2];break;case 2:a=(i=[_,b,y])[0],o=i[1],h=i[2];break;case 3:a=(n=[_,v,b])[0],o=n[1],h=n[2];break;case 4:a=(r=[y,_,b])[0],o=r[1],h=r[2];break;case 5:a=(s=[b,_,v])[0],o=s[1],h=s[2]}}return[a,o,h,l.length>3?l[3]:1]},h.autodetect.push({p:1,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===W(t=G(t,"hcg"))&&3===t.length)return"hcg"}});var $=o.unpack,J=o.last,Y=Math.round,Q=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=$(t,"rgba"),n=i[0],r=i[1],s=i[2],a=i[3],o=J(t)||"auto";void 0===a&&(a=1),"auto"===o&&(o=a<1?"rgba":"rgb");var h="000000"+((n=Y(n))<<16|(r=Y(r))<<8|(s=Y(s))).toString(16);h=h.substr(h.length-6);var l="0"+Y(255*a).toString(16);switch(l=l.substr(l.length-2),o.toLowerCase()){case"rgba":return"#"+h+l;case"argb":return"#"+l+h;default:return"#"+h}},X=/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,tt=/^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/,te=function(t){if(t.match(X)){(4===t.length||7===t.length)&&(t=t.substr(1)),3===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]);var e=parseInt(t,16);return[e>>16,e>>8&255,255&e,1]}if(t.match(tt)){(5===t.length||9===t.length)&&(t=t.substr(1)),4===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]+t[3]+t[3]);var i=parseInt(t,16),n=Math.round((255&i)/255*100)/100;return[i>>24&255,i>>16&255,i>>8&255,n]}throw Error("unknown hex color: "+t)},ti=o.type;d.prototype.hex=function(t){return Q(this._rgb,t)},p.hex=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hex"])))},h.format.hex=te,h.autodetect.push({p:4,test:function(t){for(var e=[],i=arguments.length-1;i-- >0;)e[i]=arguments[i+1];if(!e.length&&"string"===ti(t)&&[3,4,5,6,7,8,9].indexOf(t.length)>=0)return"hex"}});var tn=o.unpack,tr=o.TWOPI,ts=Math.min,ta=Math.sqrt,to=Math.acos,th=o.unpack,tl=o.limit,tu=o.TWOPI,tc=o.PITHIRD,td=Math.cos,tp=o.unpack,tf=o.type,tg=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];var n=tn(e,"rgb"),r=n[0],s=n[1],a=n[2],o=ts(r/=255,s/=255,a/=255),h=(r+s+a)/3,l=h>0?1-o/h:0;return 0===l?t=NaN:(t=to(t=(r-s+(r-a))/2/ta((r-s)*(r-s)+(r-a)*(s-a))),a>s&&(t=tr-t),t/=tr),[360*t,l,h]};d.prototype.hsi=function(){return tg(this._rgb)},p.hsi=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hsi"])))},h.format.hsi=function(){for(var t,e,i,n=[],r=arguments.length;r--;)n[r]=arguments[r];var s=(n=th(n,"hsi"))[0],a=n[1],o=n[2];return isNaN(s)&&(s=0),isNaN(a)&&(a=0),s>360&&(s-=360),s<0&&(s+=360),(s/=360)<1/3?e=1-((i=(1-a)/3)+(t=(1+a*td(tu*s)/td(tc-tu*s))/3)):s<2/3?(s-=1/3,i=1-((t=(1-a)/3)+(e=(1+a*td(tu*s)/td(tc-tu*s))/3))):(s-=2/3,t=1-((e=(1-a)/3)+(i=(1+a*td(tu*s)/td(tc-tu*s))/3))),[255*(t=tl(o*t*3)),255*(e=tl(o*e*3)),255*(i=tl(o*i*3)),n.length>3?n[3]:1]},h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===tf(t=tp(t,"hsi"))&&3===t.length)return"hsi"}});var tm=o.unpack,t_=o.type;d.prototype.hsl=function(){return C(this._rgb)},p.hsl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hsl"])))},h.format.hsl=M,h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===t_(t=tm(t,"hsl"))&&3===t.length)return"hsl"}});var tv=o.unpack,ty=Math.min,tb=Math.max,tx=o.unpack,tw=Math.floor,tk=o.unpack,tC=o.type,tS=function(){for(var t,e,i=[],n=arguments.length;n--;)i[n]=arguments[n];var r=(i=tv(i,"rgb"))[0],s=i[1],a=i[2],o=ty(r,s,a),h=tb(r,s,a),l=h-o;return 0===h?(t=Number.NaN,e=0):(e=l/h,r===h&&(t=(s-a)/l),s===h&&(t=2+(a-r)/l),a===h&&(t=4+(r-s)/l),(t*=60)<0&&(t+=360)),[t,e,h/255]};d.prototype.hsv=function(){return tS(this._rgb)},p.hsv=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hsv"])))},h.format.hsv=function(){for(var t,e,i,n,r,s,a,o,h,l=[],u=arguments.length;u--;)l[u]=arguments[u];var c=(l=tx(l,"hsv"))[0],d=l[1],p=l[2];if(p*=255,0===d)a=o=h=p;else{360===c&&(c=0),c>360&&(c-=360),c<0&&(c+=360);var f=tw(c/=60),g=c-f,m=p*(1-d),_=p*(1-d*g),v=p*(1-d*(1-g));switch(f){case 0:a=(t=[p,v,m])[0],o=t[1],h=t[2];break;case 1:a=(e=[_,p,m])[0],o=e[1],h=e[2];break;case 2:a=(i=[m,p,v])[0],o=i[1],h=i[2];break;case 3:a=(n=[m,_,p])[0],o=n[1],h=n[2];break;case 4:a=(r=[v,m,p])[0],o=r[1],h=r[2];break;case 5:a=(s=[p,m,_])[0],o=s[1],h=s[2]}}return[a,o,h,l.length>3?l[3]:1]},h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===tC(t=tk(t,"hsv"))&&3===t.length)return"hsv"}});var tI={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},tT=o.unpack,tE=Math.pow,tA=function(t){return(t/=255)<=.04045?t/12.92:tE((t+.055)/1.055,2.4)},tP=function(t){return t>tI.t3?tE(t,1/3):t/tI.t2+tI.t0},tM=function(){for(var t,e,i,n=[],r=arguments.length;r--;)n[r]=arguments[r];var s=tT(n,"rgb"),a=(t=s[0],e=s[1],i=s[2],[tP((.4124564*(t=tA(t))+.3575761*(e=tA(e))+.1804375*(i=tA(i)))/tI.Xn),tP((.2126729*t+.7151522*e+.072175*i)/tI.Yn),tP((.0193339*t+.119192*e+.9503041*i)/tI.Zn)]),o=a[0],h=a[1],l=a[2],u=116*h-16;return[u<0?0:u,500*(o-h),200*(h-l)]},tO=o.unpack,tN=Math.pow,tL=function(t){return 255*(t<=.00304?12.92*t:1.055*tN(t,1/2.4)-.055)},tz=function(t){return t>tI.t1?t*t*t:tI.t2*(t-tI.t0)},tR=function(){for(var t,e,i,n=[],r=arguments.length;r--;)n[r]=arguments[r];var s=(n=tO(n,"lab"))[0],a=n[1],o=n[2];return e=(s+16)/116,t=isNaN(a)?e:e+a/500,i=isNaN(o)?e:e-o/200,e=tI.Yn*tz(e),[tL(3.2404542*(t=tI.Xn*tz(t))-1.5371385*e-.4985314*(i=tI.Zn*tz(i))),tL(-.969266*t+1.8760108*e+.041556*i),tL(.0556434*t-.2040259*e+1.0572252*i),n.length>3?n[3]:1]},tB=o.unpack,tD=o.type;d.prototype.lab=function(){return tM(this._rgb)},p.lab=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["lab"])))},h.format.lab=tR,h.autodetect.push({p:2,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===tD(t=tB(t,"lab"))&&3===t.length)return"lab"}});var tF=o.unpack,tV=o.RAD2DEG,tj=Math.sqrt,tU=Math.atan2,tq=Math.round,tZ=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tF(t,"lab"),n=i[0],r=i[1],s=i[2],a=tj(r*r+s*s),o=(tU(s,r)*tV+360)%360;return 0===tq(1e4*a)&&(o=Number.NaN),[n,a,o]},tH=o.unpack,tG=o.unpack,tW=o.DEG2RAD,tK=Math.sin,t$=Math.cos,tJ=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tG(t,"lch"),n=i[0],r=i[1],s=i[2];return isNaN(s)&&(s=0),[n,t$(s*=tW)*r,tK(s)*r]},tY=o.unpack,tQ=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tJ((t=tY(t,"lch"))[0],t[1],t[2]),n=tR(i[0],i[1],i[2]);return[n[0],n[1],n[2],t.length>3?t[3]:1]},tX=o.unpack,t0=o.unpack,t1=o.type,t2=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tH(t,"rgb"),n=tM(i[0],i[1],i[2]);return tZ(n[0],n[1],n[2])};d.prototype.lch=function(){return t2(this._rgb)},d.prototype.hcl=function(){return t2(this._rgb).reverse()},p.lch=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["lch"])))},p.hcl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["hcl"])))},h.format.lch=tQ,h.format.hcl=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tX(t,"hcl").reverse();return tQ.apply(void 0,i)},["lch","hcl"].forEach(function(t){return h.autodetect.push({p:2,test:function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];if("array"===t1(e=t0(e,t))&&3===e.length)return t}})});var t5={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},t3=o.type;d.prototype.name=function(){for(var t=Q(this._rgb,"rgb"),e=0,i=Object.keys(t5);e0;)e[i]=arguments[i+1];if(!e.length&&"string"===t3(t)&&t5[t.toLowerCase()])return"named"}});var t6=o.unpack,t4=o.type,t9=o.type,t8=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=t6(t,"rgb");return(i[0]<<16)+(i[1]<<8)+i[2]};d.prototype.num=function(){return t8(this._rgb)},p.num=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["num"])))},h.format.num=function(t){if("number"==t4(t)&&t>=0&&t<=16777215)return[t>>16,t>>8&255,255&t,1];throw Error("unknown num color: "+t)},h.autodetect.push({p:5,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if(1===t.length&&"number"===t9(t[0])&&t[0]>=0&&t[0]<=16777215)return"num"}});var t7=o.unpack,et=o.type,ee=Math.round;d.prototype.rgb=function(t){return(void 0===t&&(t=!0),!1===t)?this._rgb.slice(0,3):this._rgb.slice(0,3).map(ee)},d.prototype.rgba=function(t){return void 0===t&&(t=!0),this._rgb.slice(0,4).map(function(e,i){return i<3?!1===t?e:ee(e):e})},p.rgb=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["rgb"])))},h.format.rgb=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=t7(t,"rgba");return void 0===i[3]&&(i[3]=1),i},h.autodetect.push({p:3,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===et(t=t7(t,"rgba"))&&(3===t.length||4===t.length&&"number"==et(t[3])&&t[3]>=0&&t[3]<=1))return"rgb"}});var ei=Math.log,en=function(t){var e,i,n,r=t/100;return r<66?(e=255,i=r<6?0:-155.25485562709179-.44596950469579133*(i=r-2)+104.49216199393888*ei(i),n=r<20?0:-254.76935184120902+.8274096064007395*(n=r-10)+115.67994401066147*ei(n)):(e=351.97690566805693+.114206453784165*(e=r-55)-40.25366309332127*ei(e),i=325.4494125711974+.07943456536662342*(i=r-50)-28.0852963507957*ei(i),n=255),[e,i,n,1]},er=o.unpack,es=Math.round,ea=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];for(var n=er(e,"rgb"),r=n[0],s=n[2],a=1e3,o=4e4;o-a>.4;){var h=en(t=(o+a)*.5);h[2]/h[0]>=s/r?o=t:a=t}return es(t)};d.prototype.temp=d.prototype.kelvin=d.prototype.temperature=function(){return ea(this._rgb)},p.temp=p.kelvin=p.temperature=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["temp"])))},h.format.temp=h.format.kelvin=h.format.temperature=en;var eo=o.unpack,eh=Math.cbrt,el=Math.pow,eu=Math.sign,ec=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=eo(t,"rgb"),n=i[0],r=i[1],s=i[2],a=[ed(n/255),ed(r/255),ed(s/255)],o=a[0],h=a[1],l=a[2],u=eh(.4122214708*o+.5363325363*h+.0514459929*l),c=eh(.2119034982*o+.6806995451*h+.1073969566*l),d=eh(.0883024619*o+.2817188376*h+.6299787005*l);return[.2104542553*u+.793617785*c-.0040720468*d,1.9779984951*u-2.428592205*c+.4505937099*d,.0259040371*u+.7827717662*c-.808675766*d]};function ed(t){var e=Math.abs(t);return e<.04045?t/12.92:(eu(t)||1)*el((e+.055)/1.055,2.4)}var ep=o.unpack,ef=Math.pow,eg=Math.sign,em=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=(t=ep(t,"lab"))[0],n=t[1],r=t[2],s=ef(i+.3963377774*n+.2158037573*r,3),a=ef(i-.1055613458*n-.0638541728*r,3),o=ef(i-.0894841775*n-1.291485548*r,3);return[255*e_(4.0767416621*s-3.3077115913*a+.2309699292*o),255*e_(-1.2684380046*s+2.6097574011*a-.3413193965*o),255*e_(-.0041960863*s-.7034186147*a+1.707614701*o),t.length>3?t[3]:1]};function e_(t){var e=Math.abs(t);return e>.0031308?(eg(t)||1)*(1.055*ef(e,1/2.4)-.055):12.92*t}var ev=o.unpack,ey=o.type;d.prototype.oklab=function(){return ec(this._rgb)},p.oklab=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["oklab"])))},h.format.oklab=em,h.autodetect.push({p:3,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===ey(t=ev(t,"oklab"))&&3===t.length)return"oklab"}});var eb=o.unpack,ex=o.unpack,ew=o.unpack,ek=o.type,eC=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=eb(t,"rgb"),n=ec(i[0],i[1],i[2]);return tZ(n[0],n[1],n[2])};d.prototype.oklch=function(){return eC(this._rgb)},p.oklch=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new(Function.prototype.bind.apply(d,[null].concat(t,["oklch"])))},h.format.oklch=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var i=tJ((t=ex(t,"lch"))[0],t[1],t[2]),n=em(i[0],i[1],i[2]);return[n[0],n[1],n[2],t.length>3?t[3]:1]},h.autodetect.push({p:3,test:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];if("array"===ek(t=ew(t,"oklch"))&&3===t.length)return"oklch"}});var eS=o.type;d.prototype.alpha=function(t,e){return(void 0===e&&(e=!1),void 0!==t&&"number"===eS(t))?e?(this._rgb[3]=t,this):new d([this._rgb[0],this._rgb[1],this._rgb[2],t],"rgb"):this._rgb[3]},d.prototype.clipped=function(){return this._rgb._clipped||!1},d.prototype.darken=function(t){void 0===t&&(t=1);var e=this.lab();return e[0]-=tI.Kn*t,new d(e,"lab").alpha(this.alpha(),!0)},d.prototype.brighten=function(t){return void 0===t&&(t=1),this.darken(-t)},d.prototype.darker=d.prototype.darken,d.prototype.brighter=d.prototype.brighten,d.prototype.get=function(t){var e=t.split("."),i=e[0],n=e[1],r=this[i]();if(!n)return r;var s=i.indexOf(n)-("ok"===i.substr(0,2)?2:0);if(s>-1)return r[s];throw Error("unknown channel "+n+" in mode "+i)};var eI=o.type,eT=Math.pow;d.prototype.luminance=function(t){if(void 0!==t&&"number"===eI(t)){if(0===t)return new d([0,0,0,this._rgb[3]],"rgb");if(1===t)return new d([255,255,255,this._rgb[3]],"rgb");var e=this.luminance(),i=20,n=function(e,r){var s=e.interpolate(r,.5,"rgb"),a=s.luminance();return!(1e-7>Math.abs(t-a))&&i--?a>t?n(e,s):n(s,r):s},r=(e>t?n(new d([0,0,0]),this):n(this,new d([255,255,255]))).rgb();return new d(r.concat([this._rgb[3]]))}return eE.apply(void 0,this._rgb.slice(0,3))};var eE=function(t,e,i){return .2126*(t=eA(t))+.7152*(e=eA(e))+.0722*(i=eA(i))},eA=function(t){return(t/=255)<=.03928?t/12.92:eT((t+.055)/1.055,2.4)},eP={},eM=o.type,eO=function(t,e,i){void 0===i&&(i=.5);for(var n=[],r=arguments.length-3;r-- >0;)n[r]=arguments[r+3];var s=n[0]||"lrgb";if(eP[s]||n.length||(s=Object.keys(eP)[0]),!eP[s])throw Error("interpolation mode "+s+" is not defined");return"object"!==eM(t)&&(t=new d(t)),"object"!==eM(e)&&(e=new d(e)),eP[s](t,e,i).alpha(t.alpha()+i*(e.alpha()-t.alpha()))};d.prototype.mix=d.prototype.interpolate=function(t,e){void 0===e&&(e=.5);for(var i=[],n=arguments.length-2;n-- >0;)i[n]=arguments[n+2];return eO.apply(void 0,[this,t,e].concat(i))},d.prototype.premultiply=function(t){void 0===t&&(t=!1);var e=this._rgb,i=e[3];return t?(this._rgb=[e[0]*i,e[1]*i,e[2]*i,i],this):new d([e[0]*i,e[1]*i,e[2]*i,i],"rgb")},d.prototype.saturate=function(t){void 0===t&&(t=1);var e=this.lch();return e[1]+=tI.Kn*t,e[1]<0&&(e[1]=0),new d(e,"lch").alpha(this.alpha(),!0)},d.prototype.desaturate=function(t){return void 0===t&&(t=1),this.saturate(-t)};var eN=o.type;d.prototype.set=function(t,e,i){void 0===i&&(i=!1);var n=t.split("."),r=n[0],s=n[1],a=this[r]();if(!s)return a;var o=r.indexOf(s)-("ok"===r.substr(0,2)?2:0);if(o>-1){if("string"==eN(e))switch(e.charAt(0)){case"+":case"-":a[o]+=+e;break;case"*":a[o]*=+e.substr(1);break;case"/":a[o]/=+e.substr(1);break;default:a[o]=+e}else if("number"===eN(e))a[o]=e;else throw Error("unsupported value for Color.set");var h=new d(a,r);return i?(this._rgb=h._rgb,this):h}throw Error("unknown channel "+s+" in mode "+r)},eP.rgb=function(t,e,i){var n=t._rgb,r=e._rgb;return new d(n[0]+i*(r[0]-n[0]),n[1]+i*(r[1]-n[1]),n[2]+i*(r[2]-n[2]),"rgb")};var eL=Math.sqrt,ez=Math.pow;eP.lrgb=function(t,e,i){var n=t._rgb,r=n[0],s=n[1],a=n[2],o=e._rgb,h=o[0],l=o[1],u=o[2];return new d(eL(ez(r,2)*(1-i)+ez(h,2)*i),eL(ez(s,2)*(1-i)+ez(l,2)*i),eL(ez(a,2)*(1-i)+ez(u,2)*i),"rgb")},eP.lab=function(t,e,i){var n=t.lab(),r=e.lab();return new d(n[0]+i*(r[0]-n[0]),n[1]+i*(r[1]-n[1]),n[2]+i*(r[2]-n[2]),"lab")};var eR=function(t,e,i,n){var r,s,a,o,h,l,u,c,p,f,g,m,_,v;return"hsl"===n?(a=t.hsl(),o=e.hsl()):"hsv"===n?(a=t.hsv(),o=e.hsv()):"hcg"===n?(a=t.hcg(),o=e.hcg()):"hsi"===n?(a=t.hsi(),o=e.hsi()):"lch"===n||"hcl"===n?(n="hcl",a=t.hcl(),o=e.hcl()):"oklch"===n&&(a=t.oklch().reverse(),o=e.oklch().reverse()),("h"===n.substr(0,1)||"oklch"===n)&&(h=(r=a)[0],u=r[1],p=r[2],l=(s=o)[0],c=s[1],f=s[2]),isNaN(h)||isNaN(l)?isNaN(h)?isNaN(l)?m=Number.NaN:(m=l,(1==p||0==p)&&"hsv"!=n&&(g=c)):(m=h,(1==f||0==f)&&"hsv"!=n&&(g=u)):(v=l>h&&l-h>180?l-(h+360):l180?l+360-h:l-h,m=h+i*v),void 0===g&&(g=u+i*(c-u)),_=p+i*(f-p),"oklch"===n?new d([_,g,m],n):new d([m,g,_],n)},eB=function(t,e,i){return eR(t,e,i,"lch")};eP.lch=eB,eP.hcl=eB,eP.num=function(t,e,i){var n=t.num();return new d(n+i*(e.num()-n),"num")},eP.hcg=function(t,e,i){return eR(t,e,i,"hcg")},eP.hsi=function(t,e,i){return eR(t,e,i,"hsi")},eP.hsl=function(t,e,i){return eR(t,e,i,"hsl")},eP.hsv=function(t,e,i){return eR(t,e,i,"hsv")},eP.oklab=function(t,e,i){var n=t.oklab(),r=e.oklab();return new d(n[0]+i*(r[0]-n[0]),n[1]+i*(r[1]-n[1]),n[2]+i*(r[2]-n[2]),"oklab")},eP.oklch=function(t,e,i){return eR(t,e,i,"oklch")};var eD=o.clip_rgb,eF=Math.pow,eV=Math.sqrt,ej=Math.PI,eU=Math.cos,eq=Math.sin,eZ=Math.atan2,eH=function(t,e){for(var i=t.length,n=[0,0,0,0],r=0;r.9999999&&(n[3]=1),new d(eD(n))},eG=o.type,eW=Math.pow,eK=function(t){var e="rgb",i=p("#ccc"),n=0,r=[0,1],s=[],a=[0,0],o=!1,h=[],l=!1,u=0,c=1,d=!1,f={},g=!0,m=1,_=function(t){if("string"===eG(t=t||["#fff","#000"])&&p.brewer&&p.brewer[t.toLowerCase()]&&(t=p.brewer[t.toLowerCase()]),"array"===eG(t)){1===t.length&&(t=[t[0],t[0]]),t=t.slice(0);for(var e=0;e=o[i];)i++;return i-1}return 0},y=function(t){return t},b=function(t){return t},x=function(t,n){if(null==n&&(n=!1),isNaN(t)||null===t)return i;if(n)l=t;else if(o&&o.length>2){var r,l;l=v(t)/(o.length-2)}else l=c!==u?(t-u)/(c-u):1;l=b(l),n||(l=y(l)),1!==m&&(l=eW(l,m));var d=Math.floor(1e4*(l=Math.min(1,Math.max(0,l=a[0]+l*(1-a[0]-a[1])))));if(g&&f[d])r=f[d];else{if("array"===eG(h))for(var _=0;_=x&&_===s.length-1){r=h[_];break}if(l>x&&l2){var l=t.map(function(e,i){return i/(t.length-1)}),d=t.map(function(t){return(t-u)/(c-u)});d.every(function(t,e){return l[e]===t})||(b=function(t){if(t<=0||t>=1)return t;for(var e=0;t>=d[e+1];)e++;var i=(t-d[e])/(d[e+1]-d[e]);return l[e]+i*(l[e+1]-l[e])})}}return r=[u,c],k},k.mode=function(t){return arguments.length?(e=t,w(),k):e},k.range=function(t,e){return _(t),k},k.out=function(t){return l=t,k},k.spread=function(t){return arguments.length?(n=t,k):n},k.correctLightness=function(t){return null==t&&(t=!0),d=t,w(),y=d?function(t){for(var e=x(0,!0).lab()[0],i=x(1,!0).lab()[0],n=e>i,r=x(t,!0).lab()[0],s=e+(i-e)*t,a=r-s,o=0,h=1,l=20;Math.abs(a)>.01&&l-- >0;)n&&(a*=-1),a<0?(o=t,t+=(h-t)*.5):(h=t,t+=(o-t)*.5),a=(r=x(t,!0).lab()[0])-s;return t}:function(t){return t},k},k.padding=function(t){return null!=t?("number"===eG(t)&&(t=[t,t]),a=t,k):a},k.colors=function(e,i){arguments.length<2&&(i="hex");var n=[];if(0==arguments.length)n=h.slice(0);else if(1===e)n=[k(.5)];else if(e>1){var s=r[0],a=r[1]-s;n=(function(t,e,i){for(var n=[],r=ts;r?a++:a--)n.push(a);return n})(0,e,!1).map(function(t){return k(s+t/(e-1)*a)})}else{t=[];var l=[];if(o&&o.length>2)for(var u=1,c=o.length,d=1<=c;d?uc;d?u++:u--)l.push((o[u-1]+o[u])*.5);else l=r;n=l.map(function(t){return k(t)})}return p[i]&&(n=n.map(function(t){return t[i]()})),n},k.cache=function(t){return null!=t?(g=t,k):g},k.gamma=function(t){return null!=t?(m=t,k):m},k.nodata=function(t){return null!=t?(i=p(t),k):i},k},e$=function(t){for(var e=[1,1],i=1;i=5)l=t.map(function(t){return t.lab()}),u=e$(c=t.length-1),r=function(t){var e=1-t;return new d([0,1,2].map(function(i){return l.reduce(function(n,r,s){return n+u[s]*Math.pow(e,c-s)*Math.pow(t,s)*r[i]},0)}),"lab")};else throw RangeError("No point in running bezier with only one color.");return r},eY=function(t,e,i){if(!eY[i])throw Error("unknown blend mode "+i);return eY[i](t,e)},eQ=function(t){return function(e,i){var n=p(i).rgb(),r=p(e).rgb();return p.rgb(t(n,r))}},eX=function(t){return function(e,i){var n=[];return n[0]=t(e[0],i[0]),n[1]=t(e[1],i[1]),n[2]=t(e[2],i[2]),n}};eY.normal=eQ(eX(function(t){return t})),eY.multiply=eQ(eX(function(t,e){return t*e/255})),eY.screen=eQ(eX(function(t,e){return 255*(1-(1-t/255)*(1-e/255))})),eY.overlay=eQ(eX(function(t,e){return e<128?2*t*e/255:255*(1-2*(1-t/255)*(1-e/255))})),eY.darken=eQ(eX(function(t,e){return t>e?e:t})),eY.lighten=eQ(eX(function(t,e){return t>e?t:e})),eY.dodge=eQ(eX(function(t,e){return 255===t?255:(t=e/255*255/(1-t/255))>255?255:t})),eY.burn=eQ(eX(function(t,e){return 255*(1-(1-e/255)/(t/255))}));for(var e0=o.type,e1=o.clip_rgb,e2=o.TWOPI,e5=Math.pow,e3=Math.sin,e6=Math.cos,e4=Math.floor,e9=Math.random,e8=Math.log,e7=Math.pow,it=Math.floor,ie=Math.abs,ii=function(t,e){void 0===e&&(e=null);var i={min:Number.MAX_VALUE,max:-1*Number.MAX_VALUE,sum:0,values:[],count:0};return"object"===s(t)&&(t=Object.values(t)),t.forEach(function(t){e&&"object"===s(t)&&(t=t[e]),null==t||isNaN(t)||(i.values.push(t),i.sum+=t,ti.max&&(i.max=t),i.count+=1)}),i.domain=[i.min,i.max],i.limits=function(t,e){return ir(i,t,e)},i},ir=function(t,e,i){void 0===e&&(e="equal"),void 0===i&&(i=7),"array"==s(t)&&(t=ii(t));var n=t.min,r=t.max,a=t.values.sort(function(t,e){return t-e});if(1===i)return[n,r];var o=[];if("c"===e.substr(0,1)&&(o.push(n),o.push(r)),"e"===e.substr(0,1)){o.push(n);for(var h=1;h 0");var l=Math.LOG10E*e8(n),u=Math.LOG10E*e8(r);o.push(n);for(var c=1;c200&&(b=!1)}for(var R={},B=0;B=360;)g-=360;a[f]=g}else a[f]=a[f]/o[f];return p/=n,new d(a,e).alpha(p>.99999?1:p,!0)},p.bezier=function(t){var e=eJ(t);return e.scale=function(){return eK(e)},e},p.blend=eY,p.cubehelix=function(t,e,i,n,r){void 0===t&&(t=300),void 0===e&&(e=-1.5),void 0===i&&(i=1),void 0===n&&(n=1),void 0===r&&(r=[0,1]);var s,a=0;"array"===e0(r)?s=r[1]-r[0]:(s=0,r=[r,r]);var o=function(o){var h=e2*((t+120)/360+e*o),l=e5(r[0]+s*o,n),u=(0!==a?i[0]+o*a:i)*l*(1-l)/2,c=e6(h),d=e3(h);return p(e1([255*(l+u*(-.14861*c+1.78277*d)),255*(l+u*(-.29227*c-.90649*d)),255*(l+1.97294*c*u),1]))};return o.start=function(e){return null==e?t:(t=e,o)},o.rotations=function(t){return null==t?e:(e=t,o)},o.gamma=function(t){return null==t?n:(n=t,o)},o.hue=function(t){return null==t?i:("array"===e0(i=t)?0==(a=i[1]-i[0])&&(i=i[1]):a=0,o)},o.lightness=function(t){return null==t?r:("array"===e0(t)?(r=t,s=t[1]-t[0]):(r=[t,t],s=0),o)},o.scale=function(){return p.scale(o)},o.hue(i),o},p.mix=p.interpolate=eO,p.random=function(){for(var t="#",e=0;e<6;e++)t+="0123456789abcdef".charAt(e4(16*e9()));return new d(t,"hex")},p.scale=eK,p.analyze=is.analyze,p.contrast=function(t,e){t=new d(t),e=new d(e);var i=t.luminance(),n=e.luminance();return i>n?(i+.05)/(n+.05):(n+.05)/(i+.05)},p.deltaE=function(t,e,i,n,r){void 0===i&&(i=1),void 0===n&&(n=1),void 0===r&&(r=1);var s=function(t){return 360*t/(2*im)},a=function(t){return 2*im*t/360};t=new d(t),e=new d(e);var o=Array.from(t.lab()),h=o[0],l=o[1],u=o[2],c=Array.from(e.lab()),p=c[0],f=c[1],g=c[2],m=(h+p)/2,_=(ia(io(l,2)+io(u,2))+ia(io(f,2)+io(g,2)))/2,v=.5*(1-ia(io(_,7)/(io(_,7)+io(25,7)))),y=l*(1+v),b=f*(1+v),x=ia(io(y,2)+io(u,2)),w=ia(io(b,2)+io(g,2)),k=(x+w)/2,C=s(iu(u,y)),S=s(iu(g,b)),I=C>=0?C:C+360,T=S>=0?S:S+360,E=ic(I-T)>180?(I+T+360)/2:(I+T)/2,A=1-.17*id(a(E-30))+.24*id(a(2*E))+.32*id(a(3*E+6))-.2*id(a(4*E-63)),P=T-I;P=180>=ic(P)?P:T<=I?P+360:P-360,P=2*ia(x*w)*ip(a(P)/2);var M=w-x,O=1+.015*io(m-50,2)/ia(20+io(m-50,2)),N=1+.045*k,L=1+.015*k*A,z=30*ig(-io((E-275)/25,2)),R=-(2*ia(io(k,7)/(io(k,7)+io(25,7))))*ip(2*a(z));return il(0,ih(100,ia(io((p-h)/(i*O),2)+io(M/(n*N),2)+io(P/(r*L),2)+M/(n*N)*R*(P/(r*L)))))},p.distance=function(t,e,i){void 0===i&&(i="lab"),t=new d(t),e=new d(e);var n=t.get(i),r=e.get(i),s=0;for(var a in n){var o=(n[a]||0)-(r[a]||0);s+=o*o}return Math.sqrt(s)},p.limits=is.limits,p.valid=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];try{return new(Function.prototype.bind.apply(d,[null].concat(t))),!0}catch(t){return!1}},p.scales={cool:function(){return eK([p.hsl(180,1,.9),p.hsl(250,.7,.4)])},hot:function(){return eK(["#000","#f00","#ff0","#fff"]).mode("rgb")}},p.colors=t5,p.brewer=i_,p}();var iP=u("hFpCu");const iM=window.location,iO=new URLSearchParams(iM.search),iN=new URL(iM),iL=new J({objectHash:iF});function iz(t){let e=window.atob((t+"===".slice((t.length+3)%4)).replace(/-/g,"+").replace(/_/g,"/"));return new TextDecoder().decode(iE.inflate(Uint8Array.from(e,t=>t.codePointAt(0))))}function iR(t){return window.btoa(String.fromCodePoint(...iE.deflate(new TextEncoder().encode(t)))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function iB(t){return t.charAt(0).toUpperCase()+t.slice(1)}function iD(...t){return t.findLast(t=>void 0!==t)}function iF(t,e){return"object"==typeof t&&"object"==typeof e?Object.keys(t).length===Object.keys(e).length&&Object.keys(t).every(i=>{let n=t[i],r=e[i];return Object.hasOwn(e,i)&&("function"==typeof n?.equals?n.equals(r):iF(n,r))}):t===e}function iV(t,e=null){document.dispatchEvent(new CustomEvent(t,{detail:e}))}function ij(t,e,i=0){return t&&e&&t.round().subtract(e.round()).length<=i}function iU(t){let e=document.createElement("span");return e.classList.add("beam"),e.style.backgroundColor=t,e.title=t,e}function iq(t){if(!t.length)return[];let e=a(iA).average(t).hex(),i=[];if(t.some(t=>t!==e)){let e=t.length-1;t.forEach((t,n)=>{if(i.push(iU(t)),ne.subtract(t).length-i.subtract(t).length}function iH(t,e){let i=document.createElement("span");return i.classList.add("icon","material-symbols-outlined"),i.textContent=t,i.title=e??iB(t),i}function iG(t,e,i=t=>t/2){let n=t.subtract(e);return n.length="function"==typeof i?i(n.length):i,t.subtract(n)}function iW(t,e,i){let n=new iP.Point(0,0);return n.length=e,n.angle=60*i$(i),t.add(n)}function iK(t){return t+(t>=3?-3:3)}function i$(t,e=!0){return(t+=(e?-1:1)*2)<0?t+6:t>5?t-6:t}function iJ(t){let e=document.createElement("span");return e.classList.add("text"),e.textContent=t.toString(),e}function iY(t){if(t)return t}window.base64decode=iz,window.base64encode=iR;const iQ=window.console=window.console||{debug:function(){}},iX=iQ.debug;function i0(t){iQ.debug=t?iX:function(){}}i0(iO.has("debug")??!1);var iP=(u("hFpCu"),u("hFpCu"));class i1{constructor(t,e){this.coordinates=[t,e],this.r=t,this.c=e}toString(){return this.coordinates.join(",")}static toAxialCoordinates(t){return new i2(t.c-(t.r-(1&t.r))/2,t.r)}}class i2{constructor(t,e,i){i||(i=-t-e),this.coordinates=[t,e,i],this.q=t,this.r=e,this.s=i}add(t){return i2.add(this,t)}equals(t){return this.q===t.q&&this.r===t.r&&this.s===t.s}isNeighbor(t){return i2.isNeighbor(this,t)}neighbor(t){return i2.neighbor(this,t)}toString(){return this.coordinates.join(",")}static add(t,e){return new i2(t.q+e.q,t.r+e.r)}static direction(t){return 0===t&&(t=6),i2.directions[6-t]}static directions=[new i2(1,0),new i2(1,-1),new i2(0,-1),new i2(-1,0),new i2(-1,1),new i2(0,1)];static isNeighbor(t,e){return i2.directions.map(e=>i2.add(t,e)).some(t=>t.equals(e))}static neighbor(t,e){return i2.add(t,i2.direction(e))}static toOffsetCoordinates(t){return new i1(t.q+(t.r-(1&t.r))/2,t.r)}}var iP=(u("hFpCu"),u("hFpCu"));class i5{#t={};constructor(t){this.setState(t)}getState(){return structuredClone(this.#t)}setState(t){this.#t=structuredClone(t)}updateState(t,e=!0){return t(this.#t),e&&iV(i5.Events.Update,{object:this}),this.getState()}static Events=Object.freeze({Update:"state-update"})}class i3 extends i5{center;data;group;id=i3.uniqueId++;locked;parent;sortOrder=100;type;constructor(t,e,i){super(e),this.type=e?.type||i?.type,this.data=Object.assign({id:this.id,type:this.type},i?.data||{}),this.locked=i?.locked!==!1,t&&(this.center=t.center),this.parent=t,this.group=new iP.Group({data:this.data,locked:this.locked})}equals(t){return t instanceof i3&&this.id===t.id}getColorElements(){return[]}getCompoundPath(){return new iP.CompoundPath({children:this.group.clone({insert:!1}).children.filter(t=>!1!==t.data.collidable)})}getIndex(){return this.group.index}getLayer(){return this.group.parent}onTap(){}onCollision({collisionStep:t}){return t}onDeselected(){}onInitialization(){}onSelected(){}remove(){this.group.remove()}toString(){return`[${this.type}:${this.id}]`}update(){}static Types=Object.freeze(Object.fromEntries(["beam","collision","filter","mask","portal","reflector","terminus","tile","wall"].map(t=>[t,iB(t)])));static uniqueId=0}var iP=u("hFpCu");class i6{#e=[];#i={element:document};constructor(t={}){this.#i=Object.assign(this.#i,t)}add(t,e={}){this.#e=this.#e.concat(t.map(t=>{if(!(t=Object.assign({},this.#i,e,t)).type)throw Error("Event type is required");return t.context&&(t.handler=t.handler.bind(t.context)),t.element.addEventListener(t.type,t.handler,t.options),t}))}remove(){this.#e.forEach(t=>t.element.removeEventListener(t.type,t.handler)),this.#e=[]}}var iP=u("hFpCu");class i4{#n={};#r;#s;constructor(t=[]){this.#s=t,this.#r=0!==t.length,t.forEach(t=>{this.#n[t]=new i4})}set(t,e){if(this.#r&&!this.#s.includes(t))throw Error(`Invalid key: ${t}`);this.#n[t]=e}get(t){return void 0===t?this.#n:this.#n[t]}keys(t){return Object.keys(this.#a(t))}length(t){return this.keys(t).length}unset(t){delete this.#n[t]}values(t){return Object.values(this.#a(t))}#a(t){let e=this.get(t);return e instanceof i4?e.get():e}}class i9{#o;#n=new i4(Object.values(i9.CacheKeys));#h;#l=new i6({context:this});#u;constructor(t){this.#o=t.getBoundingClientRect(),this.#h=t,this.#u=new iP.Point(this.#o.left,this.#o.top),this.#l.add([{type:"pointercancel",handler:this.onPointerUp},{type:"pointerdown",handler:this.onPointerDown},{type:"pointerleave",handler:this.onPointerUp},{type:"pointermove",handler:this.onPointerMove},{type:"pointerout",handler:this.onPointerUp},{type:"pointerup",handler:this.onPointerUp},{type:"wheel",handler:this.onMouseWheel,options:{passive:!1}}],{element:t})}onMouseWheel(t){t.preventDefault(),this.#c(new iP.Point(t.offsetX,t.offsetY),t.deltaY,1.05)}onPan(t){let e=a(iP).view.viewToProject(i9.point(t)),i=this.#d(i9.GestureKeys.Pan);if(!i){this.#p(i9.GestureKeys.Pan,{from:e});return}let n=i.from.subtract(e).add(a(iP).view.center);a(iP).view.center.subtract(n).length>1&&(document.body.classList.contains("grab")||document.body.classList.add("grab"),a(iP).view.center=n)}onPinch(t){let e=t[0],i=t[1],n=i9.point(e),r=i9.point(i),s=n.getDistance(r),a=this.#d(i9.GestureKeys.Pinch);if(!a){this.#p(i9.GestureKeys.Pinch,{distance:s});return}let o=n.add(r).divide(2).subtract(this.#u),h=s/a.distance,l=(a.distance-s)*h;this.#c(o,l,1.01),a.distance=s}onPointerDown(t){this.#n.get(i9.CacheKeys.Down).set(t.pointerId,t)}onPointerMove(t){let e=this.#n.get(i9.CacheKeys.Down).get(t.pointerId);if(e&&i9.point(t).subtract(i9.point(e)).length>1){this.#n.get(i9.CacheKeys.Move).set(t.pointerId,t);let e=this.#n.get(i9.CacheKeys.Move).values();2===e.length?this.onPinch(e):this.onPan(t)}}onPointerUp(t){let e=this.#n.get(i9.CacheKeys.Down).get(t.pointerId);e&&(1!==this.#n.length(i9.CacheKeys.Down)||this.#n.get(i9.CacheKeys.Move).get(t.pointerId)||this.onTap(e),document.body.classList.remove("grab"),this.#n.get(i9.CacheKeys.Down).unset(t.pointerId),this.#n.get(i9.CacheKeys.Move).unset(t.pointerId),this.#n.get(i9.CacheKeys.Gesture).unset(i9.GestureKeys.Pan),2>this.#n.length(i9.CacheKeys.Move)&&this.#n.get(i9.CacheKeys.Gesture).unset(i9.GestureKeys.Pinch))}onTap(t){let e=a(iP).view.viewToProject(i9.point(t).subtract(this.#u));this.#h.dispatchEvent(new CustomEvent(i9.GestureKeys.Tap,{detail:{event:t,point:e}}))}#d(t){return this.#n.get(i9.CacheKeys.Gesture).get(t)}#p(t,e){this.#n.get(i9.CacheKeys.Gesture).set(t,e)}#c(t,e,i){let n=Math.max(Math.min(e<0?a(iP).view.zoom*i:a(iP).view.zoom/i,i9.maxZoom),i9.minZoom),r=a(iP).view.viewToProject(t),s=r.subtract(a(iP).view.center),o=r.subtract(s.multiply(a(iP).view.zoom/n)).subtract(a(iP).view.center);a(iP).view.zoom=n,a(iP).view.center=a(iP).view.center.add(o)}static point(t){return new iP.Point(t.clientX,t.clientY)}static CacheKeys=Object.freeze({Down:"down",Move:"move",Gesture:"gesture"});static GestureKeys=Object.freeze({Pan:"pan",Pinch:"pinch",Tap:"tap"});static maxZoom=2;static minZoom=.5;static vibratePattern=25}const i8=document.getElementById("modifiers-immutable"),i7=document.getElementById("modifiers-mutable"),nt=window.navigator;let ne=0;class ni extends i5{#f;#g=!1;#l=new i6({context:this});#m;#_=500;#v;configuration;element;disabled=!1;id=ne++;immutable=!1;name;selected=!1;tile;title;type;constructor(t,e){super(e),this.tile=t,this.type=e.type}attach(){let t=this.#f=document.createElement("li");t.classList.add(["modifier",this.type.toLowerCase()].join("-")),this.immutable&&(this.disabled=!0);let e=this.element=document.createElement("span");e.classList.add("material-symbols-outlined","fill"),t.append(e),this.update(),this.#l.add([{type:"deselected",handler:this.onDeselected},{type:"pointerdown",handler:this.onPointerDown},{type:"pointerleave",handler:this.onPointerUp},{type:"pointerup",handler:this.onPointerUp}],{element:t}),this.immutable?i8.append(t):i7.append(t)}detach(){this.#f&&(ni.deselect(),this.#l.remove(),this.#f.remove(),this.selected=!1,this.element=void 0,this.#f=void 0)}dispatchEvent(t,e){iV(t,Object.assign({},e||{},{modifier:this,tile:this.tile}))}equals(t){return t instanceof ni&&this.id===t.id}move(t){this.remove(),t.addModifier(this),this.tile=t}moveFilter(t){return t.modifiers.some(t=>t.type===ni.Types.immutable)}onDeselected(){this.update({selected:!1}),this.tile.afterModify(),this.dispatchEvent(ni.Events.Deselected)}onPointerDown(t){0!==t.button?this.onToggle(t):(this.#g=!0,this.#m||this.tile.modifiers.some(t=>[ni.Types.immutable,ni.Types.lock].includes(t.type))||(this.#v=setTimeout(this.onSelected.bind(this),this.#_)))}onPointerUp(t){if(clearTimeout(this.#v),this.#g&&!this.disabled&&!this.selected)switch(t.type){case"pointerleave":this.onToggle(t);break;case"pointerup":this.onTap(t)}this.#g=!1}onSelected(){ni.deselect(),nt.vibrate(i9.vibratePattern),this.update({selected:!0});let t=this.#m=new nD.Mask({id:this.toString(),onMask:()=>this.tile.beforeModify(),onTap:this.#y.bind(this),tileFilter:this.#b.bind(this)});this.dispatchEvent(nD.Events.Mask,{mask:t})}onTap(){this.selected=!1}onToggle(){nt.vibrate(i9.vibratePattern)}remove(){this.detach(),this.tile.removeModifier(this),this.tile=null}toString(){return[this.name,this.id].join(":")}update(t){t=Object.assign({disabled:this.disabled,selected:this.selected,name:this.name,title:this.title},t||{}),this.immutable||(this.disabled=t.disabled),this.name=t.name,this.title=t.title,this.selected=t.selected,this.#f&&(this.#f.classList.toggle("disabled",this.disabled),this.#f.classList.toggle("selected",this.selected),this.element.textContent=this.name,this.element.title=this.title)}#y(t,e){if(e&&e!==this.tile){let i=this.tile;this.move(e),t.updateState(),t.updateSelectedTile(e),t.unmask(),this.dispatchEvent(ni.Events.Moved,{fromTile:i})}else ni.deselect(),t.unmask();this.#m=void 0,this.update({selected:!1})}#b(t){return!t.equals(this.tile)&&this.moveFilter(t)}static deselect(){let t=document.querySelector(".modifiers .selected");t&&t.dispatchEvent(new CustomEvent("deselected"))}static immutable(t){return t.type===ni.Types.immutable}static Events=Object.freeze({Deselected:"modifier-deselected",Invoked:"modifier-invoked",Moved:"modifier-moved"});static Types=Object.freeze(Object.fromEntries(["immutable","lock","move","rotate","swap","toggle"].map(t=>[t,iB(t)])))}class nn extends ni{#m;name="drag_pan";title="Move";onTap(t){super.onTap(t);let e=this.tile.items.filter(nn.movable);if(this.#m||!e.length)return;let i=new nD.Mask({id:this.toString(),onTap:this.#y.bind(this),onMask:()=>this.tile.beforeModify(),onUnmask:()=>this.tile.afterModify(),tileFilter:this.tileFilter.bind(this)});this.#m=i,iV(nD.Events.Mask,{mask:i})}moveFilter(t){return super.moveFilter(t)||!t.items.some(t=>t.movable)}moveItems(t){let e=this.tile.items.filter(nn.movable);return e.forEach(e=>e.move(t)),{moved:[nn.data(this.tile,t,e)],tiles:[this.tile,t]}}tileFilter(t){return t.modifiers.some(ni.immutable)||t.items.filter(t=>t.type!==i3.Types.beam).length>0&&t!==this.tile}#y(t,e){if(e){let i=this.moveItems(e);t.updateState(),t.updateSelectedTile(e),t.unmask(),this.dispatchEvent(ni.Events.Invoked,i)}else t.unmask();this.#m=void 0}static data(t,e,i){return{fromTile:t,toTile:e,items:i}}static movable(t){return t.movable}}const nr=t=>class extends t{movable;constructor(t,e){super(...arguments),this.movable=!1!==e.movable}move(t){this.parent.removeItem(this);let e=this.parent.center.subtract(t.center);this.group.position=this.group.position.subtract(e),this.parent=t,this.parent.addItem(this),this.center=this.parent.center,this.onMove()}onMove(){}};class ns{color;colors;connected;direction;done;insertAbove;onAdd;onRemove;point;pathIndex;segmentIndex;state;tile;constructor(t,e,i,n,r,s,o,h,l,u,c,d,p){if(c&&!(c instanceof na))throw Error("Step.state must be instance of StepState");this.colors=i?Array.isArray(i)?Array.from(i):[i]:[],this.colors.length&&(this.color=a(iA).average(this.colors).hex()),this.connected=h??!0,this.direction=n,this.done=u??!1,this.index=t,this.insertAbove=l,this.onAdd=d??iY,this.onRemove=p??iY,this.point=r,this.pathIndex=s,this.segmentIndex=o,this.state=c??new na,this.tile=e}copy(t){return new ns(t.index??this.index,t.tile??this.tile,t.colors??t.color??this.colors,t.direction??this.direction,t.point??this.point,t.pathIndex??this.pathIndex,t.segmentIndex??this.segmentIndex,t.connected??this.connected,t.insertAbove??this.insertAbove,t.done??this.done,t.state??new na(this.state),t.onAdd??this.onAdd,t.onRemove??this.onRemove)}equals(t){return iF(this,t)}}class na{#n={};constructor(){let t=Object.assign({},...arguments);Object.keys(t).forEach(e=>{this[e]=t[e]})}copy(...t){return new na(...[this].concat(t))}get(t){return this.#s(t).map(t=>this[t]).find(t=>t)}has(t){return this.#s(t).some(t=>this[t])}#s(t){return this.#n[t.name]??=Object.keys(Reflect.construct(t,[]))}static Collision=class{collision;constructor(t){this.collision=t}};static Filter=class{filter={}};static MergeInto=class{mergeInto;constructor(t){this.mergeInto={beam:t}}};static MergeWith=class{mergeWith;constructor(t){this.mergeWith=t}};static Portal=class{portal;constructor(t,e){this.portal={entryPortal:t,exitPortal:e}}};static Reflector=class{reflector;constructor(t){this.reflector={item:t}}};static TerminusConnection=class{terminusConnection;constructor(t,e){this.terminusConnection={terminus:t,opening:e}}}}class no extends nr(i3){constructor(t,{color:e}){super(...arguments),this.color=a(iA).average(Array.isArray(e)?e:[e]).hex();let i=new iP.Color(e);i.alpha=.25;let n=new iP.Path.RegularPolygon({center:t.center,closed:!0,radius:t.parameters.circumradius/3,sides:3,style:{fillColor:i,strokeColor:e,strokeWidth:2}});this.group.addChild(n)}getColorElements(){return[iU(this.color)]}onCollision({currentStep:t,nextStep:e}){return e.copy(t.state.has(na.Filter)?{colors:e.colors.concat([this.color])}:{state:new na({insertAbove:this},new na.Filter)})}}var iP=u("hFpCu");class nh extends ni{clockwise;title="Rotate";constructor(t,e,i={}){super(...arguments),this.clockwise=iD(!0,e.clockwise,i.clockwise),this.name=nh.Names[this.clockwise?"right":"left"]}moveFilter(t){return super.moveFilter(t)||!t.items.some(t=>t.rotatable)}onTap(t){super.onTap(t);let e=this.tile.items.filter(t=>t.rotatable);e.forEach(t=>t.rotate(this.clockwise)),this.dispatchEvent(ni.Events.Invoked,{items:e})}onToggle(){super.onToggle(),this.clockwise=!this.clockwise,this.updateState(t=>{t.clockwise=this.clockwise}),this.update({name:nh.Names[this.clockwise?"right":"left"]})}static Names=Object.freeze({left:"rotate_left",right:"rotate_right "})}const nl=t=>class extends t{direction;rotatable;rotation=0;rotationDegrees;constructor(t,e,i={}){super(...arguments),this.direction=iD(e.direction,i.direction),this.rotatable=iD(!0,e.rotatable,i.rotatable),this.rotationDegrees=iD(60,e.rotationDegrees,i.rotationDegrees),this.rotation=iD(0,e.rotation,i.rotation)%this.getMaxRotation()}getDirection(t){return void 0===(t=t??this.direction)?t:(t+this.rotation+6)%6}getMaxRotation(){return 360/this.rotationDegrees}onInitialization(){super.onInitialization(),this.rotateGroup(this.rotation),void 0!==this.direction&&this.rotateGroup(this.direction)}rotateGroup(t){this.rotatable&&this.group.rotate(t*this.rotationDegrees,this.center)}rotate(t){let e=!1===t?-1:1;this.rotation=(e+this.rotation)%this.getMaxRotation(),this.updateState(t=>{t.rotation=this.rotation}),this.rotateGroup(e)}};class nu extends nr(nl(i3)){#x={};constructor(t,e){super(t,e,{rotatable:void 0!==e.direction}),this.direction=e.direction;let i=t.parameters.circumradius/3,n=t.parameters.circumradius/5,r={fillColor:"black",strokeColor:"white",strokeWidth:2},s=[],a=new iP.Path.Ellipse({center:t.center,radius:[n,i],style:r});s.push(a);let o=new iP.Path.Ellipse({center:t.center,radius:[n-2*r.strokeWidth,i-2*r.strokeWidth],style:r});if(s.push(o),this.rotatable){let e=new(0,iP.Path)({closed:!0,opacity:.25,segments:[t.center.add(new iP.Point(0,i)),t.center.subtract(new iP.Point(0,i)),t.center.subtract(new iP.Point(2.5*n,0))],style:{fillColor:"black"}}).subtract(a);s.unshift(e)}this.group.addChildren(s),this.rotatable&&this.rotateGroup(1)}get(t){return this.#x[t]}onCollision({beam:t,currentStep:e,nextStep:i,puzzle:n}){let r=e.state.get(na.Portal);if(r){if(r.exitPortal===this)return i.copy({insertAbove:this})}else{let t=i.index,e=iK(i.direction);if(iD(this.get(e),{stepIndex:t}).stepIndexthis.update(e,{stepIndex:t}),onRemove:()=>this.update(e),state:i.state.copy(new na.Portal(this))})}let s=[this.id,i.index].join(":"),a=t.getState().moves?.[s],o=n.getItems().filter(t=>t.type===i3.Types.portal&&!t.equals(this)&&!t.get(nu.getExitDirection(i,r.entryPortal,t))&&(void 0===a||t.id===a)&&(void 0===this.getDirection()||void 0===t.getDirection()||t.getDirection()===this.getDirection()));if(0===o.length)return console.debug(this.toString(),"no valid destinations found"),e;if(1===o.length)return this.#w(t,o[0],i,r);{let a=o.map(t=>t.parent),h=new nD.Mask({beam:t,id:s,onMask:()=>e.tile.beforeModify(),onTap:(e,n)=>{let a=o.find(t=>t.parent===n);a&&(t.addStep(this.#w(t,a,i,r)),t.updateState(t=>{t.moves||(t.moves={}),t.moves[s]=a.id}),e.unmask())},onUnmask:()=>e.tile.afterModify(),tileFilter:t=>!(this.parent===t||a.some(e=>e===t))});return n.updateSelectedTile(e.tile),n.mask(h),e}}update(t,e){this.#x[t]=e}#w(t,e,i,n){let r=nu.getExitDirection(i,n.entryPortal,e),s=i.index;return i.copy({connected:!1,direction:r,insertAbove:e,onAdd:()=>e.update(r,{stepIndex:s}),onRemove:()=>e.update(r),point:e.parent.center,state:i.state.copy(new na.Portal(n.entryPortal,e)),tile:e.parent})}static getExitDirection(t,e,i){return i.getDirection()??e.getDirection()??t.direction}}var iP=u("hFpCu");class nc extends ni{on;title="Toggle";constructor(t,{on:e}){super(...arguments),this.on=e||!1,this.tile.items.forEach(t=>{t.toggled=this.on})}attach(){this.name=nc.Names[this.on?"on":"off"],super.attach()}moveFilter(t){return super.moveFilter(t)||!t.items.some(t=>t.toggleable)}onTap(t){super.onTap(t),this.on=!this.on;let e=this.tile.items.filter(t=>t.toggleable);e.forEach(t=>t.toggle(this.on)),this.update({name:nc.Names[this.on?"on":"off"]}),this.dispatchEvent(ni.Events.Invoked,{items:e})}static Names=Object.freeze({on:"toggle_on",off:"toggle_off "})}const nd=t=>class extends t{toggleable;toggled;constructor(t,e){super(...arguments),this.toggleable=!1!==e.toggleable}onToggle(){}toggle(t){this.toggled=t,this.onToggle()}};var iP=u("hFpCu");class np{constructor(t,e,i,n){let r=[i];void 0!==n&&r.push(n),this.beam=i,this.index=t,this.item=n,this.itemIds=r.map(t=>t.id),this.items=r,this.point=e[0],this.points=e,this.withSelf=i.equals(n)}copy(t){return new np(t.index??this.index,t.points??this.points,t.beam??this.beam,t.item??this.item)}equals(t){return t&&t.point.equals(this.point)&&t.items.every(t=>this.has(t))}has(t){return this.itemIds.includes(t.id)}mirror(){return this.copy({beam:this.item,item:this.beam})}}class nf{constructor(t,e,i){this.beams=[t].concat(e.state.get(na.MergeWith)?.beams||[]),this.colors=e.colors.concat(t.getColors()),this.stepIndex=i}}class ng extends i3{done=!1;path=[];sortOrder=3;#n=new i4(Object.values(ng.CacheKeys));#k;#C;#S=-1;#I=[];constructor(t,e,i){super(...arguments),this.group=null,this.#k=i.direction,this.#C={closed:!1,data:{id:this.id,type:this.type},locked:!0,strokeJoin:"round",strokeCap:"round",strokeWidth:t.radius/12}}addStep(t){let e=this.getLastStepIndex();if(this.done=!1,this.#C.strokeColor=t.color,0===this.path.length){let t=new iP.Path(this.#C);this.path.push(t),this.getLayer().insertChild(0,t)}let i=this.path[this.path.length-1],n=this.#I[e];if(!t.connected||n&&(t.color!==n.color||t.insertAbove!==n.insertAbove)){console.debug(this.toString(),"adding new path item for step:",t,"previous step:",n);let e=new iP.Path(this.#C),i=[t.point];t.connected&&i.unshift(n.point),e.add(...i),this.path.push(e),this.getLayer().insertChild(this.#T(t),e),t.segmentIndex=0}else i.add(t.point),t.segmentIndex=i.segments.length-1;return t.pathIndex=this.path.length-1,this.#I.push(t),t.index=this.#S=this.#I.length-1,t.tile.items.some(t=>t.equals(this))||t.tile.addItem(this),t.onAdd(t),console.debug(this.toString(),"added step",t),this.#E(this.#S),t}getCollision(){return this.getStep()?.state.get(na.Collision)}getColor(){return this.getStep()?.color||this.getOpening().color}getColors(){return Array.from(this.getStep()?.colors||this.getOpening().colors)}getColorElements(t){let e=this.getSteps(t).find(t=>t.state.has(na.MergeWith));return e?iq(e.color):[]}getCompoundPath(){return new iP.CompoundPath({children:this.path.map(t=>t.clone({insert:!1}))})}getIndex(){return this.path[this.path.length-1].index}getLastStepIndex(){return this.length()-1}getLayer(){return this.parent.getLayer()}getMergeWith(t){return this.#n.get(ng.CacheKeys.MergeWith).get(t.id)}getOpening(){return this.parent.getOpening(this.#k)}getState(){return this.parent.getState().openings[this.#k]}getStep(t){return this.#I[t||this.getLastStepIndex()]}getSteps(t){return t?this.#I.filter(e=>e.tile===t):this.#I}isComplete(){return this.isOn()&&this.done}isConnected(){let t=this.getStep();return t?.state.has(na.TerminusConnection)||t?.state.get(na.MergeInto)?.beam.isConnected()}isOn(){let t=this.getOpening();return t.on&&!t.connected}isPending(){return this.isOn()&&!this.done}length(){return this.#I.length}onBeamUpdated(t){let e=t.detail.beam;if(e.isPending())return;let i=e.getStep();if(this.isComplete()){let t=this.getStep(),n=t.state.get(na.Collision);if(n?.has(e)&&!n.equals(i?.state.get(na.Collision))){console.debug(this.toString(),"re-evaluating collision with",e.toString()),this.done=!1,this.#S=Math.max(t.index-1,0);return}let r=t.state.get(na.MergeInto);if(r?.beam.equals(e)&&!e.getMergeWith(this)){console.debug(this.toString(),"re-evaluating merge into",e.toString()),this.done=!1,this.#S=Math.max(this.#S-1,0);return}}let n=this.getMergeWith(e);n&&!i?.state.get(na.MergeInto)?.beam.equals(this)&&(console.debug(this.toString(),"re-evaluating merge with",e.toString()),this.done=!1,this.#S=Math.max(n.stepIndex-1,0))}onCollision({beam:t,collision:e,collisionStep:i,currentStep:n,nextStep:r,puzzle:s}){let a=t.equals(this);if(console.debug(this.toString(),"evaluating collision with",a?"self":t.toString()),!t.isOn()){console.debug(this.toString(),"ignoring collision with inactive beam",t.toString());return}if(t.parent.equals(this.parent)&&0===n.index){console.debug(this.toString(),"ignoring collision with sibling beam",t.toString());return}if(a&&this.#Sij(e.point,t.point));if(o<0)throw Error(`Could not find matching step for beam collision between ${this.toString()} and ${t.toString()}`);let h=this.#I[o];if(h.state.get(na.MergeInto)?.beam.equals(t)){console.debug(this.toString(),"ignoring collision with merged beam",t.toString());return}if(h.state.get(na.TerminusConnection)?.terminus.equals(t.parent)){console.debug(this.toString(),"ignoring collision with connected beam in parent terminus",t.toString());return}let l=h.state.get(na.Reflector)??n.state.get(na.Reflector);if(l){let e=iW(h.point,1,iK(h.direction)),i=iW(n.point,1,iK(n.direction));if(!l.item.isSameSide(e,i)){console.debug(this.toString(),"ignoring collision with beam on opposite side of reflector",t.toString());return}}let u=h.direction===r.direction;if(n.state.get(na.Portal)?.exitPortal&&!u){console.debug(this.toString(),"ignoring collision with beam using same portal with different exit direction",t.toString());return}if(!u||a)return console.debug(t.toString(),"has collided with",a?"self":this.toString(),e),a?u||this.update(o,s.getBeamsUpdateDelay()):this.update(o,{done:!0,state:h.state.copy(new na.Collision(e.mirror()))}),i.copy({done:!0,insertAbove:h.insertAbove});console.debug(this.toString(),"merging with",t.toString()),this.#A(o);let c=new nf(t,h,o);return this.addStep(h.copy({colors:c.colors,onAdd:()=>{this.#n.get(ng.CacheKeys.MergeWith).set(t.id,c)},onRemove:()=>{this.#n.get(ng.CacheKeys.MergeWith).unset(t.id)},state:h.state.copy(new na.MergeWith(c))})),console.debug(t.toString(),"merging into",this.toString()),r.copy({done:!0,point:n.point,state:r.state.copy(new na.MergeInto(this))})}onModifierInvoked(t){if(!this.isOn()){this.#I.length&&(console.debug(this.toString(),"beam has been toggled off"),this.updateState(t=>{delete t.moves}),this.remove());return}let e=t.detail.tiles||[t.detail.tile],i=this.#I.findIndex(t=>e.some(e=>e.equals(t.tile)));if(i>=0){console.debug(this.toString(),"re-evaluating due to modifier being invoked in matching tile",i),this.done=!1,this.#S=Math.max(i-1,0);return}if(this.isComplete()){let t=this.getStep();t.state.get(na.Portal)?.entryPortal&&(this.done=!1)}}remove(t=0){this.#A(t)}selected(t=!0){this.path.forEach(e=>{e.selected=t})}startDirection(){return(this.getOpening().direction+this.parent.rotation)%6}step(t){let e;if(!this.isPending())return;if(console.debug(this.toString(),"currentStepIndex",this.#S),0===this.#I.length){let t=this.parent.parent;this.addStep(new ns(0,t,this.getColor(),this.startDirection(),t.center))}let i=this.#S,n=this.#I[i],r=0===i?this.startDirection():n.direction,s=iW(n.point,n.tile.parameters.inradius,r),a=t.getTile(iG(n.point,s));if(!a){console.debug(this.toString(),"stopping due to out of bounds");let t=new np(0,[n.point],this);return this.updateStep(i,{done:!0,state:new na(new na.Collision(t))})}let o=i+1,h=this.#I[o],l=this.path.length-1,u=this.path[l].segments.length-1,c=new ns(o,a,n.color,r,s,h?.pathIndex||l,h?.segmentIndex||u),d=function(t,e){let i=t.map(t=>t[e]);return t.filter((t,n)=>!i.includes(t[e],n+1))}(a.items.concat(n.tile.equals(c.tile)?[]:n.tile.items),"id");console.debug(this.toString(),"collision items:",d);let p=this.#P(d,n,c,t).map((t,e)=>new np(e,t.points,this,t.item));p.length&&console.debug(this.toString(),"collisions:",p);for(let i=0;it(e.openings[this.#k]),e)}updateStep(t,e){let i=this.getStep(t);if(i){let n=this.#O(i,e);return this.#I[t]=n,n.onAdd(n),console.debug(this.toString(),"updated step at index",t,"from",i,"to",n),this.#E(t),n}}#P(t,e,i,n){let r=[e.point,i.point],s=new iP.Path({segments:r}),a=r[0];return t.map(t=>{let e=[],i=s.getIntersections(t.getCompoundPath(),e=>!(t===this&&e.point.equals(a)));return e.push(...new Set(i.map(t=>t.point))),e.length||t.type!==i3.Types.beam||t===this||e.push(...t.getSteps().map(t=>t.point).filter(t=>r.some(e=>ij(t,e)))),e.sort(iZ(a)),n.debug&&(n.drawDebugPoint(a),e.forEach(t=>n.drawDebugPoint(t,{fillColor:"black"}))),{points:e,item:t}}).filter(t=>t.points.length).sort((t,e)=>{let i=iZ(a)(t.points[0],e.points[0]);return 0===i?t.item.sortOrder-e.item.sortOrder:i})}#T(t){return t.insertAbove?t.insertAbove.getIndex()+1:0}#O(t,e){return"function"==typeof e&&(e=e(t)),e instanceof ns?e:t.copy(e)}#M(t,e){if(tt.remove());let r=this.#I.splice(t);console.debug(this.toString(),"removed steps: ",r),[...new Set(r.map(t=>t.tile))].filter(t=>0===this.getSteps(t).length).forEach(t=>t.removeItem(this)),r.forEach(t=>t.onRemove(t)),this.done=!1,this.#S=t-1,this.#E(this.#S)}return i}static CacheKeys=Object.freeze({MergeWith:"mergeWith"});static Events=Object.freeze({Collision:"beam-collision",Connection:"beam-connection",Merge:"beam-merge",Update:"beam-update"})}class nm extends nr(nl(nd(i3))){sortOrder=2;#N;constructor(t,e){super(...arguments);let i=e.openings.filter(t=>t?.color).flatMap(t=>Array.isArray(t.color)?t.color:[t.color]),n=a(iA).average(i.length?i:Array.isArray(e.color)?e.color:[e.color]).hex(),r=e.openings.map((t,e)=>t?new nm.#L(t.color||n,e,t.connected,t.on):t).filter(t=>t);this.#N=nm.ui(t,n,r),this.group.addChildren([...this.#N.openings,this.#N.terminus]),this.color=n,this.openings=r,this.radius=this.#N.radius,this.beams=r.map(t=>new ng(this,e.openings[t.direction],t)),this.update()}getColorElements(){return iq(this.openings.map(t=>t.color))}getOpening(t){return this.openings.find(e=>e.direction===t)}onMove(){this.beams.forEach(t=>t.remove())}onCollision({beam:t,collisionStep:e,currentStep:i,existingNextStep:n,nextStep:r}){if(console.debug(this.toString(),"collision",t.toString()),t.parent===this&&t.startDirection()===r.direction){console.debug(t.toString(),"ignoring starting terminus collision");return}let s=iK(i.direction),a=this.openings.find(t=>this.getDirection(t.direction)===s);return a&&a.color===r.color&&(!a.on||a.connected&&n?.state.get(na.TerminusConnection)?.terminus.equals(this))?(console.debug(t.toString(),"terminus connection",this.toString(),a),r.copy({done:!0,onAdd:()=>{r.onAdd(),this.onConnection(a.direction)},onRemove:()=>{r.onRemove(),this.onDisconnection(a.direction)},state:r.state.copy(new na.TerminusConnection(this,a))})):e}onConnection(t){let e=this.getOpening(t);e.connected||(e.connect(),this.update(),iV(nm.Events.Connection,{terminus:this,opening:e}))}onDisconnection(t){let e=this.getOpening(t);e.connected&&(e.disconnect(),this.update(),iV(nm.Events.Disconnection,{terminus:this,opening:e}))}onToggle(){this.updateState(t=>{this.openings.filter(t=>!t.connected).forEach(e=>{e.toggle(),t.openings[e.direction].on=e.on})}),this.update()}update(){this.beams.forEach(t=>{let e=t.getOpening();this.#N.openings.find(t=>t.data.direction===e.direction).opacity=e.on?1:nm.#z})}static #z=.3;static ui(t,e,i){let n=t.parameters.circumradius/2,r=new iP.Path.RegularPolygon({center:t.center,fillColor:e,opacity:1,sides:6,radius:n/2});return{openings:i.map(t=>{let e=t.direction,i=r.segments[(e+-1+6)%6].point,n=r.segments[(e+2+6)%6].point,s=n.subtract(i);s.angle+=120;let a=i.subtract(s);return new iP.Path({closed:!0,data:{collidable:!1,direction:e},fillColor:t.color,opacity:t.on?1:nm.#z,segments:[i,n,a]})}),radius:n,terminus:r}}static #L=class{constructor(t,e,i,n){this.colors=Array.isArray(t)?t:[t],this.color=a(iA).average(this.colors).hex(),this.direction=e,this.connected=!0===i,this.on=!0===n}connect(){this.connected=this.on=!0}disconnect(){this.connected=this.on=!1}toggle(){this.on=!this.on}};static Events=Object.freeze({Connection:"terminus-connection",Disconnection:"terminus-disconnection"})}var iP=u("hFpCu");class n_ extends nr(nl(i3)){#R;constructor(t,e){super(t,e,{rotationDegrees:30}),this.color=e.color||"black",this.#R=n_.item(t,this.color),this.group.addChild(this.#R)}midLine(){return[iG(this.#R.segments[3].point,this.#R.segments[0].point),iG(this.#R.segments[1].point,this.#R.segments[2].point)]}getSide(t){return function(t,e){let[i,n]=t;return Math.sign((n.x-i.x)*(e.y-i.y)-(n.y-i.y)*(e.x-i.x))}(this.midLine(),t)}isSameSide(t,e){return this.getSide(t)===this.getSide(e)}onCollision({beam:t,collision:e,collisions:i,collisionStep:n,currentStep:r,nextStep:s}){let a=iK(r.direction),o=function(t,e){let i=60*i$(t,!0);return i$(function(t,e){let i=t+e;return i<0?360+i:i>360?i-360:i}(i,(30*e-i)*2)/60%6,!1)}(a,this.rotation);if(o===r.direction)return console.debug(t.toString(),"stopping due to collision with non-reflective side of reflector"),n;if(o===a){if(console.debug(t.toString(),"stopping due to reflection back at self"),i.some(t=>t.item.type===i3.Types.beam))return;return s.copy({done:!0,state:s.state.copy(new na.Collision(e.copy({points:[s.point]})))})}if(!r.state.has(na.Reflector))return s.copy({state:s.state.copy(new na.Reflector(this))});let h=iW(r.point,s.tile.parameters.inradius,o);return s.copy({direction:o,point:h})}static item(t,e){let i=t.parameters.circumradius,n=t.parameters.circumradius/12,r=t.center.subtract(new iP.Point(n/2,i/2)),s=new iP.Size(n,i);return new iP.Path.Rectangle({data:{size:s},fillColor:e,point:r,size:s})}}var iP=u("hFpCu");class nv extends nr(nl(i3)){sortOrder=1;constructor(t,e){super(t,e,{rotationDegrees:60});let i=nv.item(t,e);this.group.addChildren(i)}static item(t,e){let i=t.parameters.circumradius/12,n=t.styles.default.strokeColor;return e.directions.map(e=>{let r=t.hexagon.segments[e].point,s=(e+1+6)%6,a=t.hexagon.segments[s].point;return new iP.Path({closed:!0,fillColor:n,segments:[r,t.hexagon.getLocationAt((0===e?t.hexagon.length:t.hexagon.getOffsetOf(r))-i),t.hexagon.getLocationAt((0===s?0:t.hexagon.getOffsetOf(a))+i),a]})})}}class ny extends ni{immutable=!0;name="block";title="Immutable"}class nb extends ni{immutable=!0;name="lock";title="Locked"}class nx extends nn{name="swap_horiz";title="Swap";moveItems(t){let e=t.items.filter(nn.movable),i=this.tile.items.filter(nn.movable);return i.forEach(e=>e.move(t)),e.forEach(t=>t.move(this.tile)),{moved:[nn.data(this.tile,t,i),nn.data(t,this.tile,e)],tiles:[this.tile,t]}}tileFilter(t){return t.modifiers.some(ni.immutable)||!t.items.filter(t=>t.type!==i3.Types.beam).length}}class nw extends i3{selected=!1;#N;constructor(t,e,i,n){super(null,n,{locked:!1}),this.#N=nw.ui(e,i,n,{coordinates:t,type:this.type}),this.center=this.#N.center,this.coordinates=t,this.hexagon=this.#N.hexagon,this.parameters=i,this.styles=this.#N.styles,this.group.addChildren([this.#N.hexagon,this.#N.indicator]),this.items=(n.items||[]).map(t=>(function(t,e){let i;switch(e.type){case i3.Types.filter:i=new no(t,e);break;case i3.Types.portal:i=new nu(t,e);break;case i3.Types.terminus:i=new nm(t,e);break;case i3.Types.reflector:i=new n_(t,e);break;case i3.Types.wall:i=new nv(t,e);break;default:console.error("Ignoring item with unknown type:",e.type)}return i&&i.onInitialization(),i})(this,t)).filter(t=>void 0!==t),this.modifiers=(n.modifiers||[]).map(t=>(function(t,e){let i;switch(e.type){case ni.Types.immutable:i=new ny(t,e);break;case ni.Types.lock:i=new nb(t,e);break;case ni.Types.move:i=new nn(t,e);break;case ni.Types.rotate:i=new nh(t,e);break;case ni.Types.swap:i=new nx(t,e);break;case ni.Types.toggle:i=new nc(t,e);break;default:console.error("Ignoring modifier with unknown type:",e.type)}return i})(this,t)).filter(t=>void 0!==t),this.update()}addItem(t){this.items.unshift(t),this.update()}addModifier(t){this.modifiers.unshift(t),this.update()}afterModify(){this.setStyle(this.selected?"selected":"default"),this.modifiers.forEach(t=>t.update({disabled:!1}))}beforeModify(){this.group.bringToFront(),this.setStyle("edit"),this.modifiers.forEach(t=>t.update({disabled:!0}))}getState(){let t={type:this.type},e=this.items.filter(t=>t.type!==i3.Types.beam).map(t=>t.getState());e.length&&(t.items=e);let i=this.modifiers.map(t=>t.getState());return i.length&&(t.modifiers=i),t}onTap(t){console.debug(this.coordinates.offset.toString(),this),this.items.forEach(e=>e.onTap(t))}onDeselected(t){this.selected=!1,this.#N.hexagon.style=this.styles.default,this.items.forEach(t=>t.onDeselected()),this.modifiers.forEach(t=>t.detach()),iV(nw.Events.Deselected,{selectedTile:t,deselectedTile:this})}onSelected(t){this.selected=!0,this.group.bringToFront(),this.#N.hexagon.style=this.styles.selected,this.items.forEach(t=>t.onSelected()),this.modifiers.forEach(t=>t.attach())}removeItem(t){let e=this.items.indexOf(t);e>=0&&(this.items.splice(e,1),this.update())}removeModifier(t){let e=this.modifiers.indexOf(t);e>=0&&(this.modifiers.splice(e,1),this.update())}setStyle(t){this.hexagon.set(this.styles[t])}teardown(){this.modifiers.forEach(t=>t.detach())}toString(){return this.coordinates.offset.toString()}update(){super.update(),this.#N.indicator.opacity=this.modifiers.length?1:0}static parameters(t){let e=t/2,i=Math.sqrt(3)*e;return{circumradius:e,height:t,inradius:i/2,offsetY:3/4*t,width:i}}static ui(t,e,i,n){let r=new iP.Point(t.startingOffsetX+e.inradius+t.column*e.width,t.startingOffsetY+e.circumradius+t.row*e.offsetY),s=e.circumradius/10,a=Object.assign({},nw.Styles,{edit:Object.assign({dashArray:[s,s]},nw.Styles.edit)},i.style||{}),o=new iP.Path.RegularPolygon({center:r,closed:!0,data:n,radius:e.circumradius,sides:6,style:a.default}),h=new iP.Path.RegularPolygon({center:iG(o.segments[1].point,r,t=>t/3),data:{collidable:!1},opacity:0,radius:e.circumradius/16,sides:6,style:{fillColor:"#ccc"}});return{center:r,hexagon:o,indicator:h,styles:a}}static Events=Object.freeze({Deselected:"tile-deselected",Selected:"tile-selected"});static Styles=Object.freeze({default:{dashArray:[],fillColor:new iP.Color("white"),strokeColor:new iP.Color("#666"),strokeWidth:1},edit:{strokeColor:new iP.Color("black"),strokeWidth:2},selected:{dashArray:[],strokeColor:new iP.Color("black"),strokeWidth:2}})}class nk extends i5{#B=[];#D=[];items=[];layers={};tiles=[];tileSize=120;constructor(t){super(t),this.type=t.type||nk.Types.oddR;let e=a(iP).view.center,i=nw.parameters(this.tileSize),n=t.tiles,r=n.length*i.width,s=e.y-r/2;this.layers.tiles=new iP.Layer,this.layers.items=new iP.Layer;let o=n.reduce((t,e,i)=>{let n=e.length;return n>t.length||n===t.length&&this.#F(i)?{index:i,length:n}:t},{index:0,length:0}),h=o.length*i.width+(this.#F(o.index)?i.inradius:0),l=e.x-h/2;for(let t=0;tt.group))),this.tiles.push(p),r[h.q]=p,a[u.c]=p}this.#B.push(r),this.#D.push(a)}}getTileByAxial(t){return(this.#B[t.r]||[])[t.q]}getTileByOffset(t){return this.#D[t.r][t.c]}getState(){return Object.assign(super.getState(),{tiles:this.#D.map(t=>t.map(t=>t?.getState()||null))})}getNeighboringTile(t,e){return this.getTileByAxial(i2.neighbor(t,i$(e)))}teardown(){Object.values(this.layers).forEach(t=>t.removeChildren())}#F(t){return t%2==0?this.type===nk.Types.evenR:this.type===nk.Types.oddR}static Types=Object.freeze({evenR:"even-r",oddR:"odd-r"})}var iP=(u("hFpCu"),u("hFpCu"));class nC extends i3{constructor(t,e){super(null,e,{locked:!1,type:i3.Types.mask});let i={type:this.type},n=new iP.Path.RegularPolygon({center:t.center,closed:!0,data:i,opacity:.25,radius:t.parameters.circumradius+1,sides:6,style:Object.assign({fillColor:"black"},e)});this.center=t.center,this.group.addChild(n)}}var iP=u("hFpCu");class nS extends i3{constructor(t){super(null,t,{type:i3.Types.collision});let{center:e,color:i}=t;this.center=e,this.color=i;let n=new iP.Path.Circle({center:e,closed:!0,radius:4,style:{fillColor:"white",strokeColor:i,strokeWidth:2}});this.group.addChild(n)}}const nI={"001":u("c6KoO"),"002":u("8f7Az"),"003":u("dwyZF"),"004":u("cHmaR"),"005":u("1L3os"),"006":u("lJdHO"),"007":u("ixRVx"),"008":u("mBcXZ"),"009":u("9RcUi"),"010":u("iJw1S"),"011":u("5K06G"),test_infinite_loop:u("gO2GV"),test_layout:u("biNjg"),test_portal:u("4QHZj"),test_reflector:u("7Uxjd")};function nT(t,e,i){let n=t.indexOf(e);return t[n<0?n:n+i]}class nE{ids;constructor(t){this.firstId=t[0],this.ids=t,this.lastId=t[t.length-1]}get(t){if(this.has(t))return structuredClone(nI[t])}has(t){return this.ids.includes(t)}nextId(t){return nT(this.ids,t,1)}previousId(t){return nT(this.ids,t,-1)}}const nA=new nE(Object.keys(nI).sort());nA.hidden=new nE(nA.ids.filter(t=>t.startsWith("test_"))),nA.titles=Object.fromEntries(nA.ids.map(t=>[t,nI[t].title||t])),nA.visible=new nE(nA.ids.filter(t=>!nA.hidden.has(t)));const nP=window.history,nM=window.localStorage;class nO{#V;#j;#U;#q;#Z;#H;#G;constructor(t,e,i,n,r,s){this.#U=t,this.#Z=e,this.#j=i||[],this.#q=n||this.#W(),this.#H=r,this.#G=s??e.version,this.#V=structuredClone(e),this.#j.filter((t,e)=>e<=this.#q).forEach(t=>this.apply(t)),this.#K(t)}apply(t){return"string"==typeof t&&(t=JSON.parse(t)),console.debug("StateManager: applying delta",t),iL.patch(this.#V,t)}canRedo(){return this.#q=0}encode(){return iR(JSON.stringify({id:this.#U,original:nA.has(this.#U)?void 0:this.#Z,deltas:this.#j,deltasIndex:this.#q,selectedTile:this.#H,version:this.#G}))}getCurrent(){return structuredClone(this.#V)}getId(){return this.#U}getTitle(){return this.getId()+(this.#V.title?` - ${this.#V.title}`:"")}getSelectedTile(){return this.#H}moves(){return this.#q+1}length(){return this.#j.length}redo(){let t=this.#q+1;t<=this.#W()&&(this.#V=structuredClone(this.#Z),this.#j.filter((e,i)=>i<=t).forEach(t=>this.apply(t)),this.#q=t,this.#K())}reset(){this.#V=structuredClone(this.#Z),this.#j=[],this.#q=this.#W(),this.#H=void 0,nO.clearCache(this.getId()),this.#K()}setSelectedTile(t){let e=t?.coordinates.offset.toString();this.#H!==e&&(this.#H=e,this.#K())}undo(){let t=this.#q-1;t>=-1&&(this.#V=structuredClone(this.#Z),this.#j.filter((e,i)=>i<=t).forEach(t=>this.apply(t)),this.#q=t,this.#K())}update(t){let e=iL.diff(this.#V,t);console.debug("delta",e),void 0!==e&&(this.#q""!==t);if(t||i.filter(t=>!nA.has(t)).some((i,n)=>{try{t=(e=nO.fromEncoded(i)).getId()}catch(t){console.debug(`Could not parse state from path segment '${n}'`,t)}return void 0!==e}),!e){t=t||i[0]||nM.getItem(nO.CacheKeys.id)||nA.visible.firstId;let n=nM.getItem(nO.key(nO.CacheKeys.state,t));if(n)try{e=nO.fromEncoded(n)}catch(e){console.debug(`Could not parse state with ID '${t}' from localStorage`,e)}}if(e){let i=e.#G,n=e.#Z.version;i!==n&&(console.debug(`Invalidating cache for ID ${t} due to version mismatch. Puzzle: ${n}, Cache: ${i}`),e=void 0,nO.clearCache(t))}if(e||(e=nO.fromId(t)),!e)throw Error(`Unable to resolve state for ID '${t}'`);return e}static key(t,e){return`${t}:${e}`}static CacheKeys=Object.freeze({center:"center",id:"id",state:"state",zoom:"zoom"});static ParamKeys=Object.freeze({clearCache:"clearCache"})}class nN{#J=[];constructor(t){t.forEach(t=>this.#Y(t))}teardown(){this.#J.forEach(t=>t.teardown()),nN.element.replaceChildren()}isSolved(){return this.#J.every(t=>t.isMet())}#Y(t){switch(t.type){case nL.Types.connections:this.#J.push(new nz(t));break;case nL.Types.moves:this.#J.push(new nR(t));break;default:console.warn("Ignoring condition with unknown type:",t.type)}}static element=document.getElementById("solution")}class nL{constructor(t,e){this.state=t;let i=document.createElement("li");i.append(...e),nN.element.append(i)}isMet(){}teardown(){}update(){}static Types=Object.freeze(Object.fromEntries(["connections","moves"].map(t=>[t,iB(t)])))}class nz extends nL{#Q;#X=new i6({context:this});#tt=[];constructor(t){let e=document.createElement("span");e.textContent="0";let i=document.createElement("span");i.textContent=t.amount.toString(),super(t,[e,iJ("/"),i,iH("link","Connections")]),this.#Q=e,this.#X.add([{type:nm.Events.Connection,handler:this.update},{type:nm.Events.Disconnection,handler:this.update}])}isMet(){return this.#tt.length===this.state.amount}teardown(){this.#X.remove(),super.teardown()}update(t){console.debug("Connections.update",t);let e=t.detail.terminus,i=t.detail.opening,n=`${e.id}:${i.direction}`,r=this.#tt.findIndex(t=>t===n);i.connected&&r<0?this.#tt.push(n):!i.connected&&r>=0&&this.#tt.splice(r,1),this.#Q.textContent=this.#tt.length.toString()}}class nR extends nL{#Q;#X=new i6({context:this});#te=0;constructor(t){if(t.operator??=nR.Operators.equalTo,!Object.values(nR.Operators).includes(t.operator))throw Error(`Invalid moves operator: ${t.operator}`);let e=document.createElement("span");e.textContent="0";let i=document.createElement("span");i.textContent=t.amount.toString(),super(t,[e,iJ(t.operator),i,iH("stacks","Moves")]),this.#Q=e,this.#X.add([{type:nD.Events.Updated,handler:this.update}])}isMet(){switch(this.state.operator){case nR.Operators.equalTo:return this.#te===this.state.amount;case nR.Operators.greaterThan:return this.#te>this.state.amount;case nR.Operators.lessThan:return this.#te",lessThan:"<"})}const nB=Object.freeze({main:document.getElementById("main"),message:document.getElementById("message"),next:document.getElementById("next"),previous:document.getElementById("previous"),puzzle:document.getElementById("puzzle"),puzzleId:document.getElementById("puzzle-id"),redo:document.getElementById("redo"),reset:document.getElementById("reset"),undo:document.getElementById("undo"),title:document.querySelector("title")});class nD{connections=[];debug=!1;error=!1;layers={};message;selectedTile;solved=!1;#ti;#tn=30;#tr={};#X=new i6({context:this});#ts;#ta=!1;#m;#to=[];#th;#t;#tl;#tu=[];constructor(){a(iP).settings.insertItems=!1,a(iP).setup(nB.puzzle),this.#tc(),this.layers.mask=new iP.Layer,this.layers.collisions=new iP.Layer,this.layers.debug=new iP.Layer,this.#X.add([{type:ng.Events.Update,handler:this.#td},{type:"change",element:nB.puzzleId,handler:this.#tp},{type:"click",element:nB.next,handler:this.#tf},{type:"click",element:nB.previous,handler:this.#tg},{type:"click",element:nB.redo,handler:this.#tm},{type:"click",element:nB.reset,handler:this.#t_},{type:"click",element:nB.undo,handler:this.#tv},{type:"keyup",handler:this.#ty},{type:ni.Events.Invoked,handler:this.#tb},{type:nD.Events.Mask,handler:this.#tx},{type:"resize",element:window,handler:function(t,e=500){let i;return(...n)=>{clearTimeout(i),i=setTimeout(()=>{t(...n)},e)}}(this.#tc)},{type:i5.Events.Update,handler:this.#tw},{type:"tap",element:nB.puzzle,handler:this.#tk}]),this.#ts=new i9(nB.puzzle),this.#tC(),this.select()}centerOnTile(t){let e=this.layout.getTileByOffset(t);a(iP).view.center=e.center}clearDebugPoints(){this.layers.debug.clear()}drawDebugPoint(t,e={}){let i=new iP.Path.Circle(Object.assign({radius:3,fillColor:"red",strokeColor:"white",strokeWidth:1,center:t},e));this.layers.debug.addChild(i)}getBeamsUpdateDelay(){return this.#tn}getItems(t){return(t?this.#tu.filter(e=>e===t):this.#tu).flatMap(t=>t.items)}getTile(t){let e=a(iP).project.hitTest(t.ceil(),{fill:!0,match:t=>t.item.data.type===i3.Types.tile,segments:!0,stroke:!0,tolerance:0});return e?this.layout.getTileByAxial(e.item.data.coordinates.axial):e}mask(t){if(this.#m){if(this.#m.equals(t))throw console.debug(t),Error(`Duplicate mask detected: ${t.id}`);this.#to.push(t);return}this.#m=t;let e=this.#tu.filter(t.tileFilter).map(e=>new nC(e,"function"==typeof t.configuration.style?t.configuration.style(e):t.configuration.style));this.layers.mask.addChildren(e.map(t=>t.group)),t.message&&(nB.message.textContent=t.message),t.onMask(this),document.body.classList.add(nD.Events.Mask)}select(t){if(void 0===t||t!==this.#t?.getId()){try{this.#t=nO.resolve(t)}catch(t){this.#tS(t,"Could not load puzzle.")}this.#tI()}}unmask(){this.layers.mask.removeChildren(),this.#tT(this.selectedTile),this.#m.onUnmask(this),this.#m=void 0,document.body.classList.remove(nD.Events.Mask);let t=this.#to.pop();t&&setTimeout(()=>this.mask(t),0)}update(){this.#m||this.#ta||(this.#ta=!0,this.#tE())}updateSelectedTile(t){let e=this.selectedTile;return this.selectedTile=t,this.#t.setSelectedTile(t),this.#tT(t),e&&e!==t&&e.onDeselected(t),t&&t!==e&&t.onSelected(e),e}updateState(){this.#t.update(Object.assign(this.#t.getCurrent(),{layout:this.layout.getState()})),this.#tA(),iV(nD.Events.Updated,{state:this.#t})}#tP(){[this.layout.layers.tiles,this.layout.layers.items,this.layers.mask,this.layers.collisions,this.layers.debug].forEach(t=>a(iP).project.addLayer(t))}#tf(){let t=nA.visible.nextId(this.#t.getId());t&&this.select(t)}#td(t){let e=t.detail.beam,i=t.detail.state;if(i?.has(na.Collision)){let t=i.get(na.Collision),n=nD.Collision.id(t.point),r=this.#tr[n];r?r.addBeam(e):this.#tr[n]=new nD.Collision(this.layers.collisions,[e],t.point);let s=this.#m?.configuration;s?.beam?.equals(e)&&this.unmask()}Object.values(this.#tr).forEach(t=>t.update()),this.#ti.filter(t=>t!==e).forEach(e=>e.onBeamUpdated(t,this)),setTimeout(()=>this.update(),0)}#tS(t,e,i){this.error=!0,"string"==typeof t&&(i=e=t,t=void 0),t&&console.error(t),(i=i??t?.cause)&&console.error("cause:",i),e=e??t?.message??"The puzzle has encountered an error, please consider reporting.",nB.message.textContent=e,document.body.classList.add(nD.Events.Error)}#ty(t){this.debug&&"s"===t.key&&this.update()}#tx(t){console.debug("Mask event",t),this.mask(t.detail.mask)}#tb(t){let e=t.detail.tile;this.#ti.sort(t=>e.items.some(e=>e===t)?-1:0).forEach(e=>e.onModifierInvoked(t,this)),setTimeout(()=>this.update(),0)}#tp(t){this.select(t.target.value)}#tM(){if(this.solved)return;this.solved=!0,this.updateSelectedTile(void 0),this.mask(nD.#tO);let t=document.createElement("span");t.classList.add("material-symbols-outlined"),t.textContent="celebration",t.title="Solved!",nB.message.replaceChildren(t),document.body.classList.add(nD.Events.Solved),iV(nD.Events.Solved)}#tw(){this.updateState()}#tk(t){let e;if(this.solved||this.error)return;let i=a(iP).project.hitTest(t.detail.point);switch(i?.item.data.type){case i3.Types.mask:return;case i3.Types.tile:e=this.layout.getTileByAxial(i.item.data.coordinates.axial)}if(this.#m)this.#m.onTap(this,e);else{let i=this.updateSelectedTile(e);e&&e===i&&e.onTap(t)}}#tg(){let t=nA.visible.previousId(this.#t.getId());t&&this.select(t)}#tm(){this.#t.redo(),this.#tI()}#tI(){this.error=!1,this.#t&&this.#tN(),this.#tL(),iV(nD.Events.Updated,{state:this.#t})}#tz(){Object.values(this.layers).forEach(t=>t.removeChildren()),a(iP).project.clear()}#t_(){this.#t.reset(),this.#tI()}#tc(){let{width:t,height:e}=nB.main.getBoundingClientRect();nB.puzzle.style.height=e+"px",nB.puzzle.style.width=t+"px",a(iP).view.viewSize=new iP.Size(t,e)}#tL(){i3.uniqueId=0;let{layout:t,message:e,solution:i}=this.#t.getCurrent();this.layout=new nk(t),this.message=e,this.#th=new nN(i),this.#tu=this.layout.tiles,this.#tl=this.layout.items.filter(t=>t.type===i3.Types.terminus),this.#ti=this.#tl.flatMap(t=>t.beams),this.#tP(),document.body.classList.add(nD.Events.Loaded);let n=this.#t.getSelectedTile(),r=n?this.layout.getTileByOffset(new i1(...n.split(","))):void 0;this.updateSelectedTile(r),this.update(),this.#tA()}#tN(){document.body.classList.remove(...Object.values(nD.Events)),this.#tz(),this.#tu.forEach(t=>t.teardown()),this.#tu=[],this.#th?.teardown(),this.#th=void 0,this.solved=!1,this.layout?.teardown(),this.layout=void 0,this.selectedTile=void 0,this.#ti=[],this.#tr={},this.#ta=!1,this.#m=void 0,this.#tl=[]}#tv(){this.#t.undo(),this.#tI()}#tA(){let t=this.#t.getId(),e=this.#t.getTitle();nB.title.textContent=`Beaming: Puzzle ${e}`,function(t,...e){e.forEach(e=>e.classList.remove(t))}("disabled",...Array.from(document.querySelectorAll("#actions li")));let i=[];this.#t.canUndo()||i.push(nB.undo),this.#t.canRedo()||i.push(nB.redo),nA.visible.has(t)?(nB.puzzleId.value=t,t===nA.visible.firstId?i.push(nB.previous):t===nA.visible.lastId&&i.push(nB.next)):(nB.puzzleId.value="",i.push(nB.previous,nB.next)),function(t,...e){e.forEach(e=>e.classList.add(t))}("disabled",...i)}#tC(){for(let t of(nB.puzzleId.replaceChildren(),nA.visible.ids)){let e=document.createElement("option");e.value=t,e.innerText=nA.titles[t],nB.puzzleId.append(e)}}#tE(){let t=this.#ti.filter(t=>t.isPending());if(!t.length){this.#ta=!1,setTimeout(()=>{this.#th.isSolved()&&this.#tM()},0);return}this.debug&&this.layers.debug.clear(),t.forEach(t=>t.step(this)),setTimeout(()=>this.#tE(),this.#tn)}#tT(t){if(t){let e=t.items.map(e=>e.getColorElements(t)).find(t=>t.length>0)||[];nB.message.replaceChildren(...e)}else nB.message.textContent=this.message||"Select a tile"}static Collision=class{constructor(t,e,i,n){this.id=nD.Collision.id(i),this.layer=t,this.beams=e,this.point=i,this.item=n}addBeam(t){return this.beams.some(e=>e.id===t.id)||this.beams.push(t),this.beams}addItem(t){this.item=new nS({center:this.point,color:t}),this.layer.addChild(this.item.group)}equals(t){return ij(this.point,t?.point)}getColor(){return this.beams.length?a(iA).average(this.beams.map(t=>t.getColor())).hex():void 0}removeItem(){this.item&&(this.item.remove(),this.item=void 0)}update(){this.beams=this.beams.filter(t=>this.equals(t.getCollision()));let t=this.getColor();this.item&&(!this.beams.length||this.item.color!==t)&&this.removeItem(),this.beams.length&&!this.item&&this.addItem(t)}static id(t){let e=t.round();return[e.x,e.y].join(",")}};static Events=Object.freeze({Error:"puzzle-error",Loaded:"puzzle-loaded",Mask:"puzzle-mask",Solved:"puzzle-solved",Updated:"puzzle-updated"});static Mask=class{constructor(t={}){t.style??={},this.configuration=t,this.id=t.id,this.message=t.message,this.tileFilter=t.tileFilter??iY(!0),this.onMask=t.onMask??iY,this.onTap=t.onTap??iY,this.onUnmask=t.onUnmask??iY}equals(t){return this.id===t.id}};static #tR=t=>t.type===i3.Types.beam&&t.isConnected();static #tO=new nD.Mask({style:t=>{let e=t.items.filter(nD.#tR).flatMap(e=>e.getSteps(t).flatMap(t=>t.color));return{fillColor:a(iA).average(e).hex()}},tileFilter:t=>t.items.some(nD.#tR)})}const nF=document.createElement("script");nF.setAttribute("src","https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS"),document.head.append(nF);const nV=window.dataLayer=window.dataLayer||[];function nj(){nV.push(arguments)}nj("js",new Date),nj("config","G-HXLD6EE5NS");const nU=window.doorbellOptions={appKey:"o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC",container:document.getElementById("feedback-container"),hideButton:!0,properties:{}},nq=document.createElement("script");nq.setAttribute("src","https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0"),document.head.append(nq),document.addEventListener("puzzle-updated",t=>{nU.properties.puzzleId=t.detail.state.getId()});const nZ=new nD,nH={debug:i0,puzzle:nZ};nH.centerOnTile=function(t,e){return nZ.centerOnTile(new i1(t,e))},nH.clearDebugPoints=nZ.clearDebugPoints.bind(nZ),nH.drawDebugPoint=function(t,e,i){return nZ.drawDebugPoint(new iP.Point(t,e),i)},window.beaming=nH; +//# sourceMappingURL=index.dacb650f.js.map diff --git a/index.dacb650f.js.map b/index.dacb650f.js.map new file mode 100644 index 0000000..8fb3a02 --- /dev/null +++ b/index.dacb650f.js.map @@ -0,0 +1 @@ +{"mappings":"IsCkLI,EACA,EACA,EAkyJA,EAAQ,E,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,S,E,C,E,O,G,E,U,C,E,O,C,C,C,I,E,A,a,O,W,W,A,a,O,K,K,A,a,O,O,O,A,a,O,O,O,C,E,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,I,E,E,Q,C,E,Q,S,C,C,C,ErCt9JZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,EAEW,AAAA,CAAA,SAAS,CAAI,CAAE,CAAS,EAGpC,IAAI,EAAS,AADb,CAAA,EAAO,GAAP,EAAA,QAAA,EACkB,MAAM,CACvB,EAAW,EAAK,QAAQ,CAErB,EAAO,IAAI,WACd,IAAI,EAAS,wCACZ,EAAQ,EAAE,CACV,EAAQ,EAAM,KAAK,CACnB,EAAS,OAAO,MAAM,CACtB,EAAW,OAAO,wBAAwB,CAC1C,EAAS,OAAO,cAAc,CAE9B,EAAU,EAAM,OAAO,EAAI,SAAS,CAAI,CAAE,CAAI,EAC7C,IAAK,IAAI,EAAI,EAAG,EAAI,IAAI,CAAC,MAAM,CAAE,EAAI,EAAG,IACvC,EAAK,IAAI,CAAC,EAAM,IAAI,CAAC,EAAE,CAAE,EAAG,IAAI,CAElC,EAEA,EAAQ,SAAS,CAAI,CAAE,CAAI,EAC1B,IAAK,IAAI,KAAK,IAAI,CACb,IAAI,CAAC,cAAc,CAAC,IACvB,EAAK,IAAI,CAAC,EAAM,IAAI,CAAC,EAAE,CAAE,EAAG,IAAI,CAEnC,EAEA,EAAM,OAAO,MAAM,EAAI,SAAS,CAAG,EAClC,IAAK,IAAI,EAAI,EAAG,EAAI,UAAU,MAAM,CAAE,EAAI,EAAG,IAAK,CACjD,IAAI,EAAM,SAAS,CAAC,EAAE,CACtB,IAAK,IAAI,KAAO,EACX,EAAI,cAAc,CAAC,IACtB,CAAA,CAAG,CAAC,EAAI,CAAG,CAAG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E,EAAO,EAAO,OAAO,EAEhD,EAAO,YAAY,CAAC,oBAAqB,QAClC,CACR,CACD,CAEA,SAAS,IACR,EAAK,IAAI,CAAC,GAAY,EAAS,oBAAoB,CAAC,UAClD,EACH,QApYA,EAAM,MAAM,CAAC,GACb,EAAK,MAAM,CAAC,GACZ,EAAM,MAAM,CAAC,GAwYT,IACC,AAAwB,aAAxB,EAAS,UAAU,CACtB,WAAW,GAEX,EAAS,GAAG,CAAC,EAAQ,CAAE,KAAM,CAAQ,IAIhC,CACN,QAAS,EACT,QAAS,EACT,KAfD,SAAc,CAAM,EACnB,OAAO,EAAS,EAAW,GAAU,GACtC,EAcC,MAAO,EACP,gBAAiB,EACjB,eAAgB,CACjB,CAED,CAAA,EAAE,IAAI,CAAC,IAAI,EAEX,IAAI,GAAQ,GAAK,CAAA,EAAW,MAAM,CAAC,EAAK,OAAO,CAAE,CAChD,KAAM,EACN,UAAW,EACX,IAAK,EACL,SAAU,EACV,WAAY,EACZ,SAAU,EACV,OAAQ,EACR,OAAQ,EACR,aAAc,CACf,EAAA,EAYA,OAVI,GAAM,KAAK,CAAC,IAAI,EACnB,AAAA,EAAA,SAA4B,IAGzB,AAAkB,YAAlB,OAAO,QAAyB,OAAO,GAAG,CAC7C,OAAO,QAAS,IACwB,GACxC,CAAA,EAAO,OAAO,CAAG,EADX,EAIA,EACP,CAAA,EAAE,IAAI,CAAC,IAAI,CAAE,AAAgB,UAAhB,OAAO,KAAoB,KAAO,K,G,E,Q,S,C,C,C,E,G,E,Q,S,C,C,C,E,E,E,O,C,oB,W,O,C,G,E,E,O,C,mB,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,e,W,O,C,G,E,E,O,C,W,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,a,W,O,C,G,E,E,O,C,Y,W,O,C,G,E,E,O,C,qB,W,O,C,G,E,E,O,C,W,W,O,C,G,E,E,O,C,iB,W,O,C,G,E,E,O,C,c,W,O,C,G,E,E,O,C,iB,W,O,C,G,E,E,O,C,S,W,O,C,G,E,E,O,C,a,W,O,E,G,E,E,O,C,c,W,O,E,G,E,E,O,C,O,W,O,E,G,E,E,O,C,Q,W,O,E,G,E,E,O,C,U,W,O,E,G,E,E,O,C,Q,W,O,E,G,E,E,O,C,oB,W,O,E,G,E,E,O,C,Y,W,O,E,GE9jiB/C,IAAI,EAAwB,CAAC,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,IAAK,GAAI,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,MAAO,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,MAAO,EAAG,KAAM,GAAI,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,KAAM,GAAI,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,KAAM,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,KAAM,EAAG,OAAQ,IAAI,CAGxhC,EAA6B,CAAC,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,IAAK,GAAI,GAAI,IAAK,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,IAAK,EAAG,GAAI,IAAK,IAAK,IAAK,GAAI,IAAK,KAAM,GAAI,GAAI,KAAM,GAAI,EAAG,KAAM,IAAK,KAAM,IAAK,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,KAAM,EAAG,KAAM,GAAI,EAAG,KAAM,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,KAAM,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,KAAM,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAA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","sources":["","node_modules/paper/dist/paper-full.js","node_modules/@parcel/node-resolver-core/lib/_empty.js","node_modules/acorn/dist/acorn.mjs","src/puzzles/001.json","src/puzzles/002.json","src/puzzles/003.json","src/puzzles/004.json","src/puzzles/005.json","src/puzzles/006.json","src/puzzles/007.json","src/puzzles/008.json","src/puzzles/009.json","src/puzzles/010.json","src/puzzles/011.json","src/puzzles/test/infiniteLoop.json","src/puzzles/test/layout.js","src/puzzles/test/portal.json","src/puzzles/test/reflector.json","src/index.js","src/info.js","src/components/debug.js","src/components/util.js","node_modules/jsondiffpatch/lib/index.js","node_modules/jsondiffpatch/lib/diffpatcher.js","node_modules/jsondiffpatch/lib/processor.js","node_modules/jsondiffpatch/lib/pipe.js","node_modules/jsondiffpatch/lib/contexts/diff.js","node_modules/jsondiffpatch/lib/contexts/context.js","node_modules/jsondiffpatch/lib/clone.js","node_modules/jsondiffpatch/lib/contexts/patch.js","node_modules/jsondiffpatch/lib/contexts/reverse.js","node_modules/jsondiffpatch/lib/filters/trivial.js","node_modules/jsondiffpatch/lib/filters/nested.js","node_modules/jsondiffpatch/lib/filters/arrays.js","node_modules/jsondiffpatch/lib/filters/lcs.js","node_modules/jsondiffpatch/lib/filters/dates.js","node_modules/jsondiffpatch/lib/filters/texts.js","node_modules/pako/dist/pako.esm.mjs","node_modules/chroma-js/chroma.js","src/components/puzzle.js","src/components/layout.js","src/components/coordinates/cube.js","src/components/coordinates/offset.js","src/components/items/tile.js","src/components/item.js","src/components/stateful.js","src/components/itemFactory.js","src/components/items/filter.js","src/components/modifiers/move.js","src/components/modifier.js","src/components/eventListeners.js","src/components/interact.js","src/components/cache.js","src/components/step.js","src/components/items/portal.js","src/components/modifiers/rotate.js","src/components/items/terminus.js","src/components/modifiers/toggle.js","src/components/items/beam.js","src/components/collision.js","src/components/items/reflector.js","src/components/items/wall.js","src/components/modifierFactory.js","src/components/modifiers/immutable.js","src/components/modifiers/lock.js","src/components/modifiers/swap.js","src/components/items/mask.js","src/components/items/collision.js","src/components/state.js","src/puzzles/index.js","src/components/solution.js","src/analytics.js","src/feedback.js"],"sourcesContent":["\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true, configurable: true});\n}\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequiref3c5\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequiref3c5\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nparcelRegister(\"hFpCu\", function(module, exports) {\n/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */ \n\n\nvar paper = (function(self1, undefined) {\n self1 = self1 || (parcelRequire(\"gFNhN\"));\n var window = self1.window, document = self1.document;\n var Base = new function() {\n var hidden = /^(statics|enumerable|beans|preserve)$/, array = [], slice = array.slice, create = Object.create, describe = Object.getOwnPropertyDescriptor, define1 = Object.defineProperty, forEach = array.forEach || function(iter, bind) {\n for(var i = 0, l = this.length; i < l; i++)iter.call(bind, this[i], i, this);\n }, forIn = function(iter, bind) {\n for(var i in this)if (this.hasOwnProperty(i)) iter.call(bind, this[i], i, this);\n }, set = Object.assign || function(dst) {\n for(var i = 1, l = arguments.length; i < l; i++){\n var src = arguments[i];\n for(var key in src)if (src.hasOwnProperty(key)) dst[key] = src[key];\n }\n return dst;\n }, each = function(obj, iter, bind) {\n if (obj) {\n var desc = describe(obj, \"length\");\n (desc && typeof desc.value === \"number\" ? forEach : forIn).call(obj, iter, bind = bind || obj);\n }\n return bind;\n };\n function inject(dest, src, enumerable, beans, preserve) {\n var beansNames = {};\n function field(name, val) {\n val = val || (val = describe(src, name)) && (val.get ? val : val.value);\n if (typeof val === \"string\" && val[0] === \"#\") val = dest[val.substring(1)] || val;\n var isFunc = typeof val === \"function\", res = val, prev = preserve || isFunc && !val.base ? val && val.get ? name in dest : dest[name] : null, bean;\n if (!preserve || !prev) {\n if (isFunc && prev) val.base = prev;\n if (isFunc && beans !== false && (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/))) beansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n if (!res || isFunc || !res.get || typeof res.get !== \"function\" || !Base.isPlainObject(res)) res = {\n value: res,\n writable: true\n };\n if ((describe(dest, name) || {\n configurable: true\n }).configurable) {\n res.configurable = true;\n res.enumerable = enumerable != null ? enumerable : !bean;\n }\n define1(dest, name, res);\n }\n }\n if (src) {\n for(var name in src)if (src.hasOwnProperty(name) && !hidden.test(name)) field(name);\n for(var name in beansNames){\n var part = beansNames[name], set = dest[\"set\" + part], get = dest[\"get\" + part] || set && dest[\"is\" + part];\n if (get && (beans === true || get.length === 0)) field(name, {\n get: get,\n set: set\n });\n }\n }\n return dest;\n }\n function Base() {\n for(var i = 0, l = arguments.length; i < l; i++){\n var src = arguments[i];\n if (src) set(this, src);\n }\n return this;\n }\n return inject(Base, {\n inject: function(src) {\n if (src) {\n var statics = src.statics === true ? src : src.statics, beans = src.beans, preserve = src.preserve;\n if (statics !== src) inject(this.prototype, src, src.enumerable, beans, preserve);\n inject(this, statics, null, beans, preserve);\n }\n for(var i = 1, l = arguments.length; i < l; i++)this.inject(arguments[i]);\n return this;\n },\n extend: function() {\n var base = this, ctor, proto;\n for(var i = 0, obj, l = arguments.length; i < l && !(ctor && proto); i++){\n obj = arguments[i];\n ctor = ctor || obj.initialize;\n proto = proto || obj.prototype;\n }\n ctor = ctor || function() {\n base.apply(this, arguments);\n };\n proto = ctor.prototype = proto || create(this.prototype);\n define1(proto, \"constructor\", {\n value: ctor,\n writable: true,\n configurable: true\n });\n inject(ctor, this);\n if (arguments.length) this.inject.apply(ctor, arguments);\n ctor.base = base;\n return ctor;\n }\n }).inject({\n enumerable: false,\n initialize: Base,\n set: Base,\n inject: function() {\n for(var i = 0, l = arguments.length; i < l; i++){\n var src = arguments[i];\n if (src) inject(this, src, src.enumerable, src.beans, src.preserve);\n }\n return this;\n },\n extend: function() {\n var res = create(this);\n return res.inject.apply(res, arguments);\n },\n each: function(iter, bind) {\n return each(this, iter, bind);\n },\n clone: function() {\n return new this.constructor(this);\n },\n statics: {\n set: set,\n each: each,\n create: create,\n define: define1,\n describe: describe,\n clone: function(obj) {\n return set(new obj.constructor(), obj);\n },\n isPlainObject: function(obj) {\n var ctor = obj != null && obj.constructor;\n return ctor && (ctor === Object || ctor === Base || ctor.name === \"Object\");\n },\n pick: function(a, b) {\n return a !== undefined ? a : b;\n },\n slice: function(list, begin, end) {\n return slice.call(list, begin, end);\n }\n }\n });\n };\n module.exports = Base;\n Base.inject({\n enumerable: false,\n toString: function() {\n return this._id != null ? (this._class || \"Object\") + (this._name ? \" '\" + this._name + \"'\" : \" @\" + this._id) : \"{ \" + Base.each(this, function(value, key) {\n if (!/^_/.test(key)) {\n var type = typeof value;\n this.push(key + \": \" + (type === \"number\" ? Formatter.instance.number(value) : type === \"string\" ? \"'\" + value + \"'\" : value));\n }\n }, []).join(\", \") + \" }\";\n },\n getClassName: function() {\n return this._class || \"\";\n },\n importJSON: function(json) {\n return Base.importJSON(json, this);\n },\n exportJSON: function(options) {\n return Base.exportJSON(this, options);\n },\n toJSON: function() {\n return Base.serialize(this);\n },\n set: function(props, exclude) {\n if (props) Base.filter(this, props, exclude, this._prioritize);\n return this;\n }\n }, {\n beans: false,\n statics: {\n exports: {},\n extend: function extend() {\n var res = extend.base.apply(this, arguments), name = res.prototype._class;\n if (name && !Base.exports[name]) Base.exports[name] = res;\n return res;\n },\n equals: function(obj1, obj2) {\n if (obj1 === obj2) return true;\n if (obj1 && obj1.equals) return obj1.equals(obj2);\n if (obj2 && obj2.equals) return obj2.equals(obj1);\n if (obj1 && obj2 && typeof obj1 === \"object\" && typeof obj2 === \"object\") {\n if (Array.isArray(obj1) && Array.isArray(obj2)) {\n var length = obj1.length;\n if (length !== obj2.length) return false;\n while(length--){\n if (!Base.equals(obj1[length], obj2[length])) return false;\n }\n } else {\n var keys = Object.keys(obj1), length = keys.length;\n if (length !== Object.keys(obj2).length) return false;\n while(length--){\n var key = keys[length];\n if (!(obj2.hasOwnProperty(key) && Base.equals(obj1[key], obj2[key]))) return false;\n }\n }\n return true;\n }\n return false;\n },\n read: function(list, start, options, amount) {\n if (this === Base) {\n var value = this.peek(list, start);\n list.__index++;\n return value;\n }\n var proto = this.prototype, readIndex = proto._readIndex, begin = start || readIndex && list.__index || 0, length = list.length, obj = list[begin];\n amount = amount || length - begin;\n if (obj instanceof this || options && options.readNull && obj == null && amount <= 1) {\n if (readIndex) list.__index = begin + 1;\n return obj && options && options.clone ? obj.clone() : obj;\n }\n obj = Base.create(proto);\n if (readIndex) obj.__read = true;\n obj = obj.initialize.apply(obj, begin > 0 || begin + amount < length ? Base.slice(list, begin, begin + amount) : list) || obj;\n if (readIndex) {\n list.__index = begin + obj.__read;\n var filtered = obj.__filtered;\n if (filtered) {\n list.__filtered = filtered;\n obj.__filtered = undefined;\n }\n obj.__read = undefined;\n }\n return obj;\n },\n peek: function(list, start) {\n return list[list.__index = start || list.__index || 0];\n },\n remain: function(list) {\n return list.length - (list.__index || 0);\n },\n readList: function(list, start, options, amount) {\n var res = [], entry, begin = start || 0, end = amount ? begin + amount : list.length;\n for(var i = begin; i < end; i++)res.push(Array.isArray(entry = list[i]) ? this.read(entry, 0, options) : this.read(list, i, options, 1));\n return res;\n },\n readNamed: function(list, name, start, options, amount) {\n var value = this.getNamed(list, name), hasValue = value !== undefined;\n if (hasValue) {\n var filtered = list.__filtered;\n if (!filtered) {\n var source = this.getSource(list);\n filtered = list.__filtered = Base.create(source);\n filtered.__unfiltered = source;\n }\n filtered[name] = undefined;\n }\n return this.read(hasValue ? [\n value\n ] : list, start, options, amount);\n },\n readSupported: function(list, dest) {\n var source = this.getSource(list), that = this, read = false;\n if (source) Object.keys(source).forEach(function(key) {\n if (key in dest) {\n var value = that.readNamed(list, key);\n if (value !== undefined) dest[key] = value;\n read = true;\n }\n });\n return read;\n },\n getSource: function(list) {\n var source = list.__source;\n if (source === undefined) {\n var arg = list.length === 1 && list[0];\n source = list.__source = arg && Base.isPlainObject(arg) ? arg : null;\n }\n return source;\n },\n getNamed: function(list, name) {\n var source = this.getSource(list);\n if (source) return name ? source[name] : list.__filtered || source;\n },\n hasNamed: function(list, name) {\n return !!this.getNamed(list, name);\n },\n filter: function(dest, source, exclude, prioritize) {\n var processed;\n function handleKey(key) {\n if (!(exclude && key in exclude) && !(processed && key in processed)) {\n var value = source[key];\n if (value !== undefined) dest[key] = value;\n }\n }\n if (prioritize) {\n var keys = {};\n for(var i = 0, key, l = prioritize.length; i < l; i++)if ((key = prioritize[i]) in source) {\n handleKey(key);\n keys[key] = true;\n }\n processed = keys;\n }\n Object.keys(source.__unfiltered || source).forEach(handleKey);\n return dest;\n },\n isPlainValue: function(obj, asString) {\n return Base.isPlainObject(obj) || Array.isArray(obj) || asString && typeof obj === \"string\";\n },\n serialize: function(obj, options, compact, dictionary) {\n options = options || {};\n var isRoot = !dictionary, res;\n if (isRoot) {\n options.formatter = new Formatter(options.precision);\n dictionary = {\n length: 0,\n definitions: {},\n references: {},\n add: function(item, create) {\n var id = \"#\" + item._id, ref = this.references[id];\n if (!ref) {\n this.length++;\n var res = create.call(item), name = item._class;\n if (name && res[0] !== name) res.unshift(name);\n this.definitions[id] = res;\n ref = this.references[id] = [\n id\n ];\n }\n return ref;\n }\n };\n }\n if (obj && obj._serialize) {\n res = obj._serialize(options, dictionary);\n var name = obj._class;\n if (name && !obj._compactSerialize && (isRoot || !compact) && res[0] !== name) res.unshift(name);\n } else if (Array.isArray(obj)) {\n res = [];\n for(var i = 0, l = obj.length; i < l; i++)res[i] = Base.serialize(obj[i], options, compact, dictionary);\n } else if (Base.isPlainObject(obj)) {\n res = {};\n var keys = Object.keys(obj);\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i];\n res[key] = Base.serialize(obj[key], options, compact, dictionary);\n }\n } else if (typeof obj === \"number\") res = options.formatter.number(obj, options.precision);\n else res = obj;\n return isRoot && dictionary.length > 0 ? [\n [\n \"dictionary\",\n dictionary.definitions\n ],\n res\n ] : res;\n },\n deserialize: function(json, create, _data, _setDictionary, _isRoot) {\n var res = json, isFirst = !_data, hasDictionary = isFirst && json && json.length && json[0][0] === \"dictionary\";\n _data = _data || {};\n if (Array.isArray(json)) {\n var type = json[0], isDictionary = type === \"dictionary\";\n if (json.length == 1 && /^#/.test(type)) return _data.dictionary[type];\n type = Base.exports[type];\n res = [];\n for(var i = type ? 1 : 0, l = json.length; i < l; i++)res.push(Base.deserialize(json[i], create, _data, isDictionary, hasDictionary));\n if (type) {\n var args = res;\n if (create) res = create(type, args, isFirst || _isRoot);\n else res = new type(args);\n }\n } else if (Base.isPlainObject(json)) {\n res = {};\n if (_setDictionary) _data.dictionary = res;\n for(var key in json)res[key] = Base.deserialize(json[key], create, _data);\n }\n return hasDictionary ? res[1] : res;\n },\n exportJSON: function(obj, options) {\n var json = Base.serialize(obj, options);\n return options && options.asString == false ? json : JSON.stringify(json);\n },\n importJSON: function(json, target) {\n return Base.deserialize(typeof json === \"string\" ? JSON.parse(json) : json, function(ctor, args, isRoot) {\n var useTarget = isRoot && target && target.constructor === ctor, obj = useTarget ? target : Base.create(ctor.prototype);\n if (args.length === 1 && obj instanceof Item && (useTarget || !(obj instanceof Layer))) {\n var arg = args[0];\n if (Base.isPlainObject(arg)) {\n arg.insert = false;\n if (useTarget) args = args.concat([\n Item.INSERT\n ]);\n }\n }\n (useTarget ? obj.set : ctor).apply(obj, args);\n if (useTarget) target = null;\n return obj;\n });\n },\n push: function(list, items) {\n var itemsLength = items.length;\n if (itemsLength < 4096) list.push.apply(list, items);\n else {\n var startLength = list.length;\n list.length += itemsLength;\n for(var i = 0; i < itemsLength; i++)list[startLength + i] = items[i];\n }\n return list;\n },\n splice: function(list, items, index, remove) {\n var amount = items && items.length, append = index === undefined;\n index = append ? list.length : index;\n if (index > list.length) index = list.length;\n for(var i = 0; i < amount; i++)items[i]._index = index + i;\n if (append) {\n Base.push(list, items);\n return [];\n } else {\n var args = [\n index,\n remove\n ];\n if (items) Base.push(args, items);\n var removed = list.splice.apply(list, args);\n for(var i = 0, l = removed.length; i < l; i++)removed[i]._index = undefined;\n for(var i = index + amount, l = list.length; i < l; i++)list[i]._index = i;\n return removed;\n }\n },\n capitalize: function(str) {\n return str.replace(/\\b[a-z]/g, function(match) {\n return match.toUpperCase();\n });\n },\n camelize: function(str) {\n return str.replace(/-(.)/g, function(match, chr) {\n return chr.toUpperCase();\n });\n },\n hyphenate: function(str) {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n }\n }\n });\n var Emitter = {\n on: function(type, func) {\n if (typeof type !== \"string\") Base.each(type, function(value, key) {\n this.on(key, value);\n }, this);\n else {\n var types = this._eventTypes, entry = types && types[type], handlers = this._callbacks = this._callbacks || {};\n handlers = handlers[type] = handlers[type] || [];\n if (handlers.indexOf(func) === -1) {\n handlers.push(func);\n if (entry && entry.install && handlers.length === 1) entry.install.call(this, type);\n }\n }\n return this;\n },\n off: function(type, func) {\n if (typeof type !== \"string\") {\n Base.each(type, function(value, key) {\n this.off(key, value);\n }, this);\n return;\n }\n var types = this._eventTypes, entry = types && types[type], handlers = this._callbacks && this._callbacks[type], index;\n if (handlers) {\n if (!func || (index = handlers.indexOf(func)) !== -1 && handlers.length === 1) {\n if (entry && entry.uninstall) entry.uninstall.call(this, type);\n delete this._callbacks[type];\n } else if (index !== -1) handlers.splice(index, 1);\n }\n return this;\n },\n once: function(type, func) {\n return this.on(type, function handler() {\n func.apply(this, arguments);\n this.off(type, handler);\n });\n },\n emit: function(type, event) {\n var handlers = this._callbacks && this._callbacks[type];\n if (!handlers) return false;\n var args = Base.slice(arguments, 1), setTarget = event && event.target && !event.currentTarget;\n handlers = handlers.slice();\n if (setTarget) event.currentTarget = this;\n for(var i = 0, l = handlers.length; i < l; i++)if (handlers[i].apply(this, args) == false) {\n if (event && event.stop) event.stop();\n break;\n }\n if (setTarget) delete event.currentTarget;\n return true;\n },\n responds: function(type) {\n return !!(this._callbacks && this._callbacks[type]);\n },\n attach: \"#on\",\n detach: \"#off\",\n fire: \"#emit\",\n _installEvents: function(install) {\n var types = this._eventTypes, handlers = this._callbacks, key = install ? \"install\" : \"uninstall\";\n if (types) {\n for(var type in handlers)if (handlers[type].length > 0) {\n var entry = types[type], func = entry && entry[key];\n if (func) func.call(this, type);\n }\n }\n },\n statics: {\n inject: function inject(src) {\n var events = src._events;\n if (events) {\n var types = {};\n Base.each(events, function(entry, key) {\n var isString = typeof entry === \"string\", name = isString ? entry : key, part = Base.capitalize(name), type = name.substring(2).toLowerCase();\n types[type] = isString ? {} : entry;\n name = \"_\" + name;\n src[\"get\" + part] = function() {\n return this[name];\n };\n src[\"set\" + part] = function(func) {\n var prev = this[name];\n if (prev) this.off(type, prev);\n if (func) this.on(type, func);\n this[name] = func;\n };\n });\n src._eventTypes = types;\n }\n return inject.base.apply(this, arguments);\n }\n }\n };\n var PaperScope = Base.extend({\n _class: \"PaperScope\",\n initialize: function PaperScope() {\n paper = this;\n this.settings = new Base({\n applyMatrix: true,\n insertItems: true,\n handleSize: 4,\n hitTolerance: 0\n });\n this.project = null;\n this.projects = [];\n this.tools = [];\n this._id = PaperScope._id++;\n PaperScope._scopes[this._id] = this;\n var proto = PaperScope.prototype;\n if (!this.support) {\n var ctx = CanvasProvider.getContext(1, 1) || {};\n proto.support = {\n nativeDash: \"setLineDash\" in ctx || \"mozDash\" in ctx,\n nativeBlendModes: BlendMode.nativeModes\n };\n CanvasProvider.release(ctx);\n }\n if (!this.agent) {\n var user = self1.navigator.userAgent.toLowerCase(), os = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user) || [])[0], platform = os === \"darwin\" ? \"mac\" : os, agent = proto.agent = proto.browser = {\n platform: platform\n };\n if (platform) agent[platform] = true;\n user.replace(/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g, function(match, n, v1, v2, rv) {\n if (!agent.chrome) {\n var v = n === \"opera\" ? v2 : /^(node|trident)$/.test(n) ? rv : v1;\n agent.version = v;\n agent.versionNumber = parseFloat(v);\n n = ({\n trident: \"msie\",\n jsdom: \"node\"\n })[n] || n;\n agent.name = n;\n agent[n] = true;\n }\n });\n if (agent.chrome) delete agent.webkit;\n if (agent.atom) delete agent.chrome;\n }\n },\n version: \"0.12.17\",\n getView: function() {\n var project = this.project;\n return project && project._view;\n },\n getPaper: function() {\n return this;\n },\n execute: function(code, options) {\n var exports = paper.PaperScript.execute(code, this, options);\n View.updateFocus();\n return exports;\n },\n install: function(scope) {\n var that = this;\n Base.each([\n \"project\",\n \"view\",\n \"tool\"\n ], function(key) {\n Base.define(scope, key, {\n configurable: true,\n get: function() {\n return that[key];\n }\n });\n });\n for(var key in this)if (!/^_/.test(key) && this[key]) scope[key] = this[key];\n },\n setup: function(element) {\n paper = this;\n this.project = new Project(element);\n return this;\n },\n createCanvas: function(width, height) {\n return CanvasProvider.getCanvas(width, height);\n },\n activate: function() {\n paper = this;\n },\n clear: function() {\n var projects = this.projects, tools = this.tools;\n for(var i = projects.length - 1; i >= 0; i--)projects[i].remove();\n for(var i = tools.length - 1; i >= 0; i--)tools[i].remove();\n },\n remove: function() {\n this.clear();\n delete PaperScope._scopes[this._id];\n },\n statics: new function() {\n function handleAttribute(name) {\n name += \"Attribute\";\n return function(el, attr) {\n return el[name](attr) || el[name](\"data-paper-\" + attr);\n };\n }\n return {\n _scopes: {},\n _id: 0,\n get: function(id) {\n return this._scopes[id] || null;\n },\n getAttribute: handleAttribute(\"get\"),\n hasAttribute: handleAttribute(\"has\")\n };\n }\n });\n var PaperScopeItem = Base.extend(Emitter, {\n initialize: function(activate) {\n this._scope = paper;\n this._index = this._scope[this._list].push(this) - 1;\n if (activate || !this._scope[this._reference]) this.activate();\n },\n activate: function() {\n if (!this._scope) return false;\n var prev = this._scope[this._reference];\n if (prev && prev !== this) prev.emit(\"deactivate\");\n this._scope[this._reference] = this;\n this.emit(\"activate\", prev);\n return true;\n },\n isActive: function() {\n return this._scope[this._reference] === this;\n },\n remove: function() {\n if (this._index == null) return false;\n Base.splice(this._scope[this._list], null, this._index, 1);\n if (this._scope[this._reference] == this) this._scope[this._reference] = null;\n this._scope = null;\n return true;\n },\n getView: function() {\n return this._scope.getView();\n }\n });\n var CollisionDetection = {\n findItemBoundsCollisions: function(items1, items2, tolerance) {\n function getBounds(items) {\n var bounds = new Array(items.length);\n for(var i = 0; i < items.length; i++){\n var rect = items[i].getBounds();\n bounds[i] = [\n rect.left,\n rect.top,\n rect.right,\n rect.bottom\n ];\n }\n return bounds;\n }\n var bounds1 = getBounds(items1), bounds2 = !items2 || items2 === items1 ? bounds1 : getBounds(items2);\n return this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n },\n findCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n function getBounds(curves) {\n var min = Math.min, max = Math.max, bounds = new Array(curves.length);\n for(var i = 0; i < curves.length; i++){\n var v = curves[i];\n bounds[i] = [\n min(v[0], v[2], v[4], v[6]),\n min(v[1], v[3], v[5], v[7]),\n max(v[0], v[2], v[4], v[6]),\n max(v[1], v[3], v[5], v[7])\n ];\n }\n return bounds;\n }\n var bounds1 = getBounds(curves1), bounds2 = !curves2 || curves2 === curves1 ? bounds1 : getBounds(curves2);\n if (bothAxis) {\n var hor = this.findBoundsCollisions(bounds1, bounds2, tolerance || 0, false, true), ver = this.findBoundsCollisions(bounds1, bounds2, tolerance || 0, true, true), list = [];\n for(var i = 0, l = hor.length; i < l; i++)list[i] = {\n hor: hor[i],\n ver: ver[i]\n };\n return list;\n }\n return this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n },\n findBoundsCollisions: function(boundsA, boundsB, tolerance, sweepVertical, onlySweepAxisCollisions) {\n var self1 = !boundsB || boundsA === boundsB, allBounds = self1 ? boundsA : boundsA.concat(boundsB), lengthA = boundsA.length, lengthAll = allBounds.length;\n function binarySearch(indices, coord, value) {\n var lo = 0, hi = indices.length;\n while(lo < hi){\n var mid = hi + lo >>> 1;\n if (allBounds[indices[mid]][coord] < value) lo = mid + 1;\n else hi = mid;\n }\n return lo - 1;\n }\n var pri0 = sweepVertical ? 1 : 0, pri1 = pri0 + 2, sec0 = sweepVertical ? 0 : 1, sec1 = sec0 + 2;\n var allIndicesByPri0 = new Array(lengthAll);\n for(var i = 0; i < lengthAll; i++)allIndicesByPri0[i] = i;\n allIndicesByPri0.sort(function(i1, i2) {\n return allBounds[i1][pri0] - allBounds[i2][pri0];\n });\n var activeIndicesByPri1 = [], allCollisions = new Array(lengthA);\n for(var i = 0; i < lengthAll; i++){\n var curIndex = allIndicesByPri0[i], curBounds = allBounds[curIndex], origIndex = self1 ? curIndex : curIndex - lengthA, isCurrentA = curIndex < lengthA, isCurrentB = self1 || !isCurrentA, curCollisions = isCurrentA ? [] : null;\n if (activeIndicesByPri1.length) {\n var pruneCount = binarySearch(activeIndicesByPri1, pri1, curBounds[pri0] - tolerance) + 1;\n activeIndicesByPri1.splice(0, pruneCount);\n if (self1 && onlySweepAxisCollisions) {\n curCollisions = curCollisions.concat(activeIndicesByPri1);\n for(var j = 0; j < activeIndicesByPri1.length; j++){\n var activeIndex = activeIndicesByPri1[j];\n allCollisions[activeIndex].push(origIndex);\n }\n } else {\n var curSec1 = curBounds[sec1], curSec0 = curBounds[sec0];\n for(var j = 0; j < activeIndicesByPri1.length; j++){\n var activeIndex = activeIndicesByPri1[j], activeBounds = allBounds[activeIndex], isActiveA = activeIndex < lengthA, isActiveB = self1 || activeIndex >= lengthA;\n if (onlySweepAxisCollisions || (isCurrentA && isActiveB || isCurrentB && isActiveA) && curSec1 >= activeBounds[sec0] - tolerance && curSec0 <= activeBounds[sec1] + tolerance) {\n if (isCurrentA && isActiveB) curCollisions.push(self1 ? activeIndex : activeIndex - lengthA);\n if (isCurrentB && isActiveA) allCollisions[activeIndex].push(origIndex);\n }\n }\n }\n }\n if (isCurrentA) {\n if (boundsA === boundsB) curCollisions.push(curIndex);\n allCollisions[curIndex] = curCollisions;\n }\n if (activeIndicesByPri1.length) {\n var curPri1 = curBounds[pri1], index = binarySearch(activeIndicesByPri1, pri1, curPri1);\n activeIndicesByPri1.splice(index + 1, 0, curIndex);\n } else activeIndicesByPri1.push(curIndex);\n }\n for(var i = 0; i < allCollisions.length; i++){\n var collisions = allCollisions[i];\n if (collisions) collisions.sort(function(i1, i2) {\n return i1 - i2;\n });\n }\n return allCollisions;\n }\n };\n var Formatter = Base.extend({\n initialize: function(precision) {\n this.precision = Base.pick(precision, 5);\n this.multiplier = Math.pow(10, this.precision);\n },\n number: function(val) {\n return this.precision < 16 ? Math.round(val * this.multiplier) / this.multiplier : val;\n },\n pair: function(val1, val2, separator) {\n return this.number(val1) + (separator || \",\") + this.number(val2);\n },\n point: function(val, separator) {\n return this.number(val.x) + (separator || \",\") + this.number(val.y);\n },\n size: function(val, separator) {\n return this.number(val.width) + (separator || \",\") + this.number(val.height);\n },\n rectangle: function(val, separator) {\n return this.point(val, separator) + (separator || \",\") + this.size(val, separator);\n }\n });\n Formatter.instance = new Formatter();\n var Numerical = new function() {\n var abscissas = [\n [\n 0.5773502691896257645091488\n ],\n [\n 0,\n 0.7745966692414833770358531\n ],\n [\n 0.3399810435848562648026658,\n 0.8611363115940525752239465\n ],\n [\n 0,\n 0.5384693101056830910363144,\n 0.9061798459386639927976269\n ],\n [\n 0.2386191860831969086305017,\n 0.6612093864662645136613996,\n 0.9324695142031520278123016\n ],\n [\n 0,\n 0.4058451513773971669066064,\n 0.7415311855993944398638648,\n 0.9491079123427585245261897\n ],\n [\n 0.1834346424956498049394761,\n 0.5255324099163289858177390,\n 0.7966664774136267395915539,\n 0.9602898564975362316835609\n ],\n [\n 0,\n 0.3242534234038089290385380,\n 0.6133714327005903973087020,\n 0.8360311073266357942994298,\n 0.9681602395076260898355762\n ],\n [\n 0.1488743389816312108848260,\n 0.4333953941292471907992659,\n 0.6794095682990244062343274,\n 0.8650633666889845107320967,\n 0.9739065285171717200779640\n ],\n [\n 0,\n 0.2695431559523449723315320,\n 0.5190961292068118159257257,\n 0.7301520055740493240934163,\n 0.8870625997680952990751578,\n 0.9782286581460569928039380\n ],\n [\n 0.1252334085114689154724414,\n 0.3678314989981801937526915,\n 0.5873179542866174472967024,\n 0.7699026741943046870368938,\n 0.9041172563704748566784659,\n 0.9815606342467192506905491\n ],\n [\n 0,\n 0.2304583159551347940655281,\n 0.4484927510364468528779129,\n 0.6423493394403402206439846,\n 0.8015780907333099127942065,\n 0.9175983992229779652065478,\n 0.9841830547185881494728294\n ],\n [\n 0.1080549487073436620662447,\n 0.3191123689278897604356718,\n 0.5152486363581540919652907,\n 0.6872929048116854701480198,\n 0.8272013150697649931897947,\n 0.9284348836635735173363911,\n 0.9862838086968123388415973\n ],\n [\n 0,\n 0.2011940939974345223006283,\n 0.3941513470775633698972074,\n 0.5709721726085388475372267,\n 0.7244177313601700474161861,\n 0.8482065834104272162006483,\n 0.9372733924007059043077589,\n 0.9879925180204854284895657\n ],\n [\n 0.0950125098376374401853193,\n 0.2816035507792589132304605,\n 0.4580167776572273863424194,\n 0.6178762444026437484466718,\n 0.7554044083550030338951012,\n 0.8656312023878317438804679,\n 0.9445750230732325760779884,\n 0.9894009349916499325961542\n ]\n ];\n var weights = [\n [\n 1\n ],\n [\n 0.8888888888888888888888889,\n 0.5555555555555555555555556\n ],\n [\n 0.6521451548625461426269361,\n 0.3478548451374538573730639\n ],\n [\n 0.5688888888888888888888889,\n 0.4786286704993664680412915,\n 0.2369268850561890875142640\n ],\n [\n 0.4679139345726910473898703,\n 0.3607615730481386075698335,\n 0.1713244923791703450402961\n ],\n [\n 0.4179591836734693877551020,\n 0.3818300505051189449503698,\n 0.2797053914892766679014678,\n 0.1294849661688696932706114\n ],\n [\n 0.3626837833783619829651504,\n 0.3137066458778872873379622,\n 0.2223810344533744705443560,\n 0.1012285362903762591525314\n ],\n [\n 0.3302393550012597631645251,\n 0.3123470770400028400686304,\n 0.2606106964029354623187429,\n 0.1806481606948574040584720,\n 0.0812743883615744119718922\n ],\n [\n 0.2955242247147528701738930,\n 0.2692667193099963550912269,\n 0.2190863625159820439955349,\n 0.1494513491505805931457763,\n 0.0666713443086881375935688\n ],\n [\n 0.2729250867779006307144835,\n 0.2628045445102466621806889,\n 0.2331937645919904799185237,\n 0.1862902109277342514260976,\n 0.1255803694649046246346943,\n 0.0556685671161736664827537\n ],\n [\n 0.2491470458134027850005624,\n 0.2334925365383548087608499,\n 0.2031674267230659217490645,\n 0.1600783285433462263346525,\n 0.1069393259953184309602547,\n 0.0471753363865118271946160\n ],\n [\n 0.2325515532308739101945895,\n 0.2262831802628972384120902,\n 0.2078160475368885023125232,\n 0.1781459807619457382800467,\n 0.1388735102197872384636018,\n 0.0921214998377284479144218,\n 0.0404840047653158795200216\n ],\n [\n 0.2152638534631577901958764,\n 0.2051984637212956039659241,\n 0.1855383974779378137417166,\n 0.1572031671581935345696019,\n 0.1215185706879031846894148,\n 0.0801580871597602098056333,\n 0.0351194603317518630318329\n ],\n [\n 0.2025782419255612728806202,\n 0.1984314853271115764561183,\n 0.1861610000155622110268006,\n 0.1662692058169939335532009,\n 0.1395706779261543144478048,\n 0.1071592204671719350118695,\n 0.0703660474881081247092674,\n 0.0307532419961172683546284\n ],\n [\n 0.1894506104550684962853967,\n 0.1826034150449235888667637,\n 0.1691565193950025381893121,\n 0.1495959888165767320815017,\n 0.1246289712555338720524763,\n 0.0951585116824927848099251,\n 0.0622535239386478928628438,\n 0.0271524594117540948517806\n ]\n ];\n var abs = Math.abs, sqrt = Math.sqrt, pow = Math.pow, log2 = Math.log2 || function(x) {\n return Math.log(x) * Math.LOG2E;\n }, EPSILON = 1e-12, MACHINE_EPSILON = 1.12e-16;\n function clamp(value, min, max) {\n return value < min ? min : value > max ? max : value;\n }\n function getDiscriminant(a, b, c) {\n function split(v) {\n var x = v * 134217729, y = v - x, hi = y + x, lo = v - hi;\n return [\n hi,\n lo\n ];\n }\n var D = b * b - a * c, E = b * b + a * c;\n if (abs(D) * 3 < E) {\n var ad = split(a), bd = split(b), cd = split(c), p = b * b, dp = bd[0] * bd[0] - p + 2 * bd[0] * bd[1] + bd[1] * bd[1], q = a * c, dq = ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0] + ad[1] * cd[1];\n D = p - q + (dp - dq);\n }\n return D;\n }\n function getNormalizationFactor() {\n var norm = Math.max.apply(Math, arguments);\n return norm && (norm < 1e-8 || norm > 1e8) ? pow(2, -Math.round(log2(norm))) : 0;\n }\n return {\n EPSILON: EPSILON,\n MACHINE_EPSILON: MACHINE_EPSILON,\n CURVETIME_EPSILON: 1e-8,\n GEOMETRIC_EPSILON: 1e-7,\n TRIGONOMETRIC_EPSILON: 1e-8,\n ANGULAR_EPSILON: 1e-5,\n KAPPA: 4 * (sqrt(2) - 1) / 3,\n isZero: function(val) {\n return val >= -EPSILON && val <= EPSILON;\n },\n isMachineZero: function(val) {\n return val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n },\n clamp: clamp,\n integrate: function(f, a, b, n) {\n var x = abscissas[n - 2], w = weights[n - 2], A = (b - a) * 0.5, B = A + a, i = 0, m = n + 1 >> 1, sum = n & 1 ? w[i++] * f(B) : 0;\n while(i < m){\n var Ax = A * x[i];\n sum += w[i++] * (f(B + Ax) + f(B - Ax));\n }\n return A * sum;\n },\n findRoot: function(f, df, x, a, b, n, tolerance) {\n for(var i = 0; i < n; i++){\n var fx = f(x), dx = fx / df(x), nx = x - dx;\n if (abs(dx) < tolerance) {\n x = nx;\n break;\n }\n if (fx > 0) {\n b = x;\n x = nx <= a ? (a + b) * 0.5 : nx;\n } else {\n a = x;\n x = nx >= b ? (a + b) * 0.5 : nx;\n }\n }\n return clamp(x, a, b);\n },\n solveQuadratic: function(a, b, c, roots, min, max) {\n var x1, x2 = Infinity;\n if (abs(a) < EPSILON) {\n if (abs(b) < EPSILON) return abs(c) < EPSILON ? -1 : 0;\n x1 = -c / b;\n } else {\n b *= -0.5;\n var D = getDiscriminant(a, b, c);\n if (D && abs(D) < MACHINE_EPSILON) {\n var f = getNormalizationFactor(abs(a), abs(b), abs(c));\n if (f) {\n a *= f;\n b *= f;\n c *= f;\n D = getDiscriminant(a, b, c);\n }\n }\n if (D >= -MACHINE_EPSILON) {\n var Q = D < 0 ? 0 : sqrt(D), R = b + (b < 0 ? -Q : Q);\n if (R === 0) {\n x1 = c / a;\n x2 = -x1;\n } else {\n x1 = R / a;\n x2 = c / R;\n }\n }\n }\n var count = 0, boundless = min == null, minB = min - EPSILON, maxB = max + EPSILON;\n if (isFinite(x1) && (boundless || x1 > minB && x1 < maxB)) roots[count++] = boundless ? x1 : clamp(x1, min, max);\n if (x2 !== x1 && isFinite(x2) && (boundless || x2 > minB && x2 < maxB)) roots[count++] = boundless ? x2 : clamp(x2, min, max);\n return count;\n },\n solveCubic: function(a, b, c, d, roots, min, max) {\n var f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)), x, b1, c2, qd, q;\n if (f) {\n a *= f;\n b *= f;\n c *= f;\n d *= f;\n }\n function evaluate(x0) {\n x = x0;\n var tmp = a * x;\n b1 = tmp + b;\n c2 = b1 * x + c;\n qd = (tmp + b1) * x + c2;\n q = c2 * x + d;\n }\n if (abs(a) < EPSILON) {\n a = b;\n b1 = c;\n c2 = d;\n x = Infinity;\n } else if (abs(d) < EPSILON) {\n b1 = b;\n c2 = c;\n x = 0;\n } else {\n evaluate(-(b / a) / 3);\n var t = q / a, r = pow(abs(t), 1 / 3), s = t < 0 ? -1 : 1, td = -qd / a, rd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r, x0 = x - s * rd;\n if (x0 !== x) {\n do {\n evaluate(x0);\n x0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n }while (s * x0 > s * x);\n if (abs(a) * x * x > abs(d / x)) {\n c2 = -d / x;\n b1 = (c2 - c) / x;\n }\n }\n }\n var count = Numerical.solveQuadratic(a, b1, c2, roots, min, max), boundless = min == null;\n if (isFinite(x) && (count === 0 || count > 0 && x !== roots[0] && x !== roots[1]) && (boundless || x > min - EPSILON && x < max + EPSILON)) roots[count++] = boundless ? x : clamp(x, min, max);\n return count;\n }\n };\n };\n var UID = {\n _id: 1,\n _pools: {},\n get: function(name) {\n if (name) {\n var pool = this._pools[name];\n if (!pool) pool = this._pools[name] = {\n _id: 1\n };\n return pool._id++;\n } else return this._id++;\n }\n };\n var Point = Base.extend({\n _class: \"Point\",\n _readIndex: true,\n initialize: function Point(arg0, arg1) {\n var type = typeof arg0, reading = this.__read, read = 0;\n if (type === \"number\") {\n var hasY = typeof arg1 === \"number\";\n this._set(arg0, hasY ? arg1 : arg0);\n if (reading) read = hasY ? 2 : 1;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0);\n if (reading) read = arg0 === null ? 1 : 0;\n } else {\n var obj = type === \"string\" ? arg0.split(/[\\s,]+/) || [] : arg0;\n read = 1;\n if (Array.isArray(obj)) this._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n else if (\"x\" in obj) this._set(obj.x || 0, obj.y || 0);\n else if (\"width\" in obj) this._set(obj.width || 0, obj.height || 0);\n else if (\"angle\" in obj) {\n this._set(obj.length || 0, 0);\n this.setAngle(obj.angle || 0);\n } else {\n this._set(0, 0);\n read = 0;\n }\n }\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(x, y) {\n this.x = x;\n this.y = y;\n return this;\n },\n equals: function(point) {\n return this === point || point && (this.x === point.x && this.y === point.y || Array.isArray(point) && this.x === point[0] && this.y === point[1]) || false;\n },\n clone: function() {\n return new Point(this.x, this.y);\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ x: \" + f.number(this.x) + \", y: \" + f.number(this.y) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.x),\n f.number(this.y)\n ];\n },\n getLength: function() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n },\n setLength: function(length) {\n if (this.isZero()) {\n var angle = this._angle || 0;\n this._set(Math.cos(angle) * length, Math.sin(angle) * length);\n } else {\n var scale = length / this.getLength();\n if (Numerical.isZero(scale)) this.getAngle();\n this._set(this.x * scale, this.y * scale);\n }\n },\n getAngle: function() {\n return this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n },\n setAngle: function(angle) {\n this.setAngleInRadians.call(this, angle * Math.PI / 180);\n },\n getAngleInDegrees: \"#getAngle\",\n setAngleInDegrees: \"#setAngle\",\n getAngleInRadians: function() {\n if (!arguments.length) return this.isZero() ? this._angle || 0 : this._angle = Math.atan2(this.y, this.x);\n else {\n var point = Point.read(arguments), div = this.getLength() * point.getLength();\n if (Numerical.isZero(div)) return NaN;\n else {\n var a = this.dot(point) / div;\n return Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n }\n }\n },\n setAngleInRadians: function(angle) {\n this._angle = angle;\n if (!this.isZero()) {\n var length = this.getLength();\n this._set(Math.cos(angle) * length, Math.sin(angle) * length);\n }\n },\n getQuadrant: function() {\n return this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n }\n }, {\n beans: false,\n getDirectedAngle: function() {\n var point = Point.read(arguments);\n return Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n },\n getDistance: function() {\n var args = arguments, point = Point.read(args), x = point.x - this.x, y = point.y - this.y, d = x * x + y * y, squared = Base.read(args);\n return squared ? d : Math.sqrt(d);\n },\n normalize: function(length) {\n if (length === undefined) length = 1;\n var current = this.getLength(), scale = current !== 0 ? length / current : 0, point = new Point(this.x * scale, this.y * scale);\n if (scale >= 0) point._angle = this._angle;\n return point;\n },\n rotate: function(angle, center) {\n if (angle === 0) return this.clone();\n angle = angle * Math.PI / 180;\n var point = center ? this.subtract(center) : this, sin = Math.sin(angle), cos = Math.cos(angle);\n point = new Point(point.x * cos - point.y * sin, point.x * sin + point.y * cos);\n return center ? point.add(center) : point;\n },\n transform: function(matrix) {\n return matrix ? matrix._transformPoint(this) : this;\n },\n add: function() {\n var point = Point.read(arguments);\n return new Point(this.x + point.x, this.y + point.y);\n },\n subtract: function() {\n var point = Point.read(arguments);\n return new Point(this.x - point.x, this.y - point.y);\n },\n multiply: function() {\n var point = Point.read(arguments);\n return new Point(this.x * point.x, this.y * point.y);\n },\n divide: function() {\n var point = Point.read(arguments);\n return new Point(this.x / point.x, this.y / point.y);\n },\n modulo: function() {\n var point = Point.read(arguments);\n return new Point(this.x % point.x, this.y % point.y);\n },\n negate: function() {\n return new Point(-this.x, -this.y);\n },\n isInside: function() {\n return Rectangle.read(arguments).contains(this);\n },\n isClose: function() {\n var args = arguments, point = Point.read(args), tolerance = Base.read(args);\n return this.getDistance(point) <= tolerance;\n },\n isCollinear: function() {\n var point = Point.read(arguments);\n return Point.isCollinear(this.x, this.y, point.x, point.y);\n },\n isColinear: \"#isCollinear\",\n isOrthogonal: function() {\n var point = Point.read(arguments);\n return Point.isOrthogonal(this.x, this.y, point.x, point.y);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this.x) && isZero(this.y);\n },\n isNaN: function() {\n return isNaN(this.x) || isNaN(this.y);\n },\n isInQuadrant: function(q) {\n return this.x * (q > 1 && q < 4 ? -1 : 1) >= 0 && this.y * (q > 2 ? -1 : 1) >= 0;\n },\n dot: function() {\n var point = Point.read(arguments);\n return this.x * point.x + this.y * point.y;\n },\n cross: function() {\n var point = Point.read(arguments);\n return this.x * point.y - this.y * point.x;\n },\n project: function() {\n var point = Point.read(arguments), scale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n return new Point(point.x * scale, point.y * scale);\n },\n statics: {\n min: function() {\n var args = arguments, point1 = Point.read(args), point2 = Point.read(args);\n return new Point(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y));\n },\n max: function() {\n var args = arguments, point1 = Point.read(args), point2 = Point.read(args);\n return new Point(Math.max(point1.x, point2.x), Math.max(point1.y, point2.y));\n },\n random: function() {\n return new Point(Math.random(), Math.random());\n },\n isCollinear: function(x1, y1, x2, y2) {\n return Math.abs(x1 * y2 - y1 * x2) <= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2)) * 1e-8;\n },\n isOrthogonal: function(x1, y1, x2, y2) {\n return Math.abs(x1 * x2 + y1 * y2) <= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2)) * 1e-8;\n }\n }\n }, Base.each([\n \"round\",\n \"ceil\",\n \"floor\",\n \"abs\"\n ], function(key) {\n var op = Math[key];\n this[key] = function() {\n return new Point(op(this.x), op(this.y));\n };\n }, {}));\n var LinkedPoint = Point.extend({\n initialize: function Point(x, y, owner, setter) {\n this._x = x;\n this._y = y;\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(x, y, _dontNotify) {\n this._x = x;\n this._y = y;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n },\n getX: function() {\n return this._x;\n },\n setX: function(x) {\n this._x = x;\n this._owner[this._setter](this);\n },\n getY: function() {\n return this._y;\n },\n setY: function(y) {\n this._y = y;\n this._owner[this._setter](this);\n },\n isSelected: function() {\n return !!(this._owner._selection & this._getSelection());\n },\n setSelected: function(selected) {\n this._owner._changeSelection(this._getSelection(), selected);\n },\n _getSelection: function() {\n return this._setter === \"setPosition\" ? 4 : 0;\n }\n });\n var Size = Base.extend({\n _class: \"Size\",\n _readIndex: true,\n initialize: function Size(arg0, arg1) {\n var type = typeof arg0, reading = this.__read, read = 0;\n if (type === \"number\") {\n var hasHeight = typeof arg1 === \"number\";\n this._set(arg0, hasHeight ? arg1 : arg0);\n if (reading) read = hasHeight ? 2 : 1;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0);\n if (reading) read = arg0 === null ? 1 : 0;\n } else {\n var obj = type === \"string\" ? arg0.split(/[\\s,]+/) || [] : arg0;\n read = 1;\n if (Array.isArray(obj)) this._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n else if (\"width\" in obj) this._set(obj.width || 0, obj.height || 0);\n else if (\"x\" in obj) this._set(obj.x || 0, obj.y || 0);\n else {\n this._set(0, 0);\n read = 0;\n }\n }\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(width, height) {\n this.width = width;\n this.height = height;\n return this;\n },\n equals: function(size) {\n return size === this || size && (this.width === size.width && this.height === size.height || Array.isArray(size) && this.width === size[0] && this.height === size[1]) || false;\n },\n clone: function() {\n return new Size(this.width, this.height);\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ width: \" + f.number(this.width) + \", height: \" + f.number(this.height) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.width),\n f.number(this.height)\n ];\n },\n add: function() {\n var size = Size.read(arguments);\n return new Size(this.width + size.width, this.height + size.height);\n },\n subtract: function() {\n var size = Size.read(arguments);\n return new Size(this.width - size.width, this.height - size.height);\n },\n multiply: function() {\n var size = Size.read(arguments);\n return new Size(this.width * size.width, this.height * size.height);\n },\n divide: function() {\n var size = Size.read(arguments);\n return new Size(this.width / size.width, this.height / size.height);\n },\n modulo: function() {\n var size = Size.read(arguments);\n return new Size(this.width % size.width, this.height % size.height);\n },\n negate: function() {\n return new Size(-this.width, -this.height);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this.width) && isZero(this.height);\n },\n isNaN: function() {\n return isNaN(this.width) || isNaN(this.height);\n },\n statics: {\n min: function(size1, size2) {\n return new Size(Math.min(size1.width, size2.width), Math.min(size1.height, size2.height));\n },\n max: function(size1, size2) {\n return new Size(Math.max(size1.width, size2.width), Math.max(size1.height, size2.height));\n },\n random: function() {\n return new Size(Math.random(), Math.random());\n }\n }\n }, Base.each([\n \"round\",\n \"ceil\",\n \"floor\",\n \"abs\"\n ], function(key) {\n var op = Math[key];\n this[key] = function() {\n return new Size(op(this.width), op(this.height));\n };\n }, {}));\n var LinkedSize = Size.extend({\n initialize: function Size(width, height, owner, setter) {\n this._width = width;\n this._height = height;\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(width, height, _dontNotify) {\n this._width = width;\n this._height = height;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n },\n getWidth: function() {\n return this._width;\n },\n setWidth: function(width) {\n this._width = width;\n this._owner[this._setter](this);\n },\n getHeight: function() {\n return this._height;\n },\n setHeight: function(height) {\n this._height = height;\n this._owner[this._setter](this);\n }\n });\n var Rectangle = Base.extend({\n _class: \"Rectangle\",\n _readIndex: true,\n beans: true,\n initialize: function Rectangle(arg0, arg1, arg2, arg3) {\n var args = arguments, type = typeof arg0, read;\n if (type === \"number\") {\n this._set(arg0, arg1, arg2, arg3);\n read = 4;\n } else if (type === \"undefined\" || arg0 === null) {\n this._set(0, 0, 0, 0);\n read = arg0 === null ? 1 : 0;\n } else if (args.length === 1) {\n if (Array.isArray(arg0)) {\n this._set.apply(this, arg0);\n read = 1;\n } else if (arg0.x !== undefined || arg0.width !== undefined) {\n this._set(arg0.x || 0, arg0.y || 0, arg0.width || 0, arg0.height || 0);\n read = 1;\n } else if (arg0.from === undefined && arg0.to === undefined) {\n this._set(0, 0, 0, 0);\n if (Base.readSupported(args, this)) read = 1;\n }\n }\n if (read === undefined) {\n var frm = Point.readNamed(args, \"from\"), next = Base.peek(args), x = frm.x, y = frm.y, width, height;\n if (next && next.x !== undefined || Base.hasNamed(args, \"to\")) {\n var to = Point.readNamed(args, \"to\");\n width = to.x - x;\n height = to.y - y;\n if (width < 0) {\n x = to.x;\n width = -width;\n }\n if (height < 0) {\n y = to.y;\n height = -height;\n }\n } else {\n var size = Size.read(args);\n width = size.width;\n height = size.height;\n }\n this._set(x, y, width, height);\n read = args.__index;\n }\n var filtered = args.__filtered;\n if (filtered) this.__filtered = filtered;\n if (this.__read) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _set: function(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this;\n },\n clone: function() {\n return new Rectangle(this.x, this.y, this.width, this.height);\n },\n equals: function(rect) {\n var rt = Base.isPlainValue(rect) ? Rectangle.read(arguments) : rect;\n return rt === this || rt && this.x === rt.x && this.y === rt.y && this.width === rt.width && this.height === rt.height || false;\n },\n toString: function() {\n var f = Formatter.instance;\n return \"{ x: \" + f.number(this.x) + \", y: \" + f.number(this.y) + \", width: \" + f.number(this.width) + \", height: \" + f.number(this.height) + \" }\";\n },\n _serialize: function(options) {\n var f = options.formatter;\n return [\n f.number(this.x),\n f.number(this.y),\n f.number(this.width),\n f.number(this.height)\n ];\n },\n getPoint: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this.x, this.y, this, \"setPoint\");\n },\n setPoint: function() {\n var point = Point.read(arguments);\n this.x = point.x;\n this.y = point.y;\n },\n getSize: function(_dontLink) {\n var ctor = _dontLink ? Size : LinkedSize;\n return new ctor(this.width, this.height, this, \"setSize\");\n },\n _fw: 1,\n _fh: 1,\n setSize: function() {\n var size = Size.read(arguments), sx = this._sx, sy = this._sy, w = size.width, h = size.height;\n if (sx) this.x += (this.width - w) * sx;\n if (sy) this.y += (this.height - h) * sy;\n this.width = w;\n this.height = h;\n this._fw = this._fh = 1;\n },\n getLeft: function() {\n return this.x;\n },\n setLeft: function(left) {\n if (!this._fw) {\n var amount = left - this.x;\n this.width -= this._sx === 0.5 ? amount * 2 : amount;\n }\n this.x = left;\n this._sx = this._fw = 0;\n },\n getTop: function() {\n return this.y;\n },\n setTop: function(top) {\n if (!this._fh) {\n var amount = top - this.y;\n this.height -= this._sy === 0.5 ? amount * 2 : amount;\n }\n this.y = top;\n this._sy = this._fh = 0;\n },\n getRight: function() {\n return this.x + this.width;\n },\n setRight: function(right) {\n if (!this._fw) {\n var amount = right - this.x;\n this.width = this._sx === 0.5 ? amount * 2 : amount;\n }\n this.x = right - this.width;\n this._sx = 1;\n this._fw = 0;\n },\n getBottom: function() {\n return this.y + this.height;\n },\n setBottom: function(bottom) {\n if (!this._fh) {\n var amount = bottom - this.y;\n this.height = this._sy === 0.5 ? amount * 2 : amount;\n }\n this.y = bottom - this.height;\n this._sy = 1;\n this._fh = 0;\n },\n getCenterX: function() {\n return this.x + this.width / 2;\n },\n setCenterX: function(x) {\n if (this._fw || this._sx === 0.5) this.x = x - this.width / 2;\n else {\n if (this._sx) this.x += (x - this.x) * 2 * this._sx;\n this.width = (x - this.x) * 2;\n }\n this._sx = 0.5;\n this._fw = 0;\n },\n getCenterY: function() {\n return this.y + this.height / 2;\n },\n setCenterY: function(y) {\n if (this._fh || this._sy === 0.5) this.y = y - this.height / 2;\n else {\n if (this._sy) this.y += (y - this.y) * 2 * this._sy;\n this.height = (y - this.y) * 2;\n }\n this._sy = 0.5;\n this._fh = 0;\n },\n getCenter: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this.getCenterX(), this.getCenterY(), this, \"setCenter\");\n },\n setCenter: function() {\n var point = Point.read(arguments);\n this.setCenterX(point.x);\n this.setCenterY(point.y);\n return this;\n },\n getArea: function() {\n return this.width * this.height;\n },\n isEmpty: function() {\n return this.width === 0 || this.height === 0;\n },\n contains: function(arg) {\n return arg && arg.width !== undefined || (Array.isArray(arg) ? arg : arguments).length === 4 ? this._containsRectangle(Rectangle.read(arguments)) : this._containsPoint(Point.read(arguments));\n },\n _containsPoint: function(point) {\n var x = point.x, y = point.y;\n return x >= this.x && y >= this.y && x <= this.x + this.width && y <= this.y + this.height;\n },\n _containsRectangle: function(rect) {\n var x = rect.x, y = rect.y;\n return x >= this.x && y >= this.y && x + rect.width <= this.x + this.width && y + rect.height <= this.y + this.height;\n },\n intersects: function() {\n var rect = Rectangle.read(arguments), epsilon = Base.read(arguments) || 0;\n return rect.x + rect.width > this.x - epsilon && rect.y + rect.height > this.y - epsilon && rect.x < this.x + this.width + epsilon && rect.y < this.y + this.height + epsilon;\n },\n intersect: function() {\n var rect = Rectangle.read(arguments), x1 = Math.max(this.x, rect.x), y1 = Math.max(this.y, rect.y), x2 = Math.min(this.x + this.width, rect.x + rect.width), y2 = Math.min(this.y + this.height, rect.y + rect.height);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n unite: function() {\n var rect = Rectangle.read(arguments), x1 = Math.min(this.x, rect.x), y1 = Math.min(this.y, rect.y), x2 = Math.max(this.x + this.width, rect.x + rect.width), y2 = Math.max(this.y + this.height, rect.y + rect.height);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n include: function() {\n var point = Point.read(arguments);\n var x1 = Math.min(this.x, point.x), y1 = Math.min(this.y, point.y), x2 = Math.max(this.x + this.width, point.x), y2 = Math.max(this.y + this.height, point.y);\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n },\n expand: function() {\n var amount = Size.read(arguments), hor = amount.width, ver = amount.height;\n return new Rectangle(this.x - hor / 2, this.y - ver / 2, this.width + hor, this.height + ver);\n },\n scale: function(hor, ver) {\n return this.expand(this.width * hor - this.width, this.height * (ver === undefined ? hor : ver) - this.height);\n }\n }, Base.each([\n [\n \"Top\",\n \"Left\"\n ],\n [\n \"Top\",\n \"Right\"\n ],\n [\n \"Bottom\",\n \"Left\"\n ],\n [\n \"Bottom\",\n \"Right\"\n ],\n [\n \"Left\",\n \"Center\"\n ],\n [\n \"Top\",\n \"Center\"\n ],\n [\n \"Right\",\n \"Center\"\n ],\n [\n \"Bottom\",\n \"Center\"\n ]\n ], function(parts, index) {\n var part = parts.join(\"\"), xFirst = /^[RL]/.test(part);\n if (index >= 4) parts[1] += xFirst ? \"Y\" : \"X\";\n var x = parts[xFirst ? 0 : 1], y = parts[xFirst ? 1 : 0], getX = \"get\" + x, getY = \"get\" + y, setX = \"set\" + x, setY = \"set\" + y, get = \"get\" + part, set = \"set\" + part;\n this[get] = function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n return new ctor(this[getX](), this[getY](), this, set);\n };\n this[set] = function() {\n var point = Point.read(arguments);\n this[setX](point.x);\n this[setY](point.y);\n };\n }, {\n beans: true\n }));\n var LinkedRectangle = Rectangle.extend({\n initialize: function Rectangle(x, y, width, height, owner, setter) {\n this._set(x, y, width, height, true);\n this._owner = owner;\n this._setter = setter;\n },\n _set: function(x, y, width, height, _dontNotify) {\n this._x = x;\n this._y = y;\n this._width = width;\n this._height = height;\n if (!_dontNotify) this._owner[this._setter](this);\n return this;\n }\n }, new function() {\n var proto = Rectangle.prototype;\n return Base.each([\n \"x\",\n \"y\",\n \"width\",\n \"height\"\n ], function(key) {\n var part = Base.capitalize(key), internal = \"_\" + key;\n this[\"get\" + part] = function() {\n return this[internal];\n };\n this[\"set\" + part] = function(value) {\n this[internal] = value;\n if (!this._dontNotify) this._owner[this._setter](this);\n };\n }, Base.each([\n \"Point\",\n \"Size\",\n \"Center\",\n \"Left\",\n \"Top\",\n \"Right\",\n \"Bottom\",\n \"CenterX\",\n \"CenterY\",\n \"TopLeft\",\n \"TopRight\",\n \"BottomLeft\",\n \"BottomRight\",\n \"LeftCenter\",\n \"TopCenter\",\n \"RightCenter\",\n \"BottomCenter\"\n ], function(key) {\n var name = \"set\" + key;\n this[name] = function() {\n this._dontNotify = true;\n proto[name].apply(this, arguments);\n this._dontNotify = false;\n this._owner[this._setter](this);\n };\n }, {\n isSelected: function() {\n return !!(this._owner._selection & 2);\n },\n setSelected: function(selected) {\n var owner = this._owner;\n if (owner._changeSelection) owner._changeSelection(2, selected);\n }\n }));\n });\n var Matrix = Base.extend({\n _class: \"Matrix\",\n initialize: function Matrix(arg, _dontNotify) {\n var args = arguments, count = args.length, ok = true;\n if (count >= 6) this._set.apply(this, args);\n else if (count === 1 || count === 2) {\n if (arg instanceof Matrix) this._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty, _dontNotify);\n else if (Array.isArray(arg)) this._set.apply(this, _dontNotify ? arg.concat([\n _dontNotify\n ]) : arg);\n else ok = false;\n } else if (!count) this.reset();\n else ok = false;\n if (!ok) throw new Error(\"Unsupported matrix parameters\");\n return this;\n },\n set: \"#initialize\",\n _set: function(a, b, c, d, tx, ty, _dontNotify) {\n this._a = a;\n this._b = b;\n this._c = c;\n this._d = d;\n this._tx = tx;\n this._ty = ty;\n if (!_dontNotify) this._changed();\n return this;\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this.getValues(), options, true, dictionary);\n },\n _changed: function() {\n var owner = this._owner;\n if (owner) {\n if (owner._applyMatrix) owner.transform(null, true);\n else owner._changed(25);\n }\n },\n clone: function() {\n return new Matrix(this._a, this._b, this._c, this._d, this._tx, this._ty);\n },\n equals: function(mx) {\n return mx === this || mx && this._a === mx._a && this._b === mx._b && this._c === mx._c && this._d === mx._d && this._tx === mx._tx && this._ty === mx._ty;\n },\n toString: function() {\n var f = Formatter.instance;\n return \"[[\" + [\n f.number(this._a),\n f.number(this._c),\n f.number(this._tx)\n ].join(\", \") + \"], [\" + [\n f.number(this._b),\n f.number(this._d),\n f.number(this._ty)\n ].join(\", \") + \"]]\";\n },\n reset: function(_dontNotify) {\n this._a = this._d = 1;\n this._b = this._c = this._tx = this._ty = 0;\n if (!_dontNotify) this._changed();\n return this;\n },\n apply: function(recursively, _setApplyMatrix) {\n var owner = this._owner;\n if (owner) {\n owner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n return this.isIdentity();\n }\n return false;\n },\n translate: function() {\n var point = Point.read(arguments), x = point.x, y = point.y;\n this._tx += x * this._a + y * this._c;\n this._ty += x * this._b + y * this._d;\n this._changed();\n return this;\n },\n scale: function() {\n var args = arguments, scale = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n });\n if (center) this.translate(center);\n this._a *= scale.x;\n this._b *= scale.x;\n this._c *= scale.y;\n this._d *= scale.y;\n if (center) this.translate(center.negate());\n this._changed();\n return this;\n },\n rotate: function(angle) {\n angle *= Math.PI / 180;\n var center = Point.read(arguments, 1), x = center.x, y = center.y, cos = Math.cos(angle), sin = Math.sin(angle), tx = x - x * cos + y * sin, ty = y - x * sin - y * cos, a = this._a, b = this._b, c = this._c, d = this._d;\n this._a = cos * a + sin * c;\n this._b = cos * b + sin * d;\n this._c = -sin * a + cos * c;\n this._d = -sin * b + cos * d;\n this._tx += tx * a + ty * c;\n this._ty += tx * b + ty * d;\n this._changed();\n return this;\n },\n shear: function() {\n var args = arguments, shear = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n });\n if (center) this.translate(center);\n var a = this._a, b = this._b;\n this._a += shear.y * this._c;\n this._b += shear.y * this._d;\n this._c += shear.x * a;\n this._d += shear.x * b;\n if (center) this.translate(center.negate());\n this._changed();\n return this;\n },\n skew: function() {\n var args = arguments, skew = Point.read(args), center = Point.read(args, 0, {\n readNull: true\n }), toRadians = Math.PI / 180, shear = new Point(Math.tan(skew.x * toRadians), Math.tan(skew.y * toRadians));\n return this.shear(shear, center);\n },\n append: function(mx, _dontNotify) {\n if (mx) {\n var a1 = this._a, b1 = this._b, c1 = this._c, d1 = this._d, a2 = mx._a, b2 = mx._c, c2 = mx._b, d2 = mx._d, tx2 = mx._tx, ty2 = mx._ty;\n this._a = a2 * a1 + c2 * c1;\n this._c = b2 * a1 + d2 * c1;\n this._b = a2 * b1 + c2 * d1;\n this._d = b2 * b1 + d2 * d1;\n this._tx += tx2 * a1 + ty2 * c1;\n this._ty += tx2 * b1 + ty2 * d1;\n if (!_dontNotify) this._changed();\n }\n return this;\n },\n prepend: function(mx, _dontNotify) {\n if (mx) {\n var a1 = this._a, b1 = this._b, c1 = this._c, d1 = this._d, tx1 = this._tx, ty1 = this._ty, a2 = mx._a, b2 = mx._c, c2 = mx._b, d2 = mx._d, tx2 = mx._tx, ty2 = mx._ty;\n this._a = a2 * a1 + b2 * b1;\n this._c = a2 * c1 + b2 * d1;\n this._b = c2 * a1 + d2 * b1;\n this._d = c2 * c1 + d2 * d1;\n this._tx = a2 * tx1 + b2 * ty1 + tx2;\n this._ty = c2 * tx1 + d2 * ty1 + ty2;\n if (!_dontNotify) this._changed();\n }\n return this;\n },\n appended: function(mx) {\n return this.clone().append(mx);\n },\n prepended: function(mx) {\n return this.clone().prepend(mx);\n },\n invert: function() {\n var a = this._a, b = this._b, c = this._c, d = this._d, tx = this._tx, ty = this._ty, det = a * d - b * c, res = null;\n if (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n this._a = d / det;\n this._b = -b / det;\n this._c = -c / det;\n this._d = a / det;\n this._tx = (c * ty - d * tx) / det;\n this._ty = (b * tx - a * ty) / det;\n res = this;\n }\n return res;\n },\n inverted: function() {\n return this.clone().invert();\n },\n concatenate: \"#append\",\n preConcatenate: \"#prepend\",\n chain: \"#appended\",\n _shiftless: function() {\n return new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n },\n _orNullIfIdentity: function() {\n return this.isIdentity() ? null : this;\n },\n isIdentity: function() {\n return this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1 && this._tx === 0 && this._ty === 0;\n },\n isInvertible: function() {\n var det = this._a * this._d - this._c * this._b;\n return det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n },\n isSingular: function() {\n return !this.isInvertible();\n },\n transform: function(src, dst, count) {\n return arguments.length < 3 ? this._transformPoint(Point.read(arguments)) : this._transformCoordinates(src, dst, count);\n },\n _transformPoint: function(point, dest, _dontNotify) {\n var x = point.x, y = point.y;\n if (!dest) dest = new Point();\n return dest._set(x * this._a + y * this._c + this._tx, x * this._b + y * this._d + this._ty, _dontNotify);\n },\n _transformCoordinates: function(src, dst, count) {\n for(var i = 0, max = 2 * count; i < max; i += 2){\n var x = src[i], y = src[i + 1];\n dst[i] = x * this._a + y * this._c + this._tx;\n dst[i + 1] = x * this._b + y * this._d + this._ty;\n }\n return dst;\n },\n _transformCorners: function(rect) {\n var x1 = rect.x, y1 = rect.y, x2 = x1 + rect.width, y2 = y1 + rect.height, coords = [\n x1,\n y1,\n x2,\n y1,\n x2,\n y2,\n x1,\n y2\n ];\n return this._transformCoordinates(coords, coords, 4);\n },\n _transformBounds: function(bounds, dest, _dontNotify) {\n var coords = this._transformCorners(bounds), min = coords.slice(0, 2), max = min.slice();\n for(var i = 2; i < 8; i++){\n var val = coords[i], j = i & 1;\n if (val < min[j]) min[j] = val;\n else if (val > max[j]) max[j] = val;\n }\n if (!dest) dest = new Rectangle();\n return dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1], _dontNotify);\n },\n inverseTransform: function() {\n return this._inverseTransform(Point.read(arguments));\n },\n _inverseTransform: function(point, dest, _dontNotify) {\n var a = this._a, b = this._b, c = this._c, d = this._d, tx = this._tx, ty = this._ty, det = a * d - b * c, res = null;\n if (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n var x = point.x - this._tx, y = point.y - this._ty;\n if (!dest) dest = new Point();\n res = dest._set((x * d - y * c) / det, (y * a - x * b) / det, _dontNotify);\n }\n return res;\n },\n decompose: function() {\n var a = this._a, b = this._b, c = this._c, d = this._d, det = a * d - b * c, sqrt = Math.sqrt, atan2 = Math.atan2, degrees = 180 / Math.PI, rotate, scale, skew;\n if (a !== 0 || b !== 0) {\n var r = sqrt(a * a + b * b);\n rotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n scale = [\n r,\n det / r\n ];\n skew = [\n atan2(a * c + b * d, r * r),\n 0\n ];\n } else if (c !== 0 || d !== 0) {\n var s = sqrt(c * c + d * d);\n rotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n scale = [\n det / s,\n s\n ];\n skew = [\n 0,\n atan2(a * c + b * d, s * s)\n ];\n } else {\n rotate = 0;\n skew = scale = [\n 0,\n 0\n ];\n }\n return {\n translation: this.getTranslation(),\n rotation: rotate * degrees,\n scaling: new Point(scale),\n skewing: new Point(skew[0] * degrees, skew[1] * degrees)\n };\n },\n getValues: function() {\n return [\n this._a,\n this._b,\n this._c,\n this._d,\n this._tx,\n this._ty\n ];\n },\n getTranslation: function() {\n return new Point(this._tx, this._ty);\n },\n getScaling: function() {\n return this.decompose().scaling;\n },\n getRotation: function() {\n return this.decompose().rotation;\n },\n applyToContext: function(ctx) {\n if (!this.isIdentity()) ctx.transform(this._a, this._b, this._c, this._d, this._tx, this._ty);\n }\n }, Base.each([\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"tx\",\n \"ty\"\n ], function(key) {\n var part = Base.capitalize(key), prop = \"_\" + key;\n this[\"get\" + part] = function() {\n return this[prop];\n };\n this[\"set\" + part] = function(value) {\n this[prop] = value;\n this._changed();\n };\n }, {}));\n var Line = Base.extend({\n _class: \"Line\",\n initialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n var asVector = false;\n if (arguments.length >= 4) {\n this._px = arg0;\n this._py = arg1;\n this._vx = arg2;\n this._vy = arg3;\n asVector = arg4;\n } else {\n this._px = arg0.x;\n this._py = arg0.y;\n this._vx = arg1.x;\n this._vy = arg1.y;\n asVector = arg2;\n }\n if (!asVector) {\n this._vx -= this._px;\n this._vy -= this._py;\n }\n },\n getPoint: function() {\n return new Point(this._px, this._py);\n },\n getVector: function() {\n return new Point(this._vx, this._vy);\n },\n getLength: function() {\n return this.getVector().getLength();\n },\n intersect: function(line, isInfinite) {\n return Line.intersect(this._px, this._py, this._vx, this._vy, line._px, line._py, line._vx, line._vy, true, isInfinite);\n },\n getSide: function(point, isInfinite) {\n return Line.getSide(this._px, this._py, this._vx, this._vy, point.x, point.y, true, isInfinite);\n },\n getDistance: function(point) {\n return Math.abs(this.getSignedDistance(point));\n },\n getSignedDistance: function(point) {\n return Line.getSignedDistance(this._px, this._py, this._vx, this._vy, point.x, point.y, true);\n },\n isCollinear: function(line) {\n return Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n },\n isOrthogonal: function(line) {\n return Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n },\n statics: {\n intersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector, isInfinite) {\n if (!asVector) {\n v1x -= p1x;\n v1y -= p1y;\n v2x -= p2x;\n v2y -= p2y;\n }\n var cross = v1x * v2y - v1y * v2x;\n if (!Numerical.isMachineZero(cross)) {\n var dx = p1x - p2x, dy = p1y - p2y, u1 = (v2x * dy - v2y * dx) / cross, u2 = (v1x * dy - v1y * dx) / cross, epsilon = 1e-12, uMin = -epsilon, uMax = 1 + epsilon;\n if (isInfinite || uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n if (!isInfinite) u1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n return new Point(p1x + u1 * v1x, p1y + u1 * v1y);\n }\n }\n },\n getSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n if (!asVector) {\n vx -= px;\n vy -= py;\n }\n var v2x = x - px, v2y = y - py, ccw = v2x * vy - v2y * vx;\n if (!isInfinite && Numerical.isMachineZero(ccw)) {\n ccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n if (ccw >= 0 && ccw <= 1) ccw = 0;\n }\n return ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n },\n getSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n if (!asVector) {\n vx -= px;\n vy -= py;\n }\n return vx === 0 ? vy > 0 ? x - px : px - x : vy === 0 ? vx < 0 ? y - py : py - y : ((x - px) * vy - (y - py) * vx) / (vy > vx ? vy * Math.sqrt(1 + vx * vx / (vy * vy)) : vx * Math.sqrt(1 + vy * vy / (vx * vx)));\n },\n getDistance: function(px, py, vx, vy, x, y, asVector) {\n return Math.abs(Line.getSignedDistance(px, py, vx, vy, x, y, asVector));\n }\n }\n });\n var Project = PaperScopeItem.extend({\n _class: \"Project\",\n _list: \"projects\",\n _reference: \"project\",\n _compactSerialize: true,\n initialize: function Project(element) {\n PaperScopeItem.call(this, true);\n this._children = [];\n this._namedChildren = {};\n this._activeLayer = null;\n this._currentStyle = new Style(null, null, this);\n this._view = View.create(this, element || CanvasProvider.getCanvas(1, 1));\n this._selectionItems = {};\n this._selectionCount = 0;\n this._updateVersion = 0;\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this._children, options, true, dictionary);\n },\n _changed: function(flags, item) {\n if (flags & 1) {\n var view = this._view;\n if (view) {\n view._needsUpdate = true;\n if (!view._requested && view._autoUpdate) view.requestUpdate();\n }\n }\n var changes = this._changes;\n if (changes && item) {\n var changesById = this._changesById, id = item._id, entry = changesById[id];\n if (entry) entry.flags |= flags;\n else changes.push(changesById[id] = {\n item: item,\n flags: flags\n });\n }\n },\n clear: function() {\n var children = this._children;\n for(var i = children.length - 1; i >= 0; i--)children[i].remove();\n },\n isEmpty: function() {\n return !this._children.length;\n },\n remove: function remove() {\n if (!remove.base.call(this)) return false;\n if (this._view) this._view.remove();\n return true;\n },\n getView: function() {\n return this._view;\n },\n getCurrentStyle: function() {\n return this._currentStyle;\n },\n setCurrentStyle: function(style) {\n this._currentStyle.set(style);\n },\n getIndex: function() {\n return this._index;\n },\n getOptions: function() {\n return this._scope.settings;\n },\n getLayers: function() {\n return this._children;\n },\n getActiveLayer: function() {\n return this._activeLayer || new Layer({\n project: this,\n insert: true\n });\n },\n getSymbolDefinitions: function() {\n var definitions = [], ids = {};\n this.getItems({\n class: SymbolItem,\n match: function(item) {\n var definition = item._definition, id = definition._id;\n if (!ids[id]) {\n ids[id] = true;\n definitions.push(definition);\n }\n return false;\n }\n });\n return definitions;\n },\n getSymbols: \"getSymbolDefinitions\",\n getSelectedItems: function() {\n var selectionItems = this._selectionItems, items = [];\n for(var id in selectionItems){\n var item = selectionItems[id], selection = item._selection;\n if (selection & 1 && item.isInserted()) items.push(item);\n else if (!selection) this._updateSelection(item);\n }\n return items;\n },\n _updateSelection: function(item) {\n var id = item._id, selectionItems = this._selectionItems;\n if (item._selection) {\n if (selectionItems[id] !== item) {\n this._selectionCount++;\n selectionItems[id] = item;\n }\n } else if (selectionItems[id] === item) {\n this._selectionCount--;\n delete selectionItems[id];\n }\n },\n selectAll: function() {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setFullySelected(true);\n },\n deselectAll: function() {\n var selectionItems = this._selectionItems;\n for(var i in selectionItems)selectionItems[i].setFullySelected(false);\n },\n addLayer: function(layer) {\n return this.insertLayer(undefined, layer);\n },\n insertLayer: function(index, layer) {\n if (layer instanceof Layer) {\n layer._remove(false, true);\n Base.splice(this._children, [\n layer\n ], index, 0);\n layer._setProject(this, true);\n var name = layer._name;\n if (name) layer.setName(name);\n if (this._changes) layer._changed(5);\n if (!this._activeLayer) this._activeLayer = layer;\n } else layer = null;\n return layer;\n },\n _insertItem: function(index, item, _created) {\n item = this.insertLayer(index, item) || (this._activeLayer || this._insertItem(undefined, new Layer(Item.NO_INSERT), true)).insertChild(index, item);\n if (_created && item.activate) item.activate();\n return item;\n },\n getItems: function(options) {\n return Item._getItems(this, options);\n },\n getItem: function(options) {\n return Item._getItems(this, options, null, null, true)[0] || null;\n },\n importJSON: function(json) {\n this.activate();\n var layer = this._activeLayer;\n return Base.importJSON(json, layer && layer.isEmpty() && layer);\n },\n removeOn: function(type) {\n var sets = this._removeSets;\n if (sets) {\n if (type === \"mouseup\") sets.mousedrag = null;\n var set = sets[type];\n if (set) {\n for(var id in set){\n var item = set[id];\n for(var key in sets){\n var other = sets[key];\n if (other && other != set) delete other[item._id];\n }\n item.remove();\n }\n sets[type] = null;\n }\n }\n },\n draw: function(ctx, matrix, pixelRatio) {\n this._updateVersion++;\n ctx.save();\n matrix.applyToContext(ctx);\n var children = this._children, param = new Base({\n offset: new Point(0, 0),\n pixelRatio: pixelRatio,\n viewMatrix: matrix.isIdentity() ? null : matrix,\n matrices: [\n new Matrix()\n ],\n updateMatrix: true\n });\n for(var i = 0, l = children.length; i < l; i++)children[i].draw(ctx, param);\n ctx.restore();\n if (this._selectionCount > 0) {\n ctx.save();\n ctx.strokeWidth = 1;\n var items = this._selectionItems, size = this._scope.settings.handleSize, version = this._updateVersion;\n for(var id in items)items[id]._drawSelection(ctx, matrix, size, items, version);\n ctx.restore();\n }\n }\n });\n var Item = Base.extend(Emitter, {\n statics: {\n extend: function extend(src) {\n if (src._serializeFields) src._serializeFields = Base.set({}, this.prototype._serializeFields, src._serializeFields);\n return extend.base.apply(this, arguments);\n },\n INSERT: {\n insert: true\n },\n NO_INSERT: {\n insert: false\n }\n },\n _class: \"Item\",\n _name: null,\n _applyMatrix: true,\n _canApplyMatrix: true,\n _canScaleStroke: false,\n _pivot: null,\n _visible: true,\n _blendMode: \"normal\",\n _opacity: 1,\n _locked: false,\n _guide: false,\n _clipMask: false,\n _selection: 0,\n _selectBounds: true,\n _selectChildren: false,\n _serializeFields: {\n name: null,\n applyMatrix: null,\n matrix: new Matrix(),\n pivot: null,\n visible: true,\n blendMode: \"normal\",\n opacity: 1,\n locked: false,\n guide: false,\n clipMask: false,\n selected: false,\n data: {}\n },\n _prioritize: [\n \"applyMatrix\"\n ]\n }, new function() {\n var handlers = [\n \"onMouseDown\",\n \"onMouseUp\",\n \"onMouseDrag\",\n \"onClick\",\n \"onDoubleClick\",\n \"onMouseMove\",\n \"onMouseEnter\",\n \"onMouseLeave\"\n ];\n return Base.each(handlers, function(name) {\n this._events[name] = {\n install: function(type) {\n this.getView()._countItemEvent(type, 1);\n },\n uninstall: function(type) {\n this.getView()._countItemEvent(type, -1);\n }\n };\n }, {\n _events: {\n onFrame: {\n install: function() {\n this.getView()._animateItem(this, true);\n },\n uninstall: function() {\n this.getView()._animateItem(this, false);\n }\n },\n onLoad: {},\n onError: {}\n },\n statics: {\n _itemHandlers: handlers\n }\n });\n }, {\n initialize: function Item() {},\n _initialize: function(props, point) {\n var hasProps = props && Base.isPlainObject(props), internal = hasProps && props.internal === true, matrix = this._matrix = new Matrix(), project = hasProps && props.project || paper.project, settings = paper.settings;\n this._id = internal ? null : UID.get();\n this._parent = this._index = null;\n this._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n if (point) matrix.translate(point);\n matrix._owner = this;\n this._style = new Style(project._currentStyle, this, project);\n if (internal || hasProps && props.insert == false || !settings.insertItems && !(hasProps && props.insert == true)) this._setProject(project);\n else (hasProps && props.parent || project)._insertItem(undefined, this, true);\n if (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) this.set(props, {\n internal: true,\n insert: true,\n project: true,\n parent: true\n });\n return hasProps;\n },\n _serialize: function(options, dictionary) {\n var props = {}, that = this;\n function serialize(fields) {\n for(var key in fields){\n var value = that[key];\n if (!Base.equals(value, key === \"leading\" ? fields.fontSize * 1.2 : fields[key])) props[key] = Base.serialize(value, options, key !== \"data\", dictionary);\n }\n }\n serialize(this._serializeFields);\n if (!(this instanceof Group)) serialize(this._style._defaults);\n return [\n this._class,\n props\n ];\n },\n _changed: function(flags) {\n var symbol = this._symbol, cacheParent = this._parent || symbol, project = this._project;\n if (flags & 8) this._bounds = this._position = this._decomposed = undefined;\n if (flags & 16) this._globalMatrix = undefined;\n if (cacheParent && flags & 72) Item._clearBoundsCache(cacheParent);\n if (flags & 2) Item._clearBoundsCache(this);\n if (project) project._changed(flags, this);\n if (symbol) symbol._changed(flags);\n },\n getId: function() {\n return this._id;\n },\n getName: function() {\n return this._name;\n },\n setName: function(name) {\n if (this._name) this._removeNamed();\n if (name === +name + \"\") throw new Error(\"Names consisting only of numbers are not supported.\");\n var owner = this._getOwner();\n if (name && owner) {\n var children = owner._children, namedChildren = owner._namedChildren;\n (namedChildren[name] = namedChildren[name] || []).push(this);\n if (!(name in children)) children[name] = this;\n }\n this._name = name || undefined;\n this._changed(256);\n },\n getStyle: function() {\n return this._style;\n },\n setStyle: function(style) {\n this.getStyle().set(style);\n }\n }, Base.each([\n \"locked\",\n \"visible\",\n \"blendMode\",\n \"opacity\",\n \"guide\"\n ], function(name) {\n var part = Base.capitalize(name), key = \"_\" + name, flags = {\n locked: 256,\n visible: 265\n };\n this[\"get\" + part] = function() {\n return this[key];\n };\n this[\"set\" + part] = function(value) {\n if (value != this[key]) {\n this[key] = value;\n this._changed(flags[name] || 257);\n }\n };\n }, {}), {\n beans: true,\n getSelection: function() {\n return this._selection;\n },\n setSelection: function(selection) {\n if (selection !== this._selection) {\n this._selection = selection;\n var project = this._project;\n if (project) {\n project._updateSelection(this);\n this._changed(257);\n }\n }\n },\n _changeSelection: function(flag, selected) {\n var selection = this._selection;\n this.setSelection(selected ? selection | flag : selection & ~flag);\n },\n isSelected: function() {\n if (this._selectChildren) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)if (children[i].isSelected()) return true;\n }\n return !!(this._selection & 1);\n },\n setSelected: function(selected) {\n if (this._selectChildren) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setSelected(selected);\n }\n this._changeSelection(1, selected);\n },\n isFullySelected: function() {\n var children = this._children, selected = !!(this._selection & 1);\n if (children && selected) {\n for(var i = 0, l = children.length; i < l; i++)if (!children[i].isFullySelected()) return false;\n return true;\n }\n return selected;\n },\n setFullySelected: function(selected) {\n var children = this._children;\n if (children) for(var i = 0, l = children.length; i < l; i++)children[i].setFullySelected(selected);\n this._changeSelection(1, selected);\n },\n isClipMask: function() {\n return this._clipMask;\n },\n setClipMask: function(clipMask) {\n if (this._clipMask != (clipMask = !!clipMask)) {\n this._clipMask = clipMask;\n if (clipMask) {\n this.setFillColor(null);\n this.setStrokeColor(null);\n }\n this._changed(257);\n if (this._parent) this._parent._changed(2048);\n }\n },\n getData: function() {\n if (!this._data) this._data = {};\n return this._data;\n },\n setData: function(data) {\n this._data = data;\n },\n getPosition: function(_dontLink) {\n var ctor = _dontLink ? Point : LinkedPoint;\n var position = this._position || (this._position = this._getPositionFromBounds());\n return new ctor(position.x, position.y, this, \"setPosition\");\n },\n setPosition: function() {\n this.translate(Point.read(arguments).subtract(this.getPosition(true)));\n },\n _getPositionFromBounds: function(bounds) {\n return this._pivot ? this._matrix._transformPoint(this._pivot) : (bounds || this.getBounds()).getCenter(true);\n },\n getPivot: function() {\n var pivot = this._pivot;\n return pivot ? new LinkedPoint(pivot.x, pivot.y, this, \"setPivot\") : null;\n },\n setPivot: function() {\n this._pivot = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n this._position = undefined;\n }\n }, Base.each({\n getStrokeBounds: {\n stroke: true\n },\n getHandleBounds: {\n handle: true\n },\n getInternalBounds: {\n internal: true\n }\n }, function(options, key) {\n this[key] = function(matrix) {\n return this.getBounds(matrix, options);\n };\n }, {\n beans: true,\n getBounds: function(matrix, options) {\n var hasMatrix = options || matrix instanceof Matrix, opts = Base.set({}, hasMatrix ? options : matrix, this._boundsOptions);\n if (!opts.stroke || this.getStrokeScaling()) opts.cacheItem = this;\n var rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n return !arguments.length ? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height, this, \"setBounds\") : rect;\n },\n setBounds: function() {\n var rect = Rectangle.read(arguments), bounds = this.getBounds(), _matrix = this._matrix, matrix = new Matrix(), center = rect.getCenter();\n matrix.translate(center);\n if (rect.width != bounds.width || rect.height != bounds.height) {\n if (!_matrix.isInvertible()) {\n _matrix.set(_matrix._backup || new Matrix().translate(_matrix.getTranslation()));\n bounds = this.getBounds();\n }\n matrix.scale(bounds.width !== 0 ? rect.width / bounds.width : 0, bounds.height !== 0 ? rect.height / bounds.height : 0);\n }\n center = bounds.getCenter();\n matrix.translate(-center.x, -center.y);\n this.transform(matrix);\n },\n _getBounds: function(matrix, options) {\n var children = this._children;\n if (!children || !children.length) return new Rectangle();\n Item._updateBoundsCache(this, options.cacheItem);\n return Item._getBounds(children, matrix, options);\n },\n _getBoundsCacheKey: function(options, internal) {\n return [\n options.stroke ? 1 : 0,\n options.handle ? 1 : 0,\n internal ? 1 : 0\n ].join(\"\");\n },\n _getCachedBounds: function(matrix, options, noInternal) {\n matrix = matrix && matrix._orNullIfIdentity();\n var internal = options.internal && !noInternal, cacheItem = options.cacheItem, _matrix = internal ? null : this._matrix._orNullIfIdentity(), cacheKey = cacheItem && (!matrix || matrix.equals(_matrix)) && this._getBoundsCacheKey(options, internal), bounds = this._bounds;\n Item._updateBoundsCache(this._parent || this._symbol, cacheItem);\n if (cacheKey && bounds && cacheKey in bounds) {\n var cached = bounds[cacheKey];\n return {\n rect: cached.rect.clone(),\n nonscaling: cached.nonscaling\n };\n }\n var res = this._getBounds(matrix || _matrix, options), rect = res.rect || res, style = this._style, nonscaling = res.nonscaling || style.hasStroke() && !style.getStrokeScaling();\n if (cacheKey) {\n if (!bounds) this._bounds = bounds = {};\n var cached = bounds[cacheKey] = {\n rect: rect.clone(),\n nonscaling: nonscaling,\n internal: internal\n };\n }\n return {\n rect: rect,\n nonscaling: nonscaling\n };\n },\n _getStrokeMatrix: function(matrix, options) {\n var parent = this.getStrokeScaling() ? null : options && options.internal ? this : this._parent || this._symbol && this._symbol._item, mx = parent ? parent.getViewMatrix().invert() : matrix;\n return mx && mx._shiftless();\n },\n statics: {\n _updateBoundsCache: function(parent, item) {\n if (parent && item) {\n var id = item._id, ref = parent._boundsCache = parent._boundsCache || {\n ids: {},\n list: []\n };\n if (!ref.ids[id]) {\n ref.list.push(item);\n ref.ids[id] = item;\n }\n }\n },\n _clearBoundsCache: function(item) {\n var cache = item._boundsCache;\n if (cache) {\n item._bounds = item._position = item._boundsCache = undefined;\n for(var i = 0, list = cache.list, l = list.length; i < l; i++){\n var other = list[i];\n if (other !== item) {\n other._bounds = other._position = undefined;\n if (other._boundsCache) Item._clearBoundsCache(other);\n }\n }\n }\n },\n _getBounds: function(items, matrix, options) {\n var x1 = Infinity, x2 = -x1, y1 = x1, y2 = x2, nonscaling = false;\n options = options || {};\n for(var i = 0, l = items.length; i < l; i++){\n var item = items[i];\n if (item._visible && !item.isEmpty(true)) {\n var bounds = item._getCachedBounds(matrix && matrix.appended(item._matrix), options, true), rect = bounds.rect;\n x1 = Math.min(rect.x, x1);\n y1 = Math.min(rect.y, y1);\n x2 = Math.max(rect.x + rect.width, x2);\n y2 = Math.max(rect.y + rect.height, y2);\n if (bounds.nonscaling) nonscaling = true;\n }\n }\n return {\n rect: isFinite(x1) ? new Rectangle(x1, y1, x2 - x1, y2 - y1) : new Rectangle(),\n nonscaling: nonscaling\n };\n }\n }\n }), {\n beans: true,\n _decompose: function() {\n return this._applyMatrix ? null : this._decomposed || (this._decomposed = this._matrix.decompose());\n },\n getRotation: function() {\n var decomposed = this._decompose();\n return decomposed ? decomposed.rotation : 0;\n },\n setRotation: function(rotation) {\n var current = this.getRotation();\n if (current != null && rotation != null) {\n var decomposed = this._decomposed;\n this.rotate(rotation - current);\n if (decomposed) {\n decomposed.rotation = rotation;\n this._decomposed = decomposed;\n }\n }\n },\n getScaling: function() {\n var decomposed = this._decompose(), s = decomposed && decomposed.scaling;\n return new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, \"setScaling\");\n },\n setScaling: function() {\n var current = this.getScaling(), scaling = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n if (current && scaling && !current.equals(scaling)) {\n var rotation = this.getRotation(), decomposed = this._decomposed, matrix = new Matrix(), isZero = Numerical.isZero;\n if (isZero(current.x) || isZero(current.y)) {\n matrix.translate(decomposed.translation);\n if (rotation) matrix.rotate(rotation);\n matrix.scale(scaling.x, scaling.y);\n this._matrix.set(matrix);\n } else {\n var center = this.getPosition(true);\n matrix.translate(center);\n if (rotation) matrix.rotate(rotation);\n matrix.scale(scaling.x / current.x, scaling.y / current.y);\n if (rotation) matrix.rotate(-rotation);\n matrix.translate(center.negate());\n this.transform(matrix);\n }\n if (decomposed) {\n decomposed.scaling = scaling;\n this._decomposed = decomposed;\n }\n }\n },\n getMatrix: function() {\n return this._matrix;\n },\n setMatrix: function() {\n var matrix = this._matrix;\n matrix.set.apply(matrix, arguments);\n },\n getGlobalMatrix: function(_dontClone) {\n var matrix = this._globalMatrix;\n if (matrix) {\n var parent = this._parent;\n var parents = [];\n while(parent){\n if (!parent._globalMatrix) {\n matrix = null;\n for(var i = 0, l = parents.length; i < l; i++)parents[i]._globalMatrix = null;\n break;\n }\n parents.push(parent);\n parent = parent._parent;\n }\n }\n if (!matrix) {\n matrix = this._globalMatrix = this._matrix.clone();\n var parent = this._parent;\n if (parent) matrix.prepend(parent.getGlobalMatrix(true));\n }\n return _dontClone ? matrix : matrix.clone();\n },\n getViewMatrix: function() {\n return this.getGlobalMatrix().prepend(this.getView()._matrix);\n },\n getApplyMatrix: function() {\n return this._applyMatrix;\n },\n setApplyMatrix: function(apply) {\n if (this._applyMatrix = this._canApplyMatrix && !!apply) this.transform(null, true);\n },\n getTransformContent: \"#getApplyMatrix\",\n setTransformContent: \"#setApplyMatrix\"\n }, {\n getProject: function() {\n return this._project;\n },\n _setProject: function(project, installEvents) {\n if (this._project !== project) {\n if (this._project) this._installEvents(false);\n this._project = project;\n var children = this._children;\n for(var i = 0, l = children && children.length; i < l; i++)children[i]._setProject(project);\n installEvents = true;\n }\n if (installEvents) this._installEvents(true);\n },\n getView: function() {\n return this._project._view;\n },\n _installEvents: function _installEvents(install) {\n _installEvents.base.call(this, install);\n var children = this._children;\n for(var i = 0, l = children && children.length; i < l; i++)children[i]._installEvents(install);\n },\n getLayer: function() {\n var parent = this;\n while(parent = parent._parent){\n if (parent instanceof Layer) return parent;\n }\n return null;\n },\n getParent: function() {\n return this._parent;\n },\n setParent: function(item) {\n return item.addChild(this);\n },\n _getOwner: \"#getParent\",\n getChildren: function() {\n return this._children;\n },\n setChildren: function(items) {\n this.removeChildren();\n this.addChildren(items);\n },\n getFirstChild: function() {\n return this._children && this._children[0] || null;\n },\n getLastChild: function() {\n return this._children && this._children[this._children.length - 1] || null;\n },\n getNextSibling: function() {\n var owner = this._getOwner();\n return owner && owner._children[this._index + 1] || null;\n },\n getPreviousSibling: function() {\n var owner = this._getOwner();\n return owner && owner._children[this._index - 1] || null;\n },\n getIndex: function() {\n return this._index;\n },\n equals: function(item) {\n return item === this || item && this._class === item._class && this._style.equals(item._style) && this._matrix.equals(item._matrix) && this._locked === item._locked && this._visible === item._visible && this._blendMode === item._blendMode && this._opacity === item._opacity && this._clipMask === item._clipMask && this._guide === item._guide && this._equals(item) || false;\n },\n _equals: function(item) {\n return Base.equals(this._children, item._children);\n },\n clone: function(options) {\n var copy = new this.constructor(Item.NO_INSERT), children = this._children, insert = Base.pick(options ? options.insert : undefined, options === undefined || options === true), deep = Base.pick(options ? options.deep : undefined, true);\n if (children) copy.copyAttributes(this);\n if (!children || deep) copy.copyContent(this);\n if (!children) copy.copyAttributes(this);\n if (insert) copy.insertAbove(this);\n var name = this._name, parent = this._parent;\n if (name && parent) {\n var children = parent._children, orig = name, i = 1;\n while(children[name])name = orig + \" \" + i++;\n if (name !== orig) copy.setName(name);\n }\n return copy;\n },\n copyContent: function(source) {\n var children = source._children;\n for(var i = 0, l = children && children.length; i < l; i++)this.addChild(children[i].clone(false), true);\n },\n copyAttributes: function(source, excludeMatrix) {\n this.setStyle(source._style);\n var keys = [\n \"_locked\",\n \"_visible\",\n \"_blendMode\",\n \"_opacity\",\n \"_clipMask\",\n \"_guide\"\n ];\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i];\n if (source.hasOwnProperty(key)) this[key] = source[key];\n }\n if (!excludeMatrix) this._matrix.set(source._matrix, true);\n this.setApplyMatrix(source._applyMatrix);\n this.setPivot(source._pivot);\n this.setSelection(source._selection);\n var data = source._data, name = source._name;\n this._data = data ? Base.clone(data) : null;\n if (name) this.setName(name);\n },\n rasterize: function(arg0, arg1) {\n var resolution, insert, raster;\n if (Base.isPlainObject(arg0)) {\n resolution = arg0.resolution;\n insert = arg0.insert;\n raster = arg0.raster;\n } else {\n resolution = arg0;\n insert = arg1;\n }\n if (!raster) raster = new Raster(Item.NO_INSERT);\n var bounds = this.getStrokeBounds(), scale = (resolution || this.getView().getResolution()) / 72, topLeft = bounds.getTopLeft().floor(), bottomRight = bounds.getBottomRight().ceil(), boundsSize = new Size(bottomRight.subtract(topLeft)), rasterSize = boundsSize.multiply(scale);\n raster.setSize(rasterSize, true);\n if (!rasterSize.isZero()) {\n var ctx = raster.getContext(true), matrix = new Matrix().scale(scale).translate(topLeft.negate());\n ctx.save();\n matrix.applyToContext(ctx);\n this.draw(ctx, new Base({\n matrices: [\n matrix\n ]\n }));\n ctx.restore();\n }\n raster._matrix.set(new Matrix().translate(topLeft.add(boundsSize.divide(2))).scale(1 / scale));\n if (insert === undefined || insert) raster.insertAbove(this);\n return raster;\n },\n contains: function() {\n var matrix = this._matrix;\n return matrix.isInvertible() && !!this._contains(matrix._inverseTransform(Point.read(arguments)));\n },\n _contains: function(point) {\n var children = this._children;\n if (children) {\n for(var i = children.length - 1; i >= 0; i--){\n if (children[i].contains(point)) return true;\n }\n return false;\n }\n return point.isInside(this.getInternalBounds());\n },\n isInside: function() {\n return Rectangle.read(arguments).contains(this.getBounds());\n },\n _asPathItem: function() {\n return new Path.Rectangle({\n rectangle: this.getInternalBounds(),\n matrix: this._matrix,\n insert: false\n });\n },\n intersects: function(item, _matrix) {\n if (!(item instanceof Item)) return false;\n return this._asPathItem().getIntersections(item._asPathItem(), null, _matrix, true).length > 0;\n }\n }, new function() {\n function hitTest() {\n var args = arguments;\n return this._hitTest(Point.read(args), HitResult.getOptions(args));\n }\n function hitTestAll() {\n var args = arguments, point = Point.read(args), options = HitResult.getOptions(args), all = [];\n this._hitTest(point, new Base({\n all: all\n }, options));\n return all;\n }\n function hitTestChildren(point, options, viewMatrix, _exclude) {\n var children = this._children;\n if (children) for(var i = children.length - 1; i >= 0; i--){\n var child = children[i];\n var res = child !== _exclude && child._hitTest(point, options, viewMatrix);\n if (res && !options.all) return res;\n }\n return null;\n }\n Project.inject({\n hitTest: hitTest,\n hitTestAll: hitTestAll,\n _hitTest: hitTestChildren\n });\n return {\n hitTest: hitTest,\n hitTestAll: hitTestAll,\n _hitTestChildren: hitTestChildren\n };\n }, {\n _hitTest: function(point, options, parentViewMatrix) {\n if (this._locked || !this._visible || this._guide && !options.guides || this.isEmpty()) return null;\n var matrix = this._matrix, viewMatrix = parentViewMatrix ? parentViewMatrix.appended(matrix) : this.getGlobalMatrix().prepend(this.getView()._matrix), tolerance = Math.max(options.tolerance, 1e-12), tolerancePadding = options._tolerancePadding = new Size(Path._getStrokePadding(tolerance, matrix._shiftless().invert()));\n point = matrix._inverseTransform(point);\n if (!point || !this._children && !this.getBounds({\n internal: true,\n stroke: true,\n handle: true\n }).expand(tolerancePadding.multiply(2))._containsPoint(point)) return null;\n var checkSelf = !(options.guides && !this._guide || options.selected && !this.isSelected() || options.type && options.type !== Base.hyphenate(this._class) || options.class && !(this instanceof options.class)), match = options.match, that = this, bounds, res;\n function filter(hit) {\n if (hit && match && !match(hit)) hit = null;\n if (hit && options.all) options.all.push(hit);\n return hit;\n }\n function checkPoint(type, part) {\n var pt = part ? bounds[\"get\" + part]() : that.getPosition();\n if (point.subtract(pt).divide(tolerancePadding).length <= 1) return new HitResult(type, that, {\n name: part ? Base.hyphenate(part) : type,\n point: pt\n });\n }\n var checkPosition = options.position, checkCenter = options.center, checkBounds = options.bounds;\n if (checkSelf && this._parent && (checkPosition || checkCenter || checkBounds)) {\n if (checkCenter || checkBounds) bounds = this.getInternalBounds();\n res = checkPosition && checkPoint(\"position\") || checkCenter && checkPoint(\"center\", \"Center\");\n if (!res && checkBounds) {\n var points = [\n \"TopLeft\",\n \"TopRight\",\n \"BottomLeft\",\n \"BottomRight\",\n \"LeftCenter\",\n \"TopCenter\",\n \"RightCenter\",\n \"BottomCenter\"\n ];\n for(var i = 0; i < 8 && !res; i++)res = checkPoint(\"bounds\", points[i]);\n }\n res = filter(res);\n }\n if (!res) res = this._hitTestChildren(point, options, viewMatrix) || checkSelf && filter(this._hitTestSelf(point, options, viewMatrix, this.getStrokeScaling() ? null : viewMatrix._shiftless().invert())) || null;\n if (res && res.point) res.point = matrix.transform(res.point);\n return res;\n },\n _hitTestSelf: function(point, options) {\n if (options.fill && this.hasFill() && this._contains(point)) return new HitResult(\"fill\", this);\n },\n matches: function(name, compare) {\n function matchObject(obj1, obj2) {\n for(var i in obj1)if (obj1.hasOwnProperty(i)) {\n var val1 = obj1[i], val2 = obj2[i];\n if (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n if (!matchObject(val1, val2)) return false;\n } else if (!Base.equals(val1, val2)) return false;\n }\n return true;\n }\n var type = typeof name;\n if (type === \"object\") {\n for(var key in name){\n if (name.hasOwnProperty(key) && !this.matches(key, name[key])) return false;\n }\n return true;\n } else if (type === \"function\") return name(this);\n else if (name === \"match\") return compare(this);\n else {\n var value = /^(empty|editable)$/.test(name) ? this[\"is\" + Base.capitalize(name)]() : name === \"type\" ? Base.hyphenate(this._class) : this[name];\n if (name === \"class\") {\n if (typeof compare === \"function\") return this instanceof compare;\n value = this._class;\n }\n if (typeof compare === \"function\") return !!compare(value);\n else if (compare) {\n if (compare.test) return compare.test(value);\n else if (Base.isPlainObject(compare)) return matchObject(compare, value);\n }\n return Base.equals(value, compare);\n }\n },\n getItems: function(options) {\n return Item._getItems(this, options, this._matrix);\n },\n getItem: function(options) {\n return Item._getItems(this, options, this._matrix, null, true)[0] || null;\n },\n statics: {\n _getItems: function _getItems(item, options, matrix, param, firstOnly) {\n if (!param) {\n var obj = typeof options === \"object\" && options, overlapping = obj && obj.overlapping, inside = obj && obj.inside, bounds = overlapping || inside, rect = bounds && Rectangle.read([\n bounds\n ]);\n param = {\n items: [],\n recursive: obj && obj.recursive !== false,\n inside: !!inside,\n overlapping: !!overlapping,\n rect: rect,\n path: overlapping && new Path.Rectangle({\n rectangle: rect,\n insert: false\n })\n };\n if (obj) options = Base.filter({}, options, {\n recursive: true,\n inside: true,\n overlapping: true\n });\n }\n var children = item._children, items = param.items, rect = param.rect;\n matrix = rect && (matrix || new Matrix());\n for(var i = 0, l = children && children.length; i < l; i++){\n var child = children[i], childMatrix = matrix && matrix.appended(child._matrix), add = true;\n if (rect) {\n var bounds = child.getBounds(childMatrix);\n if (!rect.intersects(bounds)) continue;\n if (!(rect.contains(bounds) || param.overlapping && (bounds.contains(rect) || param.path.intersects(child, childMatrix)))) add = false;\n }\n if (add && child.matches(options)) {\n items.push(child);\n if (firstOnly) break;\n }\n if (param.recursive !== false) _getItems(child, options, childMatrix, param, firstOnly);\n if (firstOnly && items.length > 0) break;\n }\n return items;\n }\n }\n }, {\n importJSON: function(json) {\n var res = Base.importJSON(json, this);\n return res !== this ? this.addChild(res) : res;\n },\n addChild: function(item) {\n return this.insertChild(undefined, item);\n },\n insertChild: function(index, item) {\n var res = item ? this.insertChildren(index, [\n item\n ]) : null;\n return res && res[0];\n },\n addChildren: function(items) {\n return this.insertChildren(this._children.length, items);\n },\n insertChildren: function(index, items) {\n var children = this._children;\n if (children && items && items.length > 0) {\n items = Base.slice(items);\n var inserted = {};\n for(var i = items.length - 1; i >= 0; i--){\n var item = items[i], id = item && item._id;\n if (!item || inserted[id]) items.splice(i, 1);\n else {\n item._remove(false, true);\n inserted[id] = true;\n }\n }\n Base.splice(children, items, index, 0);\n var project = this._project, notifySelf = project._changes;\n for(var i = 0, l = items.length; i < l; i++){\n var item = items[i], name = item._name;\n item._parent = this;\n item._setProject(project, true);\n if (name) item.setName(name);\n if (notifySelf) item._changed(5);\n }\n this._changed(11);\n } else items = null;\n return items;\n },\n _insertItem: \"#insertChild\",\n _insertAt: function(item, offset) {\n var owner = item && item._getOwner(), res = item !== this && owner ? this : null;\n if (res) {\n res._remove(false, true);\n owner._insertItem(item._index + offset, res);\n }\n return res;\n },\n insertAbove: function(item) {\n return this._insertAt(item, 1);\n },\n insertBelow: function(item) {\n return this._insertAt(item, 0);\n },\n sendToBack: function() {\n var owner = this._getOwner();\n return owner ? owner._insertItem(0, this) : null;\n },\n bringToFront: function() {\n var owner = this._getOwner();\n return owner ? owner._insertItem(undefined, this) : null;\n },\n appendTop: \"#addChild\",\n appendBottom: function(item) {\n return this.insertChild(0, item);\n },\n moveAbove: \"#insertAbove\",\n moveBelow: \"#insertBelow\",\n addTo: function(owner) {\n return owner._insertItem(undefined, this);\n },\n copyTo: function(owner) {\n return this.clone(false).addTo(owner);\n },\n reduce: function(options) {\n var children = this._children;\n if (children && children.length === 1) {\n var child = children[0].reduce(options);\n if (this._parent) {\n child.insertAbove(this);\n this.remove();\n } else child.remove();\n return child;\n }\n return this;\n },\n _removeNamed: function() {\n var owner = this._getOwner();\n if (owner) {\n var children = owner._children, namedChildren = owner._namedChildren, name = this._name, namedArray = namedChildren[name], index = namedArray ? namedArray.indexOf(this) : -1;\n if (index !== -1) {\n if (children[name] == this) delete children[name];\n namedArray.splice(index, 1);\n if (namedArray.length) children[name] = namedArray[0];\n else delete namedChildren[name];\n }\n }\n },\n _remove: function(notifySelf, notifyParent) {\n var owner = this._getOwner(), project = this._project, index = this._index;\n if (this._style) this._style._dispose();\n if (owner) {\n if (this._name) this._removeNamed();\n if (index != null) {\n if (project._activeLayer === this) project._activeLayer = this.getNextSibling() || this.getPreviousSibling();\n Base.splice(owner._children, null, index, 1);\n }\n this._installEvents(false);\n if (notifySelf && project._changes) this._changed(5);\n if (notifyParent) owner._changed(11, this);\n this._parent = null;\n return true;\n }\n return false;\n },\n remove: function() {\n return this._remove(true, true);\n },\n replaceWith: function(item) {\n var ok = item && item.insertBelow(this);\n if (ok) this.remove();\n return ok;\n },\n removeChildren: function(start, end) {\n if (!this._children) return null;\n start = start || 0;\n end = Base.pick(end, this._children.length);\n var removed = Base.splice(this._children, null, start, end - start);\n for(var i = removed.length - 1; i >= 0; i--)removed[i]._remove(true, false);\n if (removed.length > 0) this._changed(11);\n return removed;\n },\n clear: \"#removeChildren\",\n reverseChildren: function() {\n if (this._children) {\n this._children.reverse();\n for(var i = 0, l = this._children.length; i < l; i++)this._children[i]._index = i;\n this._changed(11);\n }\n },\n isEmpty: function(recursively) {\n var children = this._children;\n var numChildren = children ? children.length : 0;\n if (recursively) {\n for(var i = 0; i < numChildren; i++){\n if (!children[i].isEmpty(recursively)) return false;\n }\n return true;\n }\n return !numChildren;\n },\n isEditable: function() {\n var item = this;\n while(item){\n if (!item._visible || item._locked) return false;\n item = item._parent;\n }\n return true;\n },\n hasFill: function() {\n return this.getStyle().hasFill();\n },\n hasStroke: function() {\n return this.getStyle().hasStroke();\n },\n hasShadow: function() {\n return this.getStyle().hasShadow();\n },\n _getOrder: function(item) {\n function getList(item) {\n var list = [];\n do list.unshift(item);\n while (item = item._parent);\n return list;\n }\n var list1 = getList(this), list2 = getList(item);\n for(var i = 0, l = Math.min(list1.length, list2.length); i < l; i++){\n if (list1[i] != list2[i]) return list1[i]._index < list2[i]._index ? 1 : -1;\n }\n return 0;\n },\n hasChildren: function() {\n return this._children && this._children.length > 0;\n },\n isInserted: function() {\n return this._parent ? this._parent.isInserted() : false;\n },\n isAbove: function(item) {\n return this._getOrder(item) === -1;\n },\n isBelow: function(item) {\n return this._getOrder(item) === 1;\n },\n isParent: function(item) {\n return this._parent === item;\n },\n isChild: function(item) {\n return item && item._parent === this;\n },\n isDescendant: function(item) {\n var parent = this;\n while(parent = parent._parent){\n if (parent === item) return true;\n }\n return false;\n },\n isAncestor: function(item) {\n return item ? item.isDescendant(this) : false;\n },\n isSibling: function(item) {\n return this._parent === item._parent;\n },\n isGroupedWith: function(item) {\n var parent = this._parent;\n while(parent){\n if (parent._parent && /^(Group|Layer|CompoundPath)$/.test(parent._class) && item.isDescendant(parent)) return true;\n parent = parent._parent;\n }\n return false;\n }\n }, Base.each([\n \"rotate\",\n \"scale\",\n \"shear\",\n \"skew\"\n ], function(key) {\n var rotate = key === \"rotate\";\n this[key] = function() {\n var args = arguments, value = (rotate ? Base : Point).read(args), center = Point.read(args, 0, {\n readNull: true\n });\n return this.transform(new Matrix()[key](value, center || this.getPosition(true)));\n };\n }, {\n translate: function() {\n var mx = new Matrix();\n return this.transform(mx.translate.apply(mx, arguments));\n },\n transform: function(matrix, _applyRecursively, _setApplyMatrix) {\n var _matrix = this._matrix, transformMatrix = matrix && !matrix.isIdentity(), applyMatrix = _setApplyMatrix && this._canApplyMatrix || this._applyMatrix && (transformMatrix || !_matrix.isIdentity() || _applyRecursively && this._children);\n if (!transformMatrix && !applyMatrix) return this;\n if (transformMatrix) {\n if (!matrix.isInvertible() && _matrix.isInvertible()) _matrix._backup = _matrix.getValues();\n _matrix.prepend(matrix, true);\n var style = this._style, fillColor = style.getFillColor(true), strokeColor = style.getStrokeColor(true);\n if (fillColor) fillColor.transform(matrix);\n if (strokeColor) strokeColor.transform(matrix);\n }\n if (applyMatrix && (applyMatrix = this._transformContent(_matrix, _applyRecursively, _setApplyMatrix))) {\n var pivot = this._pivot;\n if (pivot) _matrix._transformPoint(pivot, pivot, true);\n _matrix.reset(true);\n if (_setApplyMatrix && this._canApplyMatrix) this._applyMatrix = true;\n }\n var bounds = this._bounds, position = this._position;\n if (transformMatrix || applyMatrix) this._changed(25);\n var decomp = transformMatrix && bounds && matrix.decompose();\n if (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n for(var key in bounds){\n var cache = bounds[key];\n if (cache.nonscaling) delete bounds[key];\n else if (applyMatrix || !cache.internal) {\n var rect = cache.rect;\n matrix._transformBounds(rect, rect);\n }\n }\n this._bounds = bounds;\n var cached = bounds[this._getBoundsCacheKey(this._boundsOptions || {})];\n if (cached) this._position = this._getPositionFromBounds(cached.rect);\n } else if (transformMatrix && position && this._pivot) this._position = matrix._transformPoint(position, position);\n return this;\n },\n _transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n var children = this._children;\n if (children) {\n for(var i = 0, l = children.length; i < l; i++)children[i].transform(matrix, applyRecursively, setApplyMatrix);\n return true;\n }\n },\n globalToLocal: function() {\n return this.getGlobalMatrix(true)._inverseTransform(Point.read(arguments));\n },\n localToGlobal: function() {\n return this.getGlobalMatrix(true)._transformPoint(Point.read(arguments));\n },\n parentToLocal: function() {\n return this._matrix._inverseTransform(Point.read(arguments));\n },\n localToParent: function() {\n return this._matrix._transformPoint(Point.read(arguments));\n },\n fitBounds: function(rectangle, fill) {\n rectangle = Rectangle.read(arguments);\n var bounds = this.getBounds(), itemRatio = bounds.height / bounds.width, rectRatio = rectangle.height / rectangle.width, scale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio) ? rectangle.width / bounds.width : rectangle.height / bounds.height, newBounds = new Rectangle(new Point(), new Size(bounds.width * scale, bounds.height * scale));\n newBounds.setCenter(rectangle.getCenter());\n this.setBounds(newBounds);\n }\n }), {\n _setStyles: function(ctx, param, viewMatrix) {\n var style = this._style, matrix = this._matrix;\n if (style.hasFill()) ctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n if (style.hasStroke()) {\n ctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n ctx.lineWidth = style.getStrokeWidth();\n var strokeJoin = style.getStrokeJoin(), strokeCap = style.getStrokeCap(), miterLimit = style.getMiterLimit();\n if (strokeJoin) ctx.lineJoin = strokeJoin;\n if (strokeCap) ctx.lineCap = strokeCap;\n if (miterLimit) ctx.miterLimit = miterLimit;\n if (paper.support.nativeDash) {\n var dashArray = style.getDashArray(), dashOffset = style.getDashOffset();\n if (dashArray && dashArray.length) {\n if (\"setLineDash\" in ctx) {\n ctx.setLineDash(dashArray);\n ctx.lineDashOffset = dashOffset;\n } else {\n ctx.mozDash = dashArray;\n ctx.mozDashOffset = dashOffset;\n }\n }\n }\n }\n if (style.hasShadow()) {\n var pixelRatio = param.pixelRatio || 1, mx = viewMatrix._shiftless().prepend(new Matrix().scale(pixelRatio, pixelRatio)), blur = mx.transform(new Point(style.getShadowBlur(), 0)), offset = mx.transform(this.getShadowOffset());\n ctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n ctx.shadowBlur = blur.getLength();\n ctx.shadowOffsetX = offset.x;\n ctx.shadowOffsetY = offset.y;\n }\n },\n draw: function(ctx, param, parentStrokeMatrix) {\n var updateVersion = this._updateVersion = this._project._updateVersion;\n if (!this._visible || this._opacity === 0) return;\n var matrices = param.matrices, viewMatrix = param.viewMatrix, matrix = this._matrix, globalMatrix = matrices[matrices.length - 1].appended(matrix);\n if (!globalMatrix.isInvertible()) return;\n viewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix) : globalMatrix;\n matrices.push(globalMatrix);\n if (param.updateMatrix) this._globalMatrix = globalMatrix;\n var blendMode = this._blendMode, opacity = Numerical.clamp(this._opacity, 0, 1), normalBlend = blendMode === \"normal\", nativeBlend = BlendMode.nativeModes[blendMode], direct = normalBlend && opacity === 1 || param.dontStart || param.clip || (nativeBlend || normalBlend && opacity < 1) && this._canComposite(), pixelRatio = param.pixelRatio || 1, mainCtx, itemOffset, prevOffset;\n if (!direct) {\n var bounds = this.getStrokeBounds(viewMatrix);\n if (!bounds.width || !bounds.height) {\n matrices.pop();\n return;\n }\n prevOffset = param.offset;\n itemOffset = param.offset = bounds.getTopLeft().floor();\n mainCtx = ctx;\n ctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1).multiply(pixelRatio));\n if (pixelRatio !== 1) ctx.scale(pixelRatio, pixelRatio);\n }\n ctx.save();\n var strokeMatrix = parentStrokeMatrix ? parentStrokeMatrix.appended(matrix) : this._canScaleStroke && !this.getStrokeScaling(true) && viewMatrix, clip = !direct && param.clipItem, transform = !strokeMatrix || clip;\n if (direct) {\n ctx.globalAlpha = opacity;\n if (nativeBlend) ctx.globalCompositeOperation = blendMode;\n } else if (transform) ctx.translate(-itemOffset.x, -itemOffset.y);\n if (transform) (direct ? matrix : viewMatrix).applyToContext(ctx);\n if (clip) param.clipItem.draw(ctx, param.extend({\n clip: true\n }));\n if (strokeMatrix) {\n ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n var offset = param.offset;\n if (offset) ctx.translate(-offset.x, -offset.y);\n }\n this._draw(ctx, param, viewMatrix, strokeMatrix);\n ctx.restore();\n matrices.pop();\n if (param.clip && !param.dontFinish) ctx.clip(this.getFillRule());\n if (!direct) {\n BlendMode.process(blendMode, ctx, mainCtx, opacity, itemOffset.subtract(prevOffset).multiply(pixelRatio));\n CanvasProvider.release(ctx);\n param.offset = prevOffset;\n }\n },\n _isUpdated: function(updateVersion) {\n var parent = this._parent;\n if (parent instanceof CompoundPath) return parent._isUpdated(updateVersion);\n var updated = this._updateVersion === updateVersion;\n if (!updated && parent && parent._visible && parent._isUpdated(updateVersion)) {\n this._updateVersion = updateVersion;\n updated = true;\n }\n return updated;\n },\n _drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n var selection = this._selection, itemSelected = selection & 1, boundsSelected = selection & 2 || itemSelected && this._selectBounds, positionSelected = selection & 4;\n if (!this._drawSelected) itemSelected = false;\n if ((itemSelected || boundsSelected || positionSelected) && this._isUpdated(updateVersion)) {\n var layer, color = this.getSelectedColor(true) || (layer = this.getLayer()) && layer.getSelectedColor(true), mx = matrix.appended(this.getGlobalMatrix(true)), half = size / 2;\n ctx.strokeStyle = ctx.fillStyle = color ? color.toCanvasStyle(ctx) : \"#009dec\";\n if (itemSelected) this._drawSelected(ctx, mx, selectionItems);\n if (positionSelected) {\n var pos = this.getPosition(true), parent = this._parent, point = parent ? parent.localToGlobal(pos) : pos, x = point.x, y = point.y;\n ctx.beginPath();\n ctx.arc(x, y, half, 0, Math.PI * 2, true);\n ctx.stroke();\n var deltas = [\n [\n 0,\n -1\n ],\n [\n 1,\n 0\n ],\n [\n 0,\n 1\n ],\n [\n -1,\n 0\n ]\n ], start = half, end = size + 1;\n for(var i = 0; i < 4; i++){\n var delta = deltas[i], dx = delta[0], dy = delta[1];\n ctx.moveTo(x + dx * start, y + dy * start);\n ctx.lineTo(x + dx * end, y + dy * end);\n ctx.stroke();\n }\n }\n if (boundsSelected) {\n var coords = mx._transformCorners(this.getInternalBounds());\n ctx.beginPath();\n for(var i = 0; i < 8; i++)ctx[!i ? \"moveTo\" : \"lineTo\"](coords[i], coords[++i]);\n ctx.closePath();\n ctx.stroke();\n for(var i = 0; i < 8; i++)ctx.fillRect(coords[i] - half, coords[++i] - half, size, size);\n }\n }\n },\n _canComposite: function() {\n return false;\n }\n }, Base.each([\n \"down\",\n \"drag\",\n \"up\",\n \"move\"\n ], function(key) {\n this[\"removeOn\" + Base.capitalize(key)] = function() {\n var hash = {};\n hash[key] = true;\n return this.removeOn(hash);\n };\n }, {\n removeOn: function(obj) {\n for(var name in obj)if (obj[name]) {\n var key = \"mouse\" + name, project = this._project, sets = project._removeSets = project._removeSets || {};\n sets[key] = sets[key] || {};\n sets[key][this._id] = this;\n }\n return this;\n }\n }), {\n tween: function(from, to, options) {\n if (!options) {\n options = to;\n to = from;\n from = null;\n if (!options) {\n options = to;\n to = null;\n }\n }\n var easing = options && options.easing, start = options && options.start, duration = options != null && (typeof options === \"number\" ? options : options.duration), tween = new Tween(this, from, to, duration, easing, start);\n function onFrame(event) {\n tween._handleFrame(event.time * 1000);\n if (!tween.running) this.off(\"frame\", onFrame);\n }\n if (duration) this.on(\"frame\", onFrame);\n return tween;\n },\n tweenTo: function(to, options) {\n return this.tween(null, to, options);\n },\n tweenFrom: function(from, options) {\n return this.tween(from, null, options);\n }\n });\n var Group = Item.extend({\n _class: \"Group\",\n _selectBounds: false,\n _selectChildren: true,\n _serializeFields: {\n children: []\n },\n initialize: function Group(arg) {\n this._children = [];\n this._namedChildren = {};\n if (!this._initialize(arg)) this.addChildren(Array.isArray(arg) ? arg : arguments);\n },\n _changed: function _changed(flags) {\n _changed.base.call(this, flags);\n if (flags & 2050) this._clipItem = undefined;\n },\n _getClipItem: function() {\n var clipItem = this._clipItem;\n if (clipItem === undefined) {\n clipItem = null;\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)if (children[i]._clipMask) {\n clipItem = children[i];\n break;\n }\n this._clipItem = clipItem;\n }\n return clipItem;\n },\n isClipped: function() {\n return !!this._getClipItem();\n },\n setClipped: function(clipped) {\n var child = this.getFirstChild();\n if (child) child.setClipMask(clipped);\n },\n _getBounds: function _getBounds(matrix, options) {\n var clipItem = this._getClipItem();\n return clipItem ? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix), Base.set({}, options, {\n stroke: false\n })) : _getBounds.base.call(this, matrix, options);\n },\n _hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n var clipItem = this._getClipItem();\n return (!clipItem || clipItem.contains(point)) && _hitTestChildren.base.call(this, point, options, viewMatrix, clipItem);\n },\n _draw: function(ctx, param) {\n var clip = param.clip, clipItem = !clip && this._getClipItem();\n param = param.extend({\n clipItem: clipItem,\n clip: false\n });\n if (clip) {\n ctx.beginPath();\n param.dontStart = param.dontFinish = true;\n } else if (clipItem) clipItem.draw(ctx, param.extend({\n clip: true\n }));\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n var item = children[i];\n if (item !== clipItem) item.draw(ctx, param);\n }\n }\n });\n var Layer = Group.extend({\n _class: \"Layer\",\n initialize: function Layer() {\n Group.apply(this, arguments);\n },\n _getOwner: function() {\n return this._parent || this._index != null && this._project;\n },\n isInserted: function isInserted() {\n return this._parent ? isInserted.base.call(this) : this._index != null;\n },\n activate: function() {\n this._project._activeLayer = this;\n },\n _hitTestSelf: function() {}\n });\n var Shape = Item.extend({\n _class: \"Shape\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _canScaleStroke: true,\n _serializeFields: {\n type: null,\n size: null,\n radius: null\n },\n initialize: function Shape(props, point) {\n this._initialize(props, point);\n },\n _equals: function(item) {\n return this._type === item._type && this._size.equals(item._size) && Base.equals(this._radius, item._radius);\n },\n copyContent: function(source) {\n this.setType(source._type);\n this.setSize(source._size);\n this.setRadius(source._radius);\n },\n getType: function() {\n return this._type;\n },\n setType: function(type) {\n this._type = type;\n },\n getShape: \"#getType\",\n setShape: \"#setType\",\n getSize: function() {\n var size = this._size;\n return new LinkedSize(size.width, size.height, this, \"setSize\");\n },\n setSize: function() {\n var size = Size.read(arguments);\n if (!this._size) this._size = size.clone();\n else if (!this._size.equals(size)) {\n var type = this._type, width = size.width, height = size.height;\n if (type === \"rectangle\") this._radius.set(Size.min(this._radius, size.divide(2).abs()));\n else if (type === \"circle\") {\n width = height = (width + height) / 2;\n this._radius = width / 2;\n } else if (type === \"ellipse\") this._radius._set(width / 2, height / 2);\n this._size._set(width, height);\n this._changed(9);\n }\n },\n getRadius: function() {\n var rad = this._radius;\n return this._type === \"circle\" ? rad : new LinkedSize(rad.width, rad.height, this, \"setRadius\");\n },\n setRadius: function(radius) {\n var type = this._type;\n if (type === \"circle\") {\n if (radius === this._radius) return;\n var size = radius * 2;\n this._radius = radius;\n this._size._set(size, size);\n } else {\n radius = Size.read(arguments);\n if (!this._radius) this._radius = radius.clone();\n else {\n if (this._radius.equals(radius)) return;\n this._radius.set(radius);\n if (type === \"rectangle\") {\n var size = Size.max(this._size, radius.multiply(2));\n this._size.set(size);\n } else if (type === \"ellipse\") this._size._set(radius.width * 2, radius.height * 2);\n }\n }\n this._changed(9);\n },\n isEmpty: function() {\n return false;\n },\n toPath: function(insert) {\n var path = new Path[Base.capitalize(this._type)]({\n center: new Point(),\n size: this._size,\n radius: this._radius,\n insert: false\n });\n path.copyAttributes(this);\n if (paper.settings.applyMatrix) path.setApplyMatrix(true);\n if (insert === undefined || insert) path.insertAbove(this);\n return path;\n },\n toShape: \"#clone\",\n _asPathItem: function() {\n return this.toPath(false);\n },\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var style = this._style, hasFill = style.hasFill(), hasStroke = style.hasStroke(), dontPaint = param.dontFinish || param.clip, untransformed = !strokeMatrix;\n if (hasFill || hasStroke || dontPaint) {\n var type = this._type, radius = this._radius, isCircle = type === \"circle\";\n if (!param.dontStart) ctx.beginPath();\n if (untransformed && isCircle) ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n else {\n var rx = isCircle ? radius : radius.width, ry = isCircle ? radius : radius.height, size = this._size, width = size.width, height = size.height;\n if (untransformed && type === \"rectangle\" && rx === 0 && ry === 0) ctx.rect(-width / 2, -height / 2, width, height);\n else {\n var x = width / 2, y = height / 2, kappa = 0.44771525016920644, cx = rx * kappa, cy = ry * kappa, c = [\n -x,\n -y + ry,\n -x,\n -y + cy,\n -x + cx,\n -y,\n -x + rx,\n -y,\n x - rx,\n -y,\n x - cx,\n -y,\n x,\n -y + cy,\n x,\n -y + ry,\n x,\n y - ry,\n x,\n y - cy,\n x - cx,\n y,\n x - rx,\n y,\n -x + rx,\n y,\n -x + cx,\n y,\n -x,\n y - cy,\n -x,\n y - ry\n ];\n if (strokeMatrix) strokeMatrix.transform(c, c, 32);\n ctx.moveTo(c[0], c[1]);\n ctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n if (x !== rx) ctx.lineTo(c[8], c[9]);\n ctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n if (y !== ry) ctx.lineTo(c[16], c[17]);\n ctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n if (x !== rx) ctx.lineTo(c[24], c[25]);\n ctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n }\n }\n ctx.closePath();\n }\n if (!dontPaint && (hasFill || hasStroke)) {\n this._setStyles(ctx, param, viewMatrix);\n if (hasFill) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) ctx.stroke();\n }\n },\n _canComposite: function() {\n return !(this.hasFill() && this.hasStroke());\n },\n _getBounds: function(matrix, options) {\n var rect = new Rectangle(this._size).setCenter(0, 0), style = this._style, strokeWidth = options.stroke && style.hasStroke() && style.getStrokeWidth();\n if (matrix) rect = matrix._transformBounds(rect);\n return strokeWidth ? rect.expand(Path._getStrokePadding(strokeWidth, this._getStrokeMatrix(matrix, options))) : rect;\n }\n }, new function() {\n function getCornerCenter(that, point, expand) {\n var radius = that._radius;\n if (!radius.isZero()) {\n var halfSize = that._size.divide(2);\n for(var q = 1; q <= 4; q++){\n var dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1), corner = dir.multiply(halfSize), center = corner.subtract(dir.multiply(radius)), rect = new Rectangle(expand ? corner.add(dir.multiply(expand)) : corner, center);\n if (rect.contains(point)) return {\n point: center,\n quadrant: q\n };\n }\n }\n }\n function isOnEllipseStroke(point, radius, padding, quadrant) {\n var vector = point.divide(radius);\n return (!quadrant || vector.isInQuadrant(quadrant)) && vector.subtract(vector.normalize()).multiply(radius).divide(padding).length <= 1;\n }\n return {\n _contains: function _contains(point) {\n if (this._type === \"rectangle\") {\n var center = getCornerCenter(this, point);\n return center ? point.subtract(center.point).divide(this._radius).getLength() <= 1 : _contains.base.call(this, point);\n } else return point.divide(this.size).getLength() <= 0.5;\n },\n _hitTestSelf: function _hitTestSelf(point, options, viewMatrix, strokeMatrix) {\n var hit = false, style = this._style, hitStroke = options.stroke && style.hasStroke(), hitFill = options.fill && style.hasFill();\n if (hitStroke || hitFill) {\n var type = this._type, radius = this._radius, strokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0, strokePadding = options._tolerancePadding.add(Path._getStrokePadding(strokeRadius, !style.getStrokeScaling() && strokeMatrix));\n if (type === \"rectangle\") {\n var padding = strokePadding.multiply(2), center = getCornerCenter(this, point, padding);\n if (center) hit = isOnEllipseStroke(point.subtract(center.point), radius, strokePadding, center.quadrant);\n else {\n var rect = new Rectangle(this._size).setCenter(0, 0), outer = rect.expand(padding), inner = rect.expand(padding.negate());\n hit = outer._containsPoint(point) && !inner._containsPoint(point);\n }\n } else hit = isOnEllipseStroke(point, radius, strokePadding);\n }\n return hit ? new HitResult(hitStroke ? \"stroke\" : \"fill\", this) : _hitTestSelf.base.apply(this, arguments);\n }\n };\n }, {\n statics: new function() {\n function createShape(type, point, size, radius, args) {\n var item = Base.create(Shape.prototype);\n item._type = type;\n item._size = size;\n item._radius = radius;\n item._initialize(Base.getNamed(args), point);\n return item;\n }\n return {\n Circle: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), radius = Base.readNamed(args, \"radius\");\n return createShape(\"circle\", center, new Size(radius * 2), radius, args);\n },\n Rectangle: function() {\n var args = arguments, rect = Rectangle.readNamed(args, \"rectangle\"), radius = Size.min(Size.readNamed(args, \"radius\"), rect.getSize(true).divide(2));\n return createShape(\"rectangle\", rect.getCenter(true), rect.getSize(true), radius, args);\n },\n Ellipse: function() {\n var args = arguments, ellipse = Shape._readEllipse(args), radius = ellipse.radius;\n return createShape(\"ellipse\", ellipse.center, radius.multiply(2), radius, args);\n },\n _readEllipse: function(args) {\n var center, radius;\n if (Base.hasNamed(args, \"radius\")) {\n center = Point.readNamed(args, \"center\");\n radius = Size.readNamed(args, \"radius\");\n } else {\n var rect = Rectangle.readNamed(args, \"rectangle\");\n center = rect.getCenter(true);\n radius = rect.getSize(true).divide(2);\n }\n return {\n center: center,\n radius: radius\n };\n }\n };\n }\n });\n var Raster = Item.extend({\n _class: \"Raster\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _boundsOptions: {\n stroke: false,\n handle: false\n },\n _serializeFields: {\n crossOrigin: null,\n source: null\n },\n _prioritize: [\n \"crossOrigin\"\n ],\n _smoothing: \"low\",\n beans: true,\n initialize: function Raster(source, position) {\n if (!this._initialize(source, position !== undefined && Point.read(arguments))) {\n var image, type = typeof source, object = type === \"string\" ? document.getElementById(source) : type === \"object\" ? source : null;\n if (object && object !== Item.NO_INSERT) {\n if (object.getContext || object.naturalHeight != null) image = object;\n else if (object) {\n var size = Size.read(arguments);\n if (!size.isZero()) image = CanvasProvider.getCanvas(size);\n }\n }\n if (image) this.setImage(image);\n else this.setSource(source);\n }\n if (!this._size) {\n this._size = new Size();\n this._loaded = false;\n }\n },\n _equals: function(item) {\n return this.getSource() === item.getSource();\n },\n copyContent: function(source) {\n var image = source._image, canvas = source._canvas;\n if (image) this._setImage(image);\n else if (canvas) {\n var copyCanvas = CanvasProvider.getCanvas(source._size);\n copyCanvas.getContext(\"2d\").drawImage(canvas, 0, 0);\n this._setImage(copyCanvas);\n }\n this._crossOrigin = source._crossOrigin;\n },\n getSize: function() {\n var size = this._size;\n return new LinkedSize(size ? size.width : 0, size ? size.height : 0, this, \"setSize\");\n },\n setSize: function(_size, _clear) {\n var size = Size.read(arguments);\n if (!size.equals(this._size)) {\n if (size.width > 0 && size.height > 0) {\n var element = !_clear && this.getElement();\n this._setImage(CanvasProvider.getCanvas(size));\n if (element) this.getContext(true).drawImage(element, 0, 0, size.width, size.height);\n } else {\n if (this._canvas) CanvasProvider.release(this._canvas);\n this._size = size.clone();\n }\n } else if (_clear) this.clear();\n },\n getWidth: function() {\n return this._size ? this._size.width : 0;\n },\n setWidth: function(width) {\n this.setSize(width, this.getHeight());\n },\n getHeight: function() {\n return this._size ? this._size.height : 0;\n },\n setHeight: function(height) {\n this.setSize(this.getWidth(), height);\n },\n getLoaded: function() {\n return this._loaded;\n },\n isEmpty: function() {\n var size = this._size;\n return !size || size.width === 0 && size.height === 0;\n },\n getResolution: function() {\n var matrix = this._matrix, orig = new Point(0, 0).transform(matrix), u = new Point(1, 0).transform(matrix).subtract(orig), v = new Point(0, 1).transform(matrix).subtract(orig);\n return new Size(72 / u.getLength(), 72 / v.getLength());\n },\n getPpi: \"#getResolution\",\n getImage: function() {\n return this._image;\n },\n setImage: function(image) {\n var that = this;\n function emit(event) {\n var view = that.getView(), type = event && event.type || \"load\";\n if (view && that.responds(type)) {\n paper = view._scope;\n that.emit(type, new Event(event));\n }\n }\n this._setImage(image);\n if (this._loaded) setTimeout(emit, 0);\n else if (image) DomEvent.add(image, {\n load: function(event) {\n that._setImage(image);\n emit(event);\n },\n error: emit\n });\n },\n _setImage: function(image) {\n if (this._canvas) CanvasProvider.release(this._canvas);\n if (image && image.getContext) {\n this._image = null;\n this._canvas = image;\n this._loaded = true;\n } else {\n this._image = image;\n this._canvas = null;\n this._loaded = !!(image && image.src && image.complete);\n }\n this._size = new Size(image ? image.naturalWidth || image.width : 0, image ? image.naturalHeight || image.height : 0);\n this._context = null;\n this._changed(1033);\n },\n getCanvas: function() {\n if (!this._canvas) {\n var ctx = CanvasProvider.getContext(this._size);\n try {\n if (this._image) ctx.drawImage(this._image, 0, 0);\n this._canvas = ctx.canvas;\n } catch (e) {\n CanvasProvider.release(ctx);\n }\n }\n return this._canvas;\n },\n setCanvas: \"#setImage\",\n getContext: function(_change) {\n if (!this._context) this._context = this.getCanvas().getContext(\"2d\");\n if (_change) {\n this._image = null;\n this._changed(1025);\n }\n return this._context;\n },\n setContext: function(context) {\n this._context = context;\n },\n getSource: function() {\n var image = this._image;\n return image && image.src || this.toDataURL();\n },\n setSource: function(src) {\n var image = new self1.Image(), crossOrigin = this._crossOrigin;\n if (crossOrigin) image.crossOrigin = crossOrigin;\n if (src) image.src = src;\n this.setImage(image);\n },\n getCrossOrigin: function() {\n var image = this._image;\n return image && image.crossOrigin || this._crossOrigin || \"\";\n },\n setCrossOrigin: function(crossOrigin) {\n this._crossOrigin = crossOrigin;\n var image = this._image;\n if (image) image.crossOrigin = crossOrigin;\n },\n getSmoothing: function() {\n return this._smoothing;\n },\n setSmoothing: function(smoothing) {\n this._smoothing = typeof smoothing === \"string\" ? smoothing : smoothing ? \"low\" : \"off\";\n this._changed(257);\n },\n getElement: function() {\n return this._canvas || this._loaded && this._image;\n }\n }, {\n beans: false,\n getSubCanvas: function() {\n var rect = Rectangle.read(arguments), ctx = CanvasProvider.getContext(rect.getSize());\n ctx.drawImage(this.getCanvas(), rect.x, rect.y, rect.width, rect.height, 0, 0, rect.width, rect.height);\n return ctx.canvas;\n },\n getSubRaster: function() {\n var rect = Rectangle.read(arguments), raster = new Raster(Item.NO_INSERT);\n raster._setImage(this.getSubCanvas(rect));\n raster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n raster._matrix.prepend(this._matrix);\n raster.insertAbove(this);\n return raster;\n },\n toDataURL: function() {\n var image = this._image, src = image && image.src;\n if (/^data:/.test(src)) return src;\n var canvas = this.getCanvas();\n return canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n },\n drawImage: function(image) {\n var point = Point.read(arguments, 1);\n this.getContext(true).drawImage(image, point.x, point.y);\n },\n getAverageColor: function(object) {\n var bounds, path;\n if (!object) bounds = this.getBounds();\n else if (object instanceof PathItem) {\n path = object;\n bounds = object.getBounds();\n } else if (typeof object === \"object\") {\n if (\"width\" in object) bounds = new Rectangle(object);\n else if (\"x\" in object) bounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n }\n if (!bounds) return null;\n var sampleSize = 32, width = Math.min(bounds.width, sampleSize), height = Math.min(bounds.height, sampleSize);\n var ctx = Raster._sampleContext;\n if (!ctx) ctx = Raster._sampleContext = CanvasProvider.getContext(new Size(sampleSize));\n else ctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n ctx.save();\n var matrix = new Matrix().scale(width / bounds.width, height / bounds.height).translate(-bounds.x, -bounds.y);\n matrix.applyToContext(ctx);\n if (path) path.draw(ctx, new Base({\n clip: true,\n matrices: [\n matrix\n ]\n }));\n this._matrix.applyToContext(ctx);\n var element = this.getElement(), size = this._size;\n if (element) ctx.drawImage(element, -size.width / 2, -size.height / 2);\n ctx.restore();\n var pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width), Math.ceil(height)).data, channels = [\n 0,\n 0,\n 0\n ], total = 0;\n for(var i = 0, l = pixels.length; i < l; i += 4){\n var alpha = pixels[i + 3];\n total += alpha;\n alpha /= 255;\n channels[0] += pixels[i] * alpha;\n channels[1] += pixels[i + 1] * alpha;\n channels[2] += pixels[i + 2] * alpha;\n }\n for(var i = 0; i < 3; i++)channels[i] /= total;\n return total ? Color.read(channels) : null;\n },\n getPixel: function() {\n var point = Point.read(arguments);\n var data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n return new Color(\"rgb\", [\n data[0] / 255,\n data[1] / 255,\n data[2] / 255\n ], data[3] / 255);\n },\n setPixel: function() {\n var args = arguments, point = Point.read(args), color = Color.read(args), components = color._convert(\"rgb\"), alpha = color._alpha, ctx = this.getContext(true), imageData = ctx.createImageData(1, 1), data = imageData.data;\n data[0] = components[0] * 255;\n data[1] = components[1] * 255;\n data[2] = components[2] * 255;\n data[3] = alpha != null ? alpha * 255 : 255;\n ctx.putImageData(imageData, point.x, point.y);\n },\n clear: function() {\n var size = this._size;\n this.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n },\n createImageData: function() {\n var size = Size.read(arguments);\n return this.getContext().createImageData(size.width, size.height);\n },\n getImageData: function() {\n var rect = Rectangle.read(arguments);\n if (rect.isEmpty()) rect = new Rectangle(this._size);\n return this.getContext().getImageData(rect.x, rect.y, rect.width, rect.height);\n },\n putImageData: function(data) {\n var point = Point.read(arguments, 1);\n this.getContext(true).putImageData(data, point.x, point.y);\n },\n setImageData: function(data) {\n this.setSize(data);\n this.getContext(true).putImageData(data, 0, 0);\n },\n _getBounds: function(matrix, options) {\n var rect = new Rectangle(this._size).setCenter(0, 0);\n return matrix ? matrix._transformBounds(rect) : rect;\n },\n _hitTestSelf: function(point) {\n if (this._contains(point)) {\n var that = this;\n return new HitResult(\"pixel\", that, {\n offset: point.add(that._size.divide(2)).round(),\n color: {\n get: function() {\n return that.getPixel(this.offset);\n }\n }\n });\n }\n },\n _draw: function(ctx, param, viewMatrix) {\n var element = this.getElement();\n if (element && element.width > 0 && element.height > 0) {\n ctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n this._setStyles(ctx, param, viewMatrix);\n var smoothing = this._smoothing, disabled = smoothing === \"off\";\n DomElement.setPrefixed(ctx, disabled ? \"imageSmoothingEnabled\" : \"imageSmoothingQuality\", disabled ? false : smoothing);\n ctx.drawImage(element, -this._size.width / 2, -this._size.height / 2);\n }\n },\n _canComposite: function() {\n return true;\n }\n });\n var SymbolItem = Item.extend({\n _class: \"SymbolItem\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _boundsOptions: {\n stroke: true\n },\n _serializeFields: {\n symbol: null\n },\n initialize: function SymbolItem(arg0, arg1) {\n if (!this._initialize(arg0, arg1 !== undefined && Point.read(arguments, 1))) this.setDefinition(arg0 instanceof SymbolDefinition ? arg0 : new SymbolDefinition(arg0));\n },\n _equals: function(item) {\n return this._definition === item._definition;\n },\n copyContent: function(source) {\n this.setDefinition(source._definition);\n },\n getDefinition: function() {\n return this._definition;\n },\n setDefinition: function(definition) {\n this._definition = definition;\n this._changed(9);\n },\n getSymbol: \"#getDefinition\",\n setSymbol: \"#setDefinition\",\n isEmpty: function() {\n return this._definition._item.isEmpty();\n },\n _getBounds: function(matrix, options) {\n var item = this._definition._item;\n return item._getCachedBounds(item._matrix.prepended(matrix), options);\n },\n _hitTestSelf: function(point, options, viewMatrix) {\n var opts = options.extend({\n all: false\n });\n var res = this._definition._item._hitTest(point, opts, viewMatrix);\n if (res) res.item = this;\n return res;\n },\n _draw: function(ctx, param) {\n this._definition._item.draw(ctx, param);\n }\n });\n var SymbolDefinition = Base.extend({\n _class: \"SymbolDefinition\",\n initialize: function SymbolDefinition(item, dontCenter) {\n this._id = UID.get();\n this.project = paper.project;\n if (item) this.setItem(item, dontCenter);\n },\n _serialize: function(options, dictionary) {\n return dictionary.add(this, function() {\n return Base.serialize([\n this._class,\n this._item\n ], options, false, dictionary);\n });\n },\n _changed: function(flags) {\n if (flags & 8) Item._clearBoundsCache(this);\n if (flags & 1) this.project._changed(flags);\n },\n getItem: function() {\n return this._item;\n },\n setItem: function(item, _dontCenter) {\n if (item._symbol) item = item.clone();\n if (this._item) this._item._symbol = null;\n this._item = item;\n item.remove();\n item.setSelected(false);\n if (!_dontCenter) item.setPosition(new Point());\n item._symbol = this;\n this._changed(9);\n },\n getDefinition: \"#getItem\",\n setDefinition: \"#setItem\",\n place: function(position) {\n return new SymbolItem(this, position);\n },\n clone: function() {\n return new SymbolDefinition(this._item.clone(false));\n },\n equals: function(symbol) {\n return symbol === this || symbol && this._item.equals(symbol._item) || false;\n }\n });\n var HitResult = Base.extend({\n _class: \"HitResult\",\n initialize: function HitResult(type, item, values) {\n this.type = type;\n this.item = item;\n if (values) this.inject(values);\n },\n statics: {\n getOptions: function(args) {\n var options = args && Base.read(args);\n return new Base({\n type: null,\n tolerance: paper.settings.hitTolerance,\n fill: !options,\n stroke: !options,\n segments: !options,\n handles: false,\n ends: false,\n position: false,\n center: false,\n bounds: false,\n guides: false,\n selected: false\n }, options);\n }\n }\n });\n var Segment = Base.extend({\n _class: \"Segment\",\n beans: true,\n _selection: 0,\n initialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n var count = arguments.length, point, handleIn, handleOut, selection;\n if (count > 0) {\n if (arg0 == null || typeof arg0 === \"object\") {\n if (count === 1 && arg0 && \"point\" in arg0) {\n point = arg0.point;\n handleIn = arg0.handleIn;\n handleOut = arg0.handleOut;\n selection = arg0.selection;\n } else {\n point = arg0;\n handleIn = arg1;\n handleOut = arg2;\n selection = arg3;\n }\n } else {\n point = [\n arg0,\n arg1\n ];\n handleIn = arg2 !== undefined ? [\n arg2,\n arg3\n ] : null;\n handleOut = arg4 !== undefined ? [\n arg4,\n arg5\n ] : null;\n }\n }\n new SegmentPoint(point, this, \"_point\");\n new SegmentPoint(handleIn, this, \"_handleIn\");\n new SegmentPoint(handleOut, this, \"_handleOut\");\n if (selection) this.setSelection(selection);\n },\n _serialize: function(options, dictionary) {\n var point = this._point, selection = this._selection, obj = selection || this.hasHandles() ? [\n point,\n this._handleIn,\n this._handleOut\n ] : point;\n if (selection) obj.push(selection);\n return Base.serialize(obj, options, true, dictionary);\n },\n _changed: function(point) {\n var path = this._path;\n if (!path) return;\n var curves = path._curves, index = this._index, curve;\n if (curves) {\n if ((!point || point === this._point || point === this._handleIn) && (curve = index > 0 ? curves[index - 1] : path._closed ? curves[curves.length - 1] : null)) curve._changed();\n if ((!point || point === this._point || point === this._handleOut) && (curve = curves[index])) curve._changed();\n }\n path._changed(41);\n },\n getPoint: function() {\n return this._point;\n },\n setPoint: function() {\n this._point.set(Point.read(arguments));\n },\n getHandleIn: function() {\n return this._handleIn;\n },\n setHandleIn: function() {\n this._handleIn.set(Point.read(arguments));\n },\n getHandleOut: function() {\n return this._handleOut;\n },\n setHandleOut: function() {\n this._handleOut.set(Point.read(arguments));\n },\n hasHandles: function() {\n return !this._handleIn.isZero() || !this._handleOut.isZero();\n },\n isSmooth: function() {\n var handleIn = this._handleIn, handleOut = this._handleOut;\n return !handleIn.isZero() && !handleOut.isZero() && handleIn.isCollinear(handleOut);\n },\n clearHandles: function() {\n this._handleIn._set(0, 0);\n this._handleOut._set(0, 0);\n },\n getSelection: function() {\n return this._selection;\n },\n setSelection: function(selection) {\n var oldSelection = this._selection, path = this._path;\n this._selection = selection = selection || 0;\n if (path && selection !== oldSelection) {\n path._updateSelection(this, oldSelection, selection);\n path._changed(257);\n }\n },\n _changeSelection: function(flag, selected) {\n var selection = this._selection;\n this.setSelection(selected ? selection | flag : selection & ~flag);\n },\n isSelected: function() {\n return !!(this._selection & 7);\n },\n setSelected: function(selected) {\n this._changeSelection(7, selected);\n },\n getIndex: function() {\n return this._index !== undefined ? this._index : null;\n },\n getPath: function() {\n return this._path || null;\n },\n getCurve: function() {\n var path = this._path, index = this._index;\n if (path) {\n if (index > 0 && !path._closed && index === path._segments.length - 1) index--;\n return path.getCurves()[index] || null;\n }\n return null;\n },\n getLocation: function() {\n var curve = this.getCurve();\n return curve ? new CurveLocation(curve, this === curve._segment1 ? 0 : 1) : null;\n },\n getNext: function() {\n var segments = this._path && this._path._segments;\n return segments && (segments[this._index + 1] || this._path._closed && segments[0]) || null;\n },\n smooth: function(options, _first, _last) {\n var opts = options || {}, type = opts.type, factor = opts.factor, prev = this.getPrevious(), next = this.getNext(), p0 = (prev || this)._point, p1 = this._point, p2 = (next || this)._point, d1 = p0.getDistance(p1), d2 = p1.getDistance(p2);\n if (!type || type === \"catmull-rom\") {\n var a = factor === undefined ? 0.5 : factor, d1_a = Math.pow(d1, a), d1_2a = d1_a * d1_a, d2_a = Math.pow(d2, a), d2_2a = d2_a * d2_a;\n if (!_first && prev) {\n var A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a, N = 3 * d2_a * (d2_a + d1_a);\n this.setHandleIn(N !== 0 ? new Point((d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x, (d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y) : new Point());\n }\n if (!_last && next) {\n var A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a, N = 3 * d1_a * (d1_a + d2_a);\n this.setHandleOut(N !== 0 ? new Point((d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x, (d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y) : new Point());\n }\n } else if (type === \"geometric\") {\n if (prev && next) {\n var vector = p0.subtract(p2), t = factor === undefined ? 0.4 : factor, k = t * d1 / (d1 + d2);\n if (!_first) this.setHandleIn(vector.multiply(k));\n if (!_last) this.setHandleOut(vector.multiply(k - t));\n }\n } else throw new Error(\"Smoothing method '\" + type + \"' not supported.\");\n },\n getPrevious: function() {\n var segments = this._path && this._path._segments;\n return segments && (segments[this._index - 1] || this._path._closed && segments[segments.length - 1]) || null;\n },\n isFirst: function() {\n return !this._index;\n },\n isLast: function() {\n var path = this._path;\n return path && this._index === path._segments.length - 1 || false;\n },\n reverse: function() {\n var handleIn = this._handleIn, handleOut = this._handleOut, tmp = handleIn.clone();\n handleIn.set(handleOut);\n handleOut.set(tmp);\n },\n reversed: function() {\n return new Segment(this._point, this._handleOut, this._handleIn);\n },\n remove: function() {\n return this._path ? !!this._path.removeSegment(this._index) : false;\n },\n clone: function() {\n return new Segment(this._point, this._handleIn, this._handleOut);\n },\n equals: function(segment) {\n return segment === this || segment && this._class === segment._class && this._point.equals(segment._point) && this._handleIn.equals(segment._handleIn) && this._handleOut.equals(segment._handleOut) || false;\n },\n toString: function() {\n var parts = [\n \"point: \" + this._point\n ];\n if (!this._handleIn.isZero()) parts.push(\"handleIn: \" + this._handleIn);\n if (!this._handleOut.isZero()) parts.push(\"handleOut: \" + this._handleOut);\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n transform: function(matrix) {\n this._transformCoordinates(matrix, new Array(6), true);\n this._changed();\n },\n interpolate: function(from, to, factor) {\n var u = 1 - factor, v = factor, point1 = from._point, point2 = to._point, handleIn1 = from._handleIn, handleIn2 = to._handleIn, handleOut2 = to._handleOut, handleOut1 = from._handleOut;\n this._point._set(u * point1._x + v * point2._x, u * point1._y + v * point2._y, true);\n this._handleIn._set(u * handleIn1._x + v * handleIn2._x, u * handleIn1._y + v * handleIn2._y, true);\n this._handleOut._set(u * handleOut1._x + v * handleOut2._x, u * handleOut1._y + v * handleOut2._y, true);\n this._changed();\n },\n _transformCoordinates: function(matrix, coords, change) {\n var point = this._point, handleIn = !change || !this._handleIn.isZero() ? this._handleIn : null, handleOut = !change || !this._handleOut.isZero() ? this._handleOut : null, x = point._x, y = point._y, i = 2;\n coords[0] = x;\n coords[1] = y;\n if (handleIn) {\n coords[i++] = handleIn._x + x;\n coords[i++] = handleIn._y + y;\n }\n if (handleOut) {\n coords[i++] = handleOut._x + x;\n coords[i++] = handleOut._y + y;\n }\n if (matrix) {\n matrix._transformCoordinates(coords, coords, i / 2);\n x = coords[0];\n y = coords[1];\n if (change) {\n point._x = x;\n point._y = y;\n i = 2;\n if (handleIn) {\n handleIn._x = coords[i++] - x;\n handleIn._y = coords[i++] - y;\n }\n if (handleOut) {\n handleOut._x = coords[i++] - x;\n handleOut._y = coords[i++] - y;\n }\n } else {\n if (!handleIn) {\n coords[i++] = x;\n coords[i++] = y;\n }\n if (!handleOut) {\n coords[i++] = x;\n coords[i++] = y;\n }\n }\n }\n return coords;\n }\n });\n var SegmentPoint = Point.extend({\n initialize: function SegmentPoint(point, owner, key) {\n var x, y, selected;\n if (!point) x = y = 0;\n else if ((x = point[0]) !== undefined) y = point[1];\n else {\n var pt = point;\n if ((x = pt.x) === undefined) {\n pt = Point.read(arguments);\n x = pt.x;\n }\n y = pt.y;\n selected = pt.selected;\n }\n this._x = x;\n this._y = y;\n this._owner = owner;\n owner[key] = this;\n if (selected) this.setSelected(true);\n },\n _set: function(x, y) {\n this._x = x;\n this._y = y;\n this._owner._changed(this);\n return this;\n },\n getX: function() {\n return this._x;\n },\n setX: function(x) {\n this._x = x;\n this._owner._changed(this);\n },\n getY: function() {\n return this._y;\n },\n setY: function(y) {\n this._y = y;\n this._owner._changed(this);\n },\n isZero: function() {\n var isZero = Numerical.isZero;\n return isZero(this._x) && isZero(this._y);\n },\n isSelected: function() {\n return !!(this._owner._selection & this._getSelection());\n },\n setSelected: function(selected) {\n this._owner._changeSelection(this._getSelection(), selected);\n },\n _getSelection: function() {\n var owner = this._owner;\n return this === owner._point ? 1 : this === owner._handleIn ? 2 : this === owner._handleOut ? 4 : 0;\n }\n });\n var Curve = Base.extend({\n _class: \"Curve\",\n beans: true,\n initialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n var count = arguments.length, seg1, seg2, point1, point2, handle1, handle2;\n if (count === 3) {\n this._path = arg0;\n seg1 = arg1;\n seg2 = arg2;\n } else if (!count) {\n seg1 = new Segment();\n seg2 = new Segment();\n } else if (count === 1) {\n if (\"segment1\" in arg0) {\n seg1 = new Segment(arg0.segment1);\n seg2 = new Segment(arg0.segment2);\n } else if (\"point1\" in arg0) {\n point1 = arg0.point1;\n handle1 = arg0.handle1;\n handle2 = arg0.handle2;\n point2 = arg0.point2;\n } else if (Array.isArray(arg0)) {\n point1 = [\n arg0[0],\n arg0[1]\n ];\n point2 = [\n arg0[6],\n arg0[7]\n ];\n handle1 = [\n arg0[2] - arg0[0],\n arg0[3] - arg0[1]\n ];\n handle2 = [\n arg0[4] - arg0[6],\n arg0[5] - arg0[7]\n ];\n }\n } else if (count === 2) {\n seg1 = new Segment(arg0);\n seg2 = new Segment(arg1);\n } else if (count === 4) {\n point1 = arg0;\n handle1 = arg1;\n handle2 = arg2;\n point2 = arg3;\n } else if (count === 8) {\n point1 = [\n arg0,\n arg1\n ];\n point2 = [\n arg6,\n arg7\n ];\n handle1 = [\n arg2 - arg0,\n arg3 - arg1\n ];\n handle2 = [\n arg4 - arg6,\n arg5 - arg7\n ];\n }\n this._segment1 = seg1 || new Segment(point1, null, handle1);\n this._segment2 = seg2 || new Segment(point2, handle2, null);\n },\n _serialize: function(options, dictionary) {\n return Base.serialize(this.hasHandles() ? [\n this.getPoint1(),\n this.getHandle1(),\n this.getHandle2(),\n this.getPoint2()\n ] : [\n this.getPoint1(),\n this.getPoint2()\n ], options, true, dictionary);\n },\n _changed: function() {\n this._length = this._bounds = undefined;\n },\n clone: function() {\n return new Curve(this._segment1, this._segment2);\n },\n toString: function() {\n var parts = [\n \"point1: \" + this._segment1._point\n ];\n if (!this._segment1._handleOut.isZero()) parts.push(\"handle1: \" + this._segment1._handleOut);\n if (!this._segment2._handleIn.isZero()) parts.push(\"handle2: \" + this._segment2._handleIn);\n parts.push(\"point2: \" + this._segment2._point);\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n classify: function() {\n return Curve.classify(this.getValues());\n },\n remove: function() {\n var removed = false;\n if (this._path) {\n var segment2 = this._segment2, handleOut = segment2._handleOut;\n removed = segment2.remove();\n if (removed) this._segment1._handleOut.set(handleOut);\n }\n return removed;\n },\n getPoint1: function() {\n return this._segment1._point;\n },\n setPoint1: function() {\n this._segment1._point.set(Point.read(arguments));\n },\n getPoint2: function() {\n return this._segment2._point;\n },\n setPoint2: function() {\n this._segment2._point.set(Point.read(arguments));\n },\n getHandle1: function() {\n return this._segment1._handleOut;\n },\n setHandle1: function() {\n this._segment1._handleOut.set(Point.read(arguments));\n },\n getHandle2: function() {\n return this._segment2._handleIn;\n },\n setHandle2: function() {\n this._segment2._handleIn.set(Point.read(arguments));\n },\n getSegment1: function() {\n return this._segment1;\n },\n getSegment2: function() {\n return this._segment2;\n },\n getPath: function() {\n return this._path;\n },\n getIndex: function() {\n return this._segment1._index;\n },\n getNext: function() {\n var curves = this._path && this._path._curves;\n return curves && (curves[this._segment1._index + 1] || this._path._closed && curves[0]) || null;\n },\n getPrevious: function() {\n var curves = this._path && this._path._curves;\n return curves && (curves[this._segment1._index - 1] || this._path._closed && curves[curves.length - 1]) || null;\n },\n isFirst: function() {\n return !this._segment1._index;\n },\n isLast: function() {\n var path = this._path;\n return path && this._segment1._index === path._curves.length - 1 || false;\n },\n isSelected: function() {\n return this.getPoint1().isSelected() && this.getHandle1().isSelected() && this.getHandle2().isSelected() && this.getPoint2().isSelected();\n },\n setSelected: function(selected) {\n this.getPoint1().setSelected(selected);\n this.getHandle1().setSelected(selected);\n this.getHandle2().setSelected(selected);\n this.getPoint2().setSelected(selected);\n },\n getValues: function(matrix) {\n return Curve.getValues(this._segment1, this._segment2, matrix);\n },\n getPoints: function() {\n var coords = this.getValues(), points = [];\n for(var i = 0; i < 8; i += 2)points.push(new Point(coords[i], coords[i + 1]));\n return points;\n }\n }, {\n getLength: function() {\n if (this._length == null) this._length = Curve.getLength(this.getValues(), 0, 1);\n return this._length;\n },\n getArea: function() {\n return Curve.getArea(this.getValues());\n },\n getLine: function() {\n return new Line(this._segment1._point, this._segment2._point);\n },\n getPart: function(from, to) {\n return new Curve(Curve.getPart(this.getValues(), from, to));\n },\n getPartLength: function(from, to) {\n return Curve.getLength(this.getValues(), from, to);\n },\n divideAt: function(location) {\n return this.divideAtTime(location && location.curve === this ? location.time : this.getTimeAt(location));\n },\n divideAtTime: function(time, _setHandles) {\n var tMin = 1e-8, tMax = 1 - tMin, res = null;\n if (time >= tMin && time <= tMax) {\n var parts = Curve.subdivide(this.getValues(), time), left = parts[0], right = parts[1], setHandles = _setHandles || this.hasHandles(), seg1 = this._segment1, seg2 = this._segment2, path = this._path;\n if (setHandles) {\n seg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n seg2._handleIn._set(right[4] - right[6], right[5] - right[7]);\n }\n var x = left[6], y = left[7], segment = new Segment(new Point(x, y), setHandles && new Point(left[4] - x, left[5] - y), setHandles && new Point(right[2] - x, right[3] - y));\n if (path) {\n path.insert(seg1._index + 1, segment);\n res = this.getNext();\n } else {\n this._segment2 = segment;\n this._changed();\n res = new Curve(segment, seg2);\n }\n }\n return res;\n },\n splitAt: function(location) {\n var path = this._path;\n return path ? path.splitAt(location) : null;\n },\n splitAtTime: function(time) {\n return this.splitAt(this.getLocationAtTime(time));\n },\n divide: function(offset, isTime) {\n return this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset : this.getTimeAt(offset));\n },\n split: function(offset, isTime) {\n return this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset : this.getTimeAt(offset));\n },\n reversed: function() {\n return new Curve(this._segment2.reversed(), this._segment1.reversed());\n },\n clearHandles: function() {\n this._segment1._handleOut._set(0, 0);\n this._segment2._handleIn._set(0, 0);\n },\n statics: {\n getValues: function(segment1, segment2, matrix, straight) {\n var p1 = segment1._point, h1 = segment1._handleOut, h2 = segment2._handleIn, p2 = segment2._point, x1 = p1.x, y1 = p1.y, x2 = p2.x, y2 = p2.y, values = straight ? [\n x1,\n y1,\n x1,\n y1,\n x2,\n y2,\n x2,\n y2\n ] : [\n x1,\n y1,\n x1 + h1._x,\n y1 + h1._y,\n x2 + h2._x,\n y2 + h2._y,\n x2,\n y2\n ];\n if (matrix) matrix._transformCoordinates(values, values, 4);\n return values;\n },\n subdivide: function(v, t) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7];\n if (t === undefined) t = 0.5;\n var u = 1 - t, x4 = u * x0 + t * x1, y4 = u * y0 + t * y1, x5 = u * x1 + t * x2, y5 = u * y1 + t * y2, x6 = u * x2 + t * x3, y6 = u * y2 + t * y3, x7 = u * x4 + t * x5, y7 = u * y4 + t * y5, x8 = u * x5 + t * x6, y8 = u * y5 + t * y6, x9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n return [\n [\n x0,\n y0,\n x4,\n y4,\n x7,\n y7,\n x9,\n y9\n ],\n [\n x9,\n y9,\n x8,\n y8,\n x6,\n y6,\n x3,\n y3\n ]\n ];\n },\n getMonoCurves: function(v, dir) {\n var curves = [], io = dir ? 0 : 1, o0 = v[io + 0], o1 = v[io + 2], o2 = v[io + 4], o3 = v[io + 6];\n if (o0 >= o1 === o1 >= o2 && o1 >= o2 === o2 >= o3 || Curve.isStraight(v)) curves.push(v);\n else {\n var a = 3 * (o1 - o2) - o0 + o3, b = 2 * (o0 + o2) - 4 * o1, c = o1 - o0, tMin = 1e-8, tMax = 1 - tMin, roots = [], n = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n if (!n) curves.push(v);\n else {\n roots.sort();\n var t = roots[0], parts = Curve.subdivide(v, t);\n curves.push(parts[0]);\n if (n > 1) {\n t = (roots[1] - t) / (1 - t);\n parts = Curve.subdivide(parts[1], t);\n curves.push(parts[0]);\n }\n curves.push(parts[1]);\n }\n }\n return curves;\n },\n solveCubic: function(v, coord, val, roots, min, max) {\n var v0 = v[coord], v1 = v[coord + 2], v2 = v[coord + 4], v3 = v[coord + 6], res = 0;\n if (!(v0 < val && v3 < val && v1 < val && v2 < val || v0 > val && v3 > val && v1 > val && v2 > val)) {\n var c = 3 * (v1 - v0), b = 3 * (v2 - v1) - c, a = v3 - v0 - c - b;\n res = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n }\n return res;\n },\n getTimeOf: function(v, point) {\n var p0 = new Point(v[0], v[1]), p3 = new Point(v[6], v[7]), epsilon = 1e-12, geomEpsilon = 1e-7, t = point.isClose(p0, epsilon) ? 0 : point.isClose(p3, epsilon) ? 1 : null;\n if (t === null) {\n var coords = [\n point.x,\n point.y\n ], roots = [];\n for(var c = 0; c < 2; c++){\n var count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n for(var i = 0; i < count; i++){\n var u = roots[i];\n if (point.isClose(Curve.getPoint(v, u), geomEpsilon)) return u;\n }\n }\n }\n return point.isClose(p0, geomEpsilon) ? 0 : point.isClose(p3, geomEpsilon) ? 1 : null;\n },\n getNearestTime: function(v, point) {\n if (Curve.isStraight(v)) {\n var x0 = v[0], y0 = v[1], x3 = v[6], y3 = v[7], vx = x3 - x0, vy = y3 - y0, det = vx * vx + vy * vy;\n if (det === 0) return 0;\n var u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n return u < 1e-12 ? 0 : u > 0.999999999999 ? 1 : Curve.getTimeOf(v, new Point(x0 + u * vx, y0 + u * vy));\n }\n var count = 100, minDist = Infinity, minT = 0;\n function refine(t) {\n if (t >= 0 && t <= 1) {\n var dist = point.getDistance(Curve.getPoint(v, t), true);\n if (dist < minDist) {\n minDist = dist;\n minT = t;\n return true;\n }\n }\n }\n for(var i = 0; i <= count; i++)refine(i / count);\n var step = 1 / (count * 2);\n while(step > 1e-8)if (!refine(minT - step) && !refine(minT + step)) step /= 2;\n return minT;\n },\n getPart: function(v, from, to) {\n var flip = from > to;\n if (flip) {\n var tmp = from;\n from = to;\n to = tmp;\n }\n if (from > 0) v = Curve.subdivide(v, from)[1];\n if (to < 1) v = Curve.subdivide(v, (to - from) / (1 - from))[0];\n return flip ? [\n v[6],\n v[7],\n v[4],\n v[5],\n v[2],\n v[3],\n v[0],\n v[1]\n ] : v;\n },\n isFlatEnough: function(v, flatness) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ux = 3 * x1 - 2 * x0 - x3, uy = 3 * y1 - 2 * y0 - y3, vx = 3 * x2 - 2 * x3 - x0, vy = 3 * y2 - 2 * y3 - y0;\n return Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy) <= 16 * flatness * flatness;\n },\n getArea: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7];\n return 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2) + y1 * (x0 - x2) - x1 * (y0 - y2) + y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n },\n getBounds: function(v) {\n var min = v.slice(0, 2), max = min.slice(), roots = [\n 0,\n 0\n ];\n for(var i = 0; i < 2; i++)Curve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6], i, 0, min, max, roots);\n return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n _addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n function add(value, padding) {\n var left = value - padding, right = value + padding;\n if (left < min[coord]) min[coord] = left;\n if (right > max[coord]) max[coord] = right;\n }\n padding /= 2;\n var minPad = min[coord] + padding, maxPad = max[coord] - padding;\n if (v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad || v0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n if (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n add(v0, 0);\n add(v3, 0);\n } else {\n var a = 3 * (v1 - v2) - v0 + v3, b = 2 * (v0 + v2) - 4 * v1, c = v1 - v0, count = Numerical.solveQuadratic(a, b, c, roots), tMin = 1e-8, tMax = 1 - tMin;\n add(v3, 0);\n for(var i = 0; i < count; i++){\n var t = roots[i], u = 1 - t;\n if (tMin <= t && t <= tMax) add(u * u * u * v0 + 3 * u * u * t * v1 + 3 * u * t * t * v2 + t * t * t * v3, padding);\n }\n }\n }\n }\n }\n }, Base.each([\n \"getBounds\",\n \"getStrokeBounds\",\n \"getHandleBounds\"\n ], function(name) {\n this[name] = function() {\n if (!this._bounds) this._bounds = {};\n var bounds = this._bounds[name];\n if (!bounds) bounds = this._bounds[name] = Path[name]([\n this._segment1,\n this._segment2\n ], false, this._path);\n return bounds.clone();\n };\n }, {}), Base.each({\n isStraight: function(p1, h1, h2, p2) {\n if (h1.isZero() && h2.isZero()) return true;\n else {\n var v = p2.subtract(p1);\n if (v.isZero()) return false;\n else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n var l = new Line(p1, p2), epsilon = 1e-7;\n if (l.getDistance(p1.add(h1)) < epsilon && l.getDistance(p2.add(h2)) < epsilon) {\n var div = v.dot(v), s1 = v.dot(h1) / div, s2 = v.dot(h2) / div;\n return s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n }\n }\n }\n return false;\n },\n isLinear: function(p1, h1, h2, p2) {\n var third = p2.subtract(p1).divide(3);\n return h1.equals(third) && h2.negate().equals(third);\n }\n }, function(test, name) {\n this[name] = function(epsilon) {\n var seg1 = this._segment1, seg2 = this._segment2;\n return test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point, epsilon);\n };\n this.statics[name] = function(v, epsilon) {\n var x0 = v[0], y0 = v[1], x3 = v[6], y3 = v[7];\n return test(new Point(x0, y0), new Point(v[2] - x0, v[3] - y0), new Point(v[4] - x3, v[5] - y3), new Point(x3, y3), epsilon);\n };\n }, {\n statics: {},\n hasHandles: function() {\n return !this._segment1._handleOut.isZero() || !this._segment2._handleIn.isZero();\n },\n hasLength: function(epsilon) {\n return (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles()) && this.getLength() > (epsilon || 0);\n },\n isCollinear: function(curve) {\n return curve && this.isStraight() && curve.isStraight() && this.getLine().isCollinear(curve.getLine());\n },\n isHorizontal: function() {\n return this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y) < 1e-8;\n },\n isVertical: function() {\n return this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x) < 1e-8;\n }\n }), {\n beans: false,\n getLocationAt: function(offset, _isTime) {\n return this.getLocationAtTime(_isTime ? offset : this.getTimeAt(offset));\n },\n getLocationAtTime: function(t) {\n return t != null && t >= 0 && t <= 1 ? new CurveLocation(this, t) : null;\n },\n getTimeAt: function(offset, start) {\n return Curve.getTimeAt(this.getValues(), offset, start);\n },\n getParameterAt: \"#getTimeAt\",\n getTimesWithTangent: function() {\n var tangent = Point.read(arguments);\n return tangent.isZero() ? [] : Curve.getTimesWithTangent(this.getValues(), tangent);\n },\n getOffsetAtTime: function(t) {\n return this.getPartLength(0, t);\n },\n getLocationOf: function() {\n return this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n },\n getOffsetOf: function() {\n var loc = this.getLocationOf.apply(this, arguments);\n return loc ? loc.getOffset() : null;\n },\n getTimeOf: function() {\n return Curve.getTimeOf(this.getValues(), Point.read(arguments));\n },\n getParameterOf: \"#getTimeOf\",\n getNearestLocation: function() {\n var point = Point.read(arguments), values = this.getValues(), t = Curve.getNearestTime(values, point), pt = Curve.getPoint(values, t);\n return new CurveLocation(this, t, pt, null, point.getDistance(pt));\n },\n getNearestPoint: function() {\n var loc = this.getNearestLocation.apply(this, arguments);\n return loc ? loc.getPoint() : loc;\n }\n }, new function() {\n var methods = [\n \"getPoint\",\n \"getTangent\",\n \"getNormal\",\n \"getWeightedTangent\",\n \"getWeightedNormal\",\n \"getCurvature\"\n ];\n return Base.each(methods, function(name) {\n this[name + \"At\"] = function(location, _isTime) {\n var values = this.getValues();\n return Curve[name](values, _isTime ? location : Curve.getTimeAt(values, location));\n };\n this[name + \"AtTime\"] = function(time) {\n return Curve[name](this.getValues(), time);\n };\n }, {\n statics: {\n _evaluateMethods: methods\n }\n });\n }, new function() {\n function getLengthIntegrand(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ax = 9 * (x1 - x2) + 3 * (x3 - x0), bx = 6 * (x0 + x2) - 12 * x1, cx = 3 * (x1 - x0), ay = 9 * (y1 - y2) + 3 * (y3 - y0), by = 6 * (y0 + y2) - 12 * y1, cy = 3 * (y1 - y0);\n return function(t) {\n var dx = (ax * t + bx) * t + cx, dy = (ay * t + by) * t + cy;\n return Math.sqrt(dx * dx + dy * dy);\n };\n }\n function getIterations(a, b) {\n return Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n }\n function evaluate(v, t, type, normalized) {\n if (t == null || t < 0 || t > 1) return null;\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], isZero = Numerical.isZero;\n if (isZero(x1 - x0) && isZero(y1 - y0)) {\n x1 = x0;\n y1 = y0;\n }\n if (isZero(x2 - x3) && isZero(y2 - y3)) {\n x2 = x3;\n y2 = y3;\n }\n var cx = 3 * (x1 - x0), bx = 3 * (x2 - x1) - cx, ax = x3 - x0 - cx - bx, cy = 3 * (y1 - y0), by = 3 * (y2 - y1) - cy, ay = y3 - y0 - cy - by, x, y;\n if (type === 0) {\n x = t === 0 ? x0 : t === 1 ? x3 : ((ax * t + bx) * t + cx) * t + x0;\n y = t === 0 ? y0 : t === 1 ? y3 : ((ay * t + by) * t + cy) * t + y0;\n } else {\n var tMin = 1e-8, tMax = 1 - tMin;\n if (t < tMin) {\n x = cx;\n y = cy;\n } else if (t > tMax) {\n x = 3 * (x3 - x2);\n y = 3 * (y3 - y2);\n } else {\n x = (3 * ax * t + 2 * bx) * t + cx;\n y = (3 * ay * t + 2 * by) * t + cy;\n }\n if (normalized) {\n if (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n x = x2 - x1;\n y = y2 - y1;\n }\n var len = Math.sqrt(x * x + y * y);\n if (len) {\n x /= len;\n y /= len;\n }\n }\n if (type === 3) {\n var x2 = 6 * ax * t + 2 * bx, y2 = 6 * ay * t + 2 * by, d = Math.pow(x * x + y * y, 1.5);\n x = d !== 0 ? (x * y2 - y * x2) / d : 0;\n y = 0;\n }\n }\n return type === 2 ? new Point(y, -x) : new Point(x, y);\n }\n return {\n statics: {\n classify: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], a1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2, a2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3, a3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0, d3 = 3 * a3, d2 = d3 - a2, d1 = d2 - a2 + a1, l = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3), s = l !== 0 ? 1 / l : 0, isZero = Numerical.isZero, serpentine = \"serpentine\";\n d1 *= s;\n d2 *= s;\n d3 *= s;\n function type(type, t1, t2) {\n var hasRoots = t1 !== undefined, t1Ok = hasRoots && t1 > 0 && t1 < 1, t2Ok = hasRoots && t2 > 0 && t2 < 1;\n if (hasRoots && (!(t1Ok || t2Ok) || type === \"loop\" && !(t1Ok && t2Ok))) {\n type = \"arch\";\n t1Ok = t2Ok = false;\n }\n return {\n type: type,\n roots: t1Ok || t2Ok ? t1Ok && t2Ok ? t1 < t2 ? [\n t1,\n t2\n ] : [\n t2,\n t1\n ] : [\n t1Ok ? t1 : t2\n ] : null\n };\n }\n if (isZero(d1)) return isZero(d2) ? type(isZero(d3) ? \"line\" : \"quadratic\") : type(serpentine, d3 / (3 * d2));\n var d = 3 * d2 * d2 - 4 * d1 * d3;\n if (isZero(d)) return type(\"cusp\", d2 / (2 * d1));\n var f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d), f2 = 2 * d1;\n return type(d > 0 ? serpentine : \"loop\", (d2 + f1) / f2, (d2 - f1) / f2);\n },\n getLength: function(v, a, b, ds) {\n if (a === undefined) a = 0;\n if (b === undefined) b = 1;\n if (Curve.isStraight(v)) {\n var c = v;\n if (b < 1) {\n c = Curve.subdivide(c, b)[0];\n a /= b;\n }\n if (a > 0) c = Curve.subdivide(c, a)[1];\n var dx = c[6] - c[0], dy = c[7] - c[1];\n return Math.sqrt(dx * dx + dy * dy);\n }\n return Numerical.integrate(ds || getLengthIntegrand(v), a, b, getIterations(a, b));\n },\n getTimeAt: function(v, offset, start) {\n if (start === undefined) start = offset < 0 ? 1 : 0;\n if (offset === 0) return start;\n var abs = Math.abs, epsilon = 1e-12, forward = offset > 0, a = forward ? start : 0, b = forward ? 1 : start, ds = getLengthIntegrand(v), rangeLength = Curve.getLength(v, a, b, ds), diff = abs(offset) - rangeLength;\n if (abs(diff) < epsilon) return forward ? b : a;\n else if (diff > epsilon) return null;\n var guess = offset / rangeLength, length = 0;\n function f(t) {\n length += Numerical.integrate(ds, start, t, getIterations(start, t));\n start = t;\n return length - offset;\n }\n return Numerical.findRoot(f, ds, start + guess, a, b, 32, 1e-12);\n },\n getPoint: function(v, t) {\n return evaluate(v, t, 0, false);\n },\n getTangent: function(v, t) {\n return evaluate(v, t, 1, true);\n },\n getWeightedTangent: function(v, t) {\n return evaluate(v, t, 1, false);\n },\n getNormal: function(v, t) {\n return evaluate(v, t, 2, true);\n },\n getWeightedNormal: function(v, t) {\n return evaluate(v, t, 2, false);\n },\n getCurvature: function(v, t) {\n return evaluate(v, t, 3, false).x;\n },\n getPeaks: function(v) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], ax = -x0 + 3 * x1 - 3 * x2 + x3, bx = 3 * x0 - 6 * x1 + 3 * x2, cx = -3 * x0 + 3 * x1, ay = -y0 + 3 * y1 - 3 * y2 + y3, by = 3 * y0 - 6 * y1 + 3 * y2, cy = -3 * y0 + 3 * y1, tMin = 1e-8, tMax = 1 - tMin, roots = [];\n Numerical.solveCubic(9 * (ax * ax + ay * ay), 9 * (ax * bx + by * ay), 2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay), cx * bx + by * cy, roots, tMin, tMax);\n return roots.sort();\n }\n }\n };\n }, new function() {\n function addLocation(locations, include, c1, t1, c2, t2, overlap) {\n var excludeStart = !overlap && c1.getPrevious() === c2, excludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2, tMin = 1e-8, tMax = 1 - tMin;\n if (t1 !== null && t1 >= (excludeStart ? tMin : 0) && t1 <= (excludeEnd ? tMax : 1)) {\n if (t2 !== null && t2 >= (excludeEnd ? tMin : 0) && t2 <= (excludeStart ? tMax : 1)) {\n var loc1 = new CurveLocation(c1, t1, null, overlap), loc2 = new CurveLocation(c2, t2, null, overlap);\n loc1._intersection = loc2;\n loc2._intersection = loc1;\n if (!include || include(loc1)) CurveLocation.insert(locations, loc1, true);\n }\n }\n }\n function addCurveIntersections(v1, v2, c1, c2, locations, include, flip, recursion, calls, tMin, tMax, uMin, uMax) {\n if (++calls >= 4096 || ++recursion >= 40) return calls;\n var fatLineEpsilon = 1e-9, q0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7], getSignedDistance = Line.getSignedDistance, d1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]), d2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]), factor = d1 * d2 > 0 ? 3 / 4 : 4 / 9, dMin = factor * Math.min(0, d1, d2), dMax = factor * Math.max(0, d1, d2), dp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]), dp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]), dp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]), dp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]), hull = getConvexHull(dp0, dp1, dp2, dp3), top = hull[0], bottom = hull[1], tMinClip, tMaxClip;\n if (d1 === 0 && d2 === 0 && dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0 || (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null || (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(), dMin, dMax)) == null) return calls;\n var tMinNew = tMin + (tMax - tMin) * tMinClip, tMaxNew = tMin + (tMax - tMin) * tMaxClip;\n if (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n var t = (tMinNew + tMaxNew) / 2, u = (uMin + uMax) / 2;\n addLocation(locations, include, flip ? c2 : c1, flip ? u : t, flip ? c1 : c2, flip ? t : u);\n } else {\n v1 = Curve.getPart(v1, tMinClip, tMaxClip);\n var uDiff = uMax - uMin;\n if (tMaxClip - tMinClip > 0.8) {\n if (tMaxNew - tMinNew > uDiff) {\n var parts = Curve.subdivide(v1, 0.5), t = (tMinNew + tMaxNew) / 2;\n calls = addCurveIntersections(v2, parts[0], c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, tMinNew, t);\n calls = addCurveIntersections(v2, parts[1], c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, t, tMaxNew);\n } else {\n var parts = Curve.subdivide(v2, 0.5), u = (uMin + uMax) / 2;\n calls = addCurveIntersections(parts[0], v1, c2, c1, locations, include, !flip, recursion, calls, uMin, u, tMinNew, tMaxNew);\n calls = addCurveIntersections(parts[1], v1, c2, c1, locations, include, !flip, recursion, calls, u, uMax, tMinNew, tMaxNew);\n }\n } else if (uDiff === 0 || uDiff >= fatLineEpsilon) calls = addCurveIntersections(v2, v1, c2, c1, locations, include, !flip, recursion, calls, uMin, uMax, tMinNew, tMaxNew);\n else calls = addCurveIntersections(v1, v2, c1, c2, locations, include, flip, recursion, calls, tMinNew, tMaxNew, uMin, uMax);\n }\n return calls;\n }\n function getConvexHull(dq0, dq1, dq2, dq3) {\n var p0 = [\n 0,\n dq0\n ], p1 = [\n 1 / 3,\n dq1\n ], p2 = [\n 2 / 3,\n dq2\n ], p3 = [\n 1,\n dq3\n ], dist1 = dq1 - (2 * dq0 + dq3) / 3, dist2 = dq2 - (dq0 + 2 * dq3) / 3, hull;\n if (dist1 * dist2 < 0) hull = [\n [\n p0,\n p1,\n p3\n ],\n [\n p0,\n p2,\n p3\n ]\n ];\n else {\n var distRatio = dist1 / dist2;\n hull = [\n distRatio >= 2 ? [\n p0,\n p1,\n p3\n ] : distRatio <= 0.5 ? [\n p0,\n p2,\n p3\n ] : [\n p0,\n p1,\n p2,\n p3\n ],\n [\n p0,\n p3\n ]\n ];\n }\n return (dist1 || dist2) < 0 ? hull.reverse() : hull;\n }\n function clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n if (hullTop[0][1] < dMin) return clipConvexHullPart(hullTop, true, dMin);\n else if (hullBottom[0][1] > dMax) return clipConvexHullPart(hullBottom, false, dMax);\n else return hullTop[0][0];\n }\n function clipConvexHullPart(part, top, threshold) {\n var px = part[0][0], py = part[0][1];\n for(var i = 1, l = part.length; i < l; i++){\n var qx = part[i][0], qy = part[i][1];\n if (top ? qy >= threshold : qy <= threshold) return qy === threshold ? qx : px + (threshold - py) * (qx - px) / (qy - py);\n px = qx;\n py = qy;\n }\n return null;\n }\n function getCurveLineIntersections(v, px, py, vx, vy) {\n var isZero = Numerical.isZero;\n if (isZero(vx) && isZero(vy)) {\n var t = Curve.getTimeOf(v, new Point(px, py));\n return t === null ? [] : [\n t\n ];\n }\n var angle = Math.atan2(-vy, vx), sin = Math.sin(angle), cos = Math.cos(angle), rv = [], roots = [];\n for(var i = 0; i < 8; i += 2){\n var x = v[i] - px, y = v[i + 1] - py;\n rv.push(x * cos - y * sin, x * sin + y * cos);\n }\n Curve.solveCubic(rv, 1, 0, roots, 0, 1);\n return roots;\n }\n function addCurveLineIntersections(v1, v2, c1, c2, locations, include, flip) {\n var x1 = v2[0], y1 = v2[1], x2 = v2[6], y2 = v2[7], roots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n for(var i = 0, l = roots.length; i < l; i++){\n var t1 = roots[i], p1 = Curve.getPoint(v1, t1), t2 = Curve.getTimeOf(v2, p1);\n if (t2 !== null) addLocation(locations, include, flip ? c2 : c1, flip ? t2 : t1, flip ? c1 : c2, flip ? t1 : t2);\n }\n }\n function addLineIntersection(v1, v2, c1, c2, locations, include) {\n var pt = Line.intersect(v1[0], v1[1], v1[6], v1[7], v2[0], v2[1], v2[6], v2[7]);\n if (pt) addLocation(locations, include, c1, Curve.getTimeOf(v1, pt), c2, Curve.getTimeOf(v2, pt));\n }\n function getCurveIntersections(v1, v2, c1, c2, locations, include) {\n var epsilon = 1e-12, min = Math.min, max = Math.max;\n if (max(v1[0], v1[2], v1[4], v1[6]) + epsilon > min(v2[0], v2[2], v2[4], v2[6]) && min(v1[0], v1[2], v1[4], v1[6]) - epsilon < max(v2[0], v2[2], v2[4], v2[6]) && max(v1[1], v1[3], v1[5], v1[7]) + epsilon > min(v2[1], v2[3], v2[5], v2[7]) && min(v1[1], v1[3], v1[5], v1[7]) - epsilon < max(v2[1], v2[3], v2[5], v2[7])) {\n var overlaps = getOverlaps(v1, v2);\n if (overlaps) for(var i = 0; i < 2; i++){\n var overlap = overlaps[i];\n addLocation(locations, include, c1, overlap[0], c2, overlap[1], true);\n }\n else {\n var straight1 = Curve.isStraight(v1), straight2 = Curve.isStraight(v2), straight = straight1 && straight2, flip = straight1 && !straight2, before = locations.length;\n (straight ? addLineIntersection : straight1 || straight2 ? addCurveLineIntersections : addCurveIntersections)(flip ? v2 : v1, flip ? v1 : v2, flip ? c2 : c1, flip ? c1 : c2, locations, include, flip, 0, 0, 0, 1, 0, 1);\n if (!straight || locations.length === before) for(var i = 0; i < 4; i++){\n var t1 = i >> 1, t2 = i & 1, i1 = t1 * 6, i2 = t2 * 6, p1 = new Point(v1[i1], v1[i1 + 1]), p2 = new Point(v2[i2], v2[i2 + 1]);\n if (p1.isClose(p2, epsilon)) addLocation(locations, include, c1, t1, c2, t2);\n }\n }\n }\n return locations;\n }\n function getSelfIntersection(v1, c1, locations, include) {\n var info = Curve.classify(v1);\n if (info.type === \"loop\") {\n var roots = info.roots;\n addLocation(locations, include, c1, roots[0], c1, roots[1]);\n }\n return locations;\n }\n function getIntersections(curves1, curves2, include, matrix1, matrix2, _returnFirst) {\n var epsilon = 1e-7, self1 = !curves2;\n if (self1) curves2 = curves1;\n var length1 = curves1.length, length2 = curves2.length, values1 = new Array(length1), values2 = self1 ? values1 : new Array(length2), locations = [];\n for(var i = 0; i < length1; i++)values1[i] = curves1[i].getValues(matrix1);\n if (!self1) for(var i = 0; i < length2; i++)values2[i] = curves2[i].getValues(matrix2);\n var boundsCollisions = CollisionDetection.findCurveBoundsCollisions(values1, values2, epsilon);\n for(var index1 = 0; index1 < length1; index1++){\n var curve1 = curves1[index1], v1 = values1[index1];\n if (self1) getSelfIntersection(v1, curve1, locations, include);\n var collisions1 = boundsCollisions[index1];\n if (collisions1) for(var j = 0; j < collisions1.length; j++){\n if (_returnFirst && locations.length) return locations;\n var index2 = collisions1[j];\n if (!self1 || index2 > index1) {\n var curve2 = curves2[index2], v2 = values2[index2];\n getCurveIntersections(v1, v2, curve1, curve2, locations, include);\n }\n }\n }\n return locations;\n }\n function getOverlaps(v1, v2) {\n function getSquaredLineLength(v) {\n var x = v[6] - v[0], y = v[7] - v[1];\n return x * x + y * y;\n }\n var abs = Math.abs, getDistance = Line.getDistance, timeEpsilon = 1e-8, geomEpsilon = 1e-7, straight1 = Curve.isStraight(v1), straight2 = Curve.isStraight(v2), straightBoth = straight1 && straight2, flip = getSquaredLineLength(v1) < getSquaredLineLength(v2), l1 = flip ? v2 : v1, l2 = flip ? v1 : v2, px = l1[0], py = l1[1], vx = l1[6] - px, vy = l1[7] - py;\n if (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n if (!straightBoth && getDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon && getDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon && getDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) straight1 = straight2 = straightBoth = true;\n } else if (straightBoth) return null;\n if (straight1 ^ straight2) return null;\n var v = [\n v1,\n v2\n ], pairs = [];\n for(var i = 0; i < 4 && pairs.length < 2; i++){\n var i1 = i & 1, i2 = i1 ^ 1, t1 = i >> 1, t2 = Curve.getTimeOf(v[i1], new Point(v[i2][t1 ? 6 : 0], v[i2][t1 ? 7 : 1]));\n if (t2 != null) {\n var pair = i1 ? [\n t1,\n t2\n ] : [\n t2,\n t1\n ];\n if (!pairs.length || abs(pair[0] - pairs[0][0]) > timeEpsilon && abs(pair[1] - pairs[0][1]) > timeEpsilon) pairs.push(pair);\n }\n if (i > 2 && !pairs.length) break;\n }\n if (pairs.length !== 2) pairs = null;\n else if (!straightBoth) {\n var o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]), o2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n if (abs(o2[2] - o1[2]) > geomEpsilon || abs(o2[3] - o1[3]) > geomEpsilon || abs(o2[4] - o1[4]) > geomEpsilon || abs(o2[5] - o1[5]) > geomEpsilon) pairs = null;\n }\n return pairs;\n }\n function getTimesWithTangent(v, tangent) {\n var x0 = v[0], y0 = v[1], x1 = v[2], y1 = v[3], x2 = v[4], y2 = v[5], x3 = v[6], y3 = v[7], normalized = tangent.normalize(), tx = normalized.x, ty = normalized.y, ax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0, ay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0, bx = 6 * x2 - 12 * x1 + 6 * x0, by = 6 * y2 - 12 * y1 + 6 * y0, cx = 3 * x1 - 3 * x0, cy = 3 * y1 - 3 * y0, den = 2 * ax * ty - 2 * ay * tx, times = [];\n if (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n var num = ax * cy - ay * cx, den = ax * by - ay * bx;\n if (den != 0) {\n var t = -num / den;\n if (t >= 0 && t <= 1) times.push(t);\n }\n } else {\n var delta = (bx * bx - 4 * ax * cx) * ty * ty + (-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty + (by * by - 4 * ay * cy) * tx * tx, k = bx * ty - by * tx;\n if (delta >= 0 && den != 0) {\n var d = Math.sqrt(delta), t0 = -(k + d) / den, t1 = (-k + d) / den;\n if (t0 >= 0 && t0 <= 1) times.push(t0);\n if (t1 >= 0 && t1 <= 1) times.push(t1);\n }\n }\n return times;\n }\n return {\n getIntersections: function(curve) {\n var v1 = this.getValues(), v2 = curve && curve !== this && curve.getValues();\n return v2 ? getCurveIntersections(v1, v2, this, curve, []) : getSelfIntersection(v1, this, []);\n },\n statics: {\n getOverlaps: getOverlaps,\n getIntersections: getIntersections,\n getCurveLineIntersections: getCurveLineIntersections,\n getTimesWithTangent: getTimesWithTangent\n }\n };\n });\n var CurveLocation = Base.extend({\n _class: \"CurveLocation\",\n initialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n if (time >= 0.99999999) {\n var next = curve.getNext();\n if (next) {\n time = 0;\n curve = next;\n }\n }\n this._setCurve(curve);\n this._time = time;\n this._point = point || curve.getPointAtTime(time);\n this._overlap = _overlap;\n this._distance = _distance;\n this._intersection = this._next = this._previous = null;\n },\n _setPath: function(path) {\n this._path = path;\n this._version = path ? path._version : 0;\n },\n _setCurve: function(curve) {\n this._setPath(curve._path);\n this._curve = curve;\n this._segment = null;\n this._segment1 = curve._segment1;\n this._segment2 = curve._segment2;\n },\n _setSegment: function(segment) {\n var curve = segment.getCurve();\n if (curve) this._setCurve(curve);\n else {\n this._setPath(segment._path);\n this._segment1 = segment;\n this._segment2 = null;\n }\n this._segment = segment;\n this._time = segment === this._segment1 ? 0 : 1;\n this._point = segment._point.clone();\n },\n getSegment: function() {\n var segment = this._segment;\n if (!segment) {\n var curve = this.getCurve(), time = this.getTime();\n if (time === 0) segment = curve._segment1;\n else if (time === 1) segment = curve._segment2;\n else if (time != null) segment = curve.getPartLength(0, time) < curve.getPartLength(time, 1) ? curve._segment1 : curve._segment2;\n this._segment = segment;\n }\n return segment;\n },\n getCurve: function() {\n var path = this._path, that = this;\n if (path && path._version !== this._version) this._time = this._offset = this._curveOffset = this._curve = null;\n function trySegment(segment) {\n var curve = segment && segment.getCurve();\n if (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n that._setCurve(curve);\n return curve;\n }\n }\n return this._curve || trySegment(this._segment) || trySegment(this._segment1) || trySegment(this._segment2.getPrevious());\n },\n getPath: function() {\n var curve = this.getCurve();\n return curve && curve._path;\n },\n getIndex: function() {\n var curve = this.getCurve();\n return curve && curve.getIndex();\n },\n getTime: function() {\n var curve = this.getCurve(), time = this._time;\n return curve && time == null ? this._time = curve.getTimeOf(this._point) : time;\n },\n getParameter: \"#getTime\",\n getPoint: function() {\n return this._point;\n },\n getOffset: function() {\n var offset = this._offset;\n if (offset == null) {\n offset = 0;\n var path = this.getPath(), index = this.getIndex();\n if (path && index != null) {\n var curves = path.getCurves();\n for(var i = 0; i < index; i++)offset += curves[i].getLength();\n }\n this._offset = offset += this.getCurveOffset();\n }\n return offset;\n },\n getCurveOffset: function() {\n var offset = this._curveOffset;\n if (offset == null) {\n var curve = this.getCurve(), time = this.getTime();\n this._curveOffset = offset = time != null && curve && curve.getPartLength(0, time);\n }\n return offset;\n },\n getIntersection: function() {\n return this._intersection;\n },\n getDistance: function() {\n return this._distance;\n },\n divide: function() {\n var curve = this.getCurve(), res = curve && curve.divideAtTime(this.getTime());\n if (res) this._setSegment(res._segment1);\n return res;\n },\n split: function() {\n var curve = this.getCurve(), path = curve._path, res = curve && curve.splitAtTime(this.getTime());\n if (res) this._setSegment(path.getLastSegment());\n return res;\n },\n equals: function(loc, _ignoreOther) {\n var res = this === loc;\n if (!res && loc instanceof CurveLocation) {\n var c1 = this.getCurve(), c2 = loc.getCurve(), p1 = c1._path, p2 = c2._path;\n if (p1 === p2) {\n var abs = Math.abs, epsilon = 1e-7, diff = abs(this.getOffset() - loc.getOffset()), i1 = !_ignoreOther && this._intersection, i2 = !_ignoreOther && loc._intersection;\n res = (diff < epsilon || p1 && abs(p1.getLength() - diff) < epsilon) && (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n }\n }\n return res;\n },\n toString: function() {\n var parts = [], point = this.getPoint(), f = Formatter.instance;\n if (point) parts.push(\"point: \" + point);\n var index = this.getIndex();\n if (index != null) parts.push(\"index: \" + index);\n var time = this.getTime();\n if (time != null) parts.push(\"time: \" + f.number(time));\n if (this._distance != null) parts.push(\"distance: \" + f.number(this._distance));\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n isTouching: function() {\n var inter = this._intersection;\n if (inter && this.getTangent().isCollinear(inter.getTangent())) {\n var curve1 = this.getCurve(), curve2 = inter.getCurve();\n return !(curve1.isStraight() && curve2.isStraight() && curve1.getLine().intersect(curve2.getLine()));\n }\n return false;\n },\n isCrossing: function() {\n var inter = this._intersection;\n if (!inter) return false;\n var t1 = this.getTime(), t2 = inter.getTime(), tMin = 1e-8, tMax = 1 - tMin, t1Inside = t1 >= tMin && t1 <= tMax, t2Inside = t2 >= tMin && t2 <= tMax;\n if (t1Inside && t2Inside) return !this.isTouching();\n var c2 = this.getCurve(), c1 = c2 && t1 < tMin ? c2.getPrevious() : c2, c4 = inter.getCurve(), c3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n if (t1 > tMax) c2 = c2.getNext();\n if (t2 > tMax) c4 = c4.getNext();\n if (!c1 || !c2 || !c3 || !c4) return false;\n var offsets = [];\n function addOffsets(curve, end) {\n var v = curve.getValues(), roots = Curve.classify(v).roots || Curve.getPeaks(v), count = roots.length, offset = Curve.getLength(v, end && count ? roots[count - 1] : 0, !end && count ? roots[0] : 1);\n offsets.push(count ? offset : offset / 32);\n }\n function isInRange(angle, min, max) {\n return min < max ? angle > min && angle < max : angle > min || angle < max;\n }\n if (!t1Inside) {\n addOffsets(c1, true);\n addOffsets(c2, false);\n }\n if (!t2Inside) {\n addOffsets(c3, true);\n addOffsets(c4, false);\n }\n var pt = this.getPoint(), offset = Math.min.apply(Math, offsets), v2 = t1Inside ? c2.getTangentAtTime(t1) : c2.getPointAt(offset).subtract(pt), v1 = t1Inside ? v2.negate() : c1.getPointAt(-offset).subtract(pt), v4 = t2Inside ? c4.getTangentAtTime(t2) : c4.getPointAt(offset).subtract(pt), v3 = t2Inside ? v4.negate() : c3.getPointAt(-offset).subtract(pt), a1 = v1.getAngle(), a2 = v2.getAngle(), a3 = v3.getAngle(), a4 = v4.getAngle();\n return !!(t1Inside ? isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4) && isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3) : isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2) && isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1));\n },\n hasOverlap: function() {\n return !!this._overlap;\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n var get = name + \"At\";\n this[name] = function() {\n var curve = this.getCurve(), time = this.getTime();\n return time != null && curve && curve[get](time, true);\n };\n }, {\n preserve: true\n }), new function() {\n function insert(locations, loc, merge) {\n var length = locations.length, l = 0, r = length - 1;\n function search(index, dir) {\n for(var i = index + dir; i >= -1 && i <= length; i += dir){\n var loc2 = locations[(i % length + length) % length];\n if (!loc.getPoint().isClose(loc2.getPoint(), 1e-7)) break;\n if (loc.equals(loc2)) return loc2;\n }\n return null;\n }\n while(l <= r){\n var m = l + r >>> 1, loc2 = locations[m], found;\n if (merge && (found = loc.equals(loc2) ? loc2 : search(m, -1) || search(m, 1))) {\n if (loc._overlap) found._overlap = found._intersection._overlap = true;\n return found;\n }\n var path1 = loc.getPath(), path2 = loc2.getPath(), diff = path1 !== path2 ? path1._id - path2._id : loc.getIndex() + loc.getTime() - (loc2.getIndex() + loc2.getTime());\n if (diff < 0) r = m - 1;\n else l = m + 1;\n }\n locations.splice(l, 0, loc);\n return loc;\n }\n return {\n statics: {\n insert: insert,\n expand: function(locations) {\n var expanded = locations.slice();\n for(var i = locations.length - 1; i >= 0; i--)insert(expanded, locations[i]._intersection, false);\n return expanded;\n }\n }\n };\n });\n var PathItem = Item.extend({\n _class: \"PathItem\",\n _selectBounds: false,\n _canScaleStroke: true,\n beans: true,\n initialize: function PathItem() {},\n statics: {\n create: function(arg) {\n var data, segments, compound;\n if (Base.isPlainObject(arg)) {\n segments = arg.segments;\n data = arg.pathData;\n } else if (Array.isArray(arg)) segments = arg;\n else if (typeof arg === \"string\") data = arg;\n if (segments) {\n var first = segments[0];\n compound = first && Array.isArray(first[0]);\n } else if (data) compound = (data.match(/m/gi) || []).length > 1 || /z\\s*\\S+/i.test(data);\n var ctor = compound ? CompoundPath : Path;\n return new ctor(arg);\n }\n },\n _asPathItem: function() {\n return this;\n },\n isClockwise: function() {\n return this.getArea() >= 0;\n },\n setClockwise: function(clockwise) {\n if (this.isClockwise() != (clockwise = !!clockwise)) this.reverse();\n },\n setPathData: function(data) {\n var parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig), coords, relative = false, previous, control, current = new Point(), start = new Point();\n function getCoord(index, coord) {\n var val = +coords[index];\n if (relative) val += current[coord];\n return val;\n }\n function getPoint(index) {\n return new Point(getCoord(index, \"x\"), getCoord(index + 1, \"y\"));\n }\n this.clear();\n for(var i = 0, l = parts && parts.length; i < l; i++){\n var part = parts[i], command = part[0], lower = command.toLowerCase();\n coords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n var length = coords && coords.length;\n relative = command === lower;\n if (previous === \"z\" && !/[mz]/.test(lower)) this.moveTo(current);\n switch(lower){\n case \"m\":\n case \"l\":\n var move = lower === \"m\";\n for(var j = 0; j < length; j += 2){\n this[move ? \"moveTo\" : \"lineTo\"](current = getPoint(j));\n if (move) {\n start = current;\n move = false;\n }\n }\n control = current;\n break;\n case \"h\":\n case \"v\":\n var coord = lower === \"h\" ? \"x\" : \"y\";\n current = current.clone();\n for(var j = 0; j < length; j++){\n current[coord] = getCoord(j, coord);\n this.lineTo(current);\n }\n control = current;\n break;\n case \"c\":\n for(var j = 0; j < length; j += 6)this.cubicCurveTo(getPoint(j), control = getPoint(j + 2), current = getPoint(j + 4));\n break;\n case \"s\":\n for(var j = 0; j < length; j += 4){\n this.cubicCurveTo(/[cs]/.test(previous) ? current.multiply(2).subtract(control) : current, control = getPoint(j), current = getPoint(j + 2));\n previous = lower;\n }\n break;\n case \"q\":\n for(var j = 0; j < length; j += 4)this.quadraticCurveTo(control = getPoint(j), current = getPoint(j + 2));\n break;\n case \"t\":\n for(var j = 0; j < length; j += 2){\n this.quadraticCurveTo(control = /[qt]/.test(previous) ? current.multiply(2).subtract(control) : current, current = getPoint(j));\n previous = lower;\n }\n break;\n case \"a\":\n for(var j = 0; j < length; j += 7)this.arcTo(current = getPoint(j + 5), new Size(+coords[j], +coords[j + 1]), +coords[j + 2], +coords[j + 4], +coords[j + 3]);\n break;\n case \"z\":\n this.closePath(1e-12);\n current = start;\n break;\n }\n previous = lower;\n }\n },\n _canComposite: function() {\n return !(this.hasFill() && this.hasStroke());\n },\n _contains: function(point) {\n var winding = point.isInside(this.getBounds({\n internal: true,\n handle: true\n })) ? this._getWinding(point) : {};\n return winding.onPath || !!(this.getFillRule() === \"evenodd\" ? winding.windingL & 1 || winding.windingR & 1 : winding.winding);\n },\n getIntersections: function(path, include, _matrix, _returnFirst) {\n var self1 = this === path || !path, matrix1 = this._matrix._orNullIfIdentity(), matrix2 = self1 ? matrix1 : (_matrix || path._matrix)._orNullIfIdentity();\n return self1 || this.getBounds(matrix1).intersects(path.getBounds(matrix2), 1e-12) ? Curve.getIntersections(this.getCurves(), !self1 && path.getCurves(), include, matrix1, matrix2, _returnFirst) : [];\n },\n getCrossings: function(path) {\n return this.getIntersections(path, function(inter) {\n return inter.isCrossing();\n });\n },\n getNearestLocation: function() {\n var point = Point.read(arguments), curves = this.getCurves(), minDist = Infinity, minLoc = null;\n for(var i = 0, l = curves.length; i < l; i++){\n var loc = curves[i].getNearestLocation(point);\n if (loc._distance < minDist) {\n minDist = loc._distance;\n minLoc = loc;\n }\n }\n return minLoc;\n },\n getNearestPoint: function() {\n var loc = this.getNearestLocation.apply(this, arguments);\n return loc ? loc.getPoint() : loc;\n },\n interpolate: function(from, to, factor) {\n var isPath = !this._children, name = isPath ? \"_segments\" : \"_children\", itemsFrom = from[name], itemsTo = to[name], items = this[name];\n if (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) throw new Error(\"Invalid operands in interpolate() call: \" + from + \", \" + to);\n var current = items.length, length = itemsTo.length;\n if (current < length) {\n var ctor = isPath ? Segment : Path;\n for(var i = current; i < length; i++)this.add(new ctor());\n } else if (current > length) this[isPath ? \"removeSegments\" : \"removeChildren\"](length, current);\n for(var i = 0; i < length; i++)items[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n if (isPath) {\n this.setClosed(from._closed);\n this._changed(9);\n }\n },\n compare: function(path) {\n var ok = false;\n if (path) {\n var paths1 = this._children || [\n this\n ], paths2 = path._children ? path._children.slice() : [\n path\n ], length1 = paths1.length, length2 = paths2.length, matched = [], count = 0;\n ok = true;\n var boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n for(var i1 = length1 - 1; i1 >= 0 && ok; i1--){\n var path1 = paths1[i1];\n ok = false;\n var pathBoundsOverlaps = boundsOverlaps[i1];\n if (pathBoundsOverlaps) {\n for(var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--)if (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n if (!matched[pathBoundsOverlaps[i2]]) {\n matched[pathBoundsOverlaps[i2]] = true;\n count++;\n }\n ok = true;\n }\n }\n }\n ok = ok && count === length2;\n }\n return ok;\n }\n });\n var Path = PathItem.extend({\n _class: \"Path\",\n _serializeFields: {\n segments: [],\n closed: false\n },\n initialize: function Path(arg) {\n this._closed = false;\n this._segments = [];\n this._version = 0;\n var args = arguments, segments = Array.isArray(arg) ? typeof arg[0] === \"object\" ? arg : args : arg && arg.size === undefined && (arg.x !== undefined || arg.point !== undefined) ? args : null;\n if (segments && segments.length > 0) this.setSegments(segments);\n else {\n this._curves = undefined;\n this._segmentSelection = 0;\n if (!segments && typeof arg === \"string\") {\n this.setPathData(arg);\n arg = null;\n }\n }\n this._initialize(!segments && arg);\n },\n _equals: function(item) {\n return this._closed === item._closed && Base.equals(this._segments, item._segments);\n },\n copyContent: function(source) {\n this.setSegments(source._segments);\n this._closed = source._closed;\n },\n _changed: function _changed(flags) {\n _changed.base.call(this, flags);\n if (flags & 8) {\n this._length = this._area = undefined;\n if (flags & 32) this._version++;\n else if (this._curves) for(var i = 0, l = this._curves.length; i < l; i++)this._curves[i]._changed();\n } else if (flags & 64) this._bounds = undefined;\n },\n getStyle: function() {\n var parent = this._parent;\n return (parent instanceof CompoundPath ? parent : this)._style;\n },\n getSegments: function() {\n return this._segments;\n },\n setSegments: function(segments) {\n var fullySelected = this.isFullySelected(), length = segments && segments.length;\n this._segments.length = 0;\n this._segmentSelection = 0;\n this._curves = undefined;\n if (length) {\n var last = segments[length - 1];\n if (typeof last === \"boolean\") {\n this.setClosed(last);\n length--;\n }\n this._add(Segment.readList(segments, 0, {}, length));\n }\n if (fullySelected) this.setFullySelected(true);\n },\n getFirstSegment: function() {\n return this._segments[0];\n },\n getLastSegment: function() {\n return this._segments[this._segments.length - 1];\n },\n getCurves: function() {\n var curves = this._curves, segments = this._segments;\n if (!curves) {\n var length = this._countCurves();\n curves = this._curves = new Array(length);\n for(var i = 0; i < length; i++)curves[i] = new Curve(this, segments[i], segments[i + 1] || segments[0]);\n }\n return curves;\n },\n getFirstCurve: function() {\n return this.getCurves()[0];\n },\n getLastCurve: function() {\n var curves = this.getCurves();\n return curves[curves.length - 1];\n },\n isClosed: function() {\n return this._closed;\n },\n setClosed: function(closed) {\n if (this._closed != (closed = !!closed)) {\n this._closed = closed;\n if (this._curves) {\n var length = this._curves.length = this._countCurves();\n if (closed) this._curves[length - 1] = new Curve(this, this._segments[length - 1], this._segments[0]);\n }\n this._changed(41);\n }\n }\n }, {\n beans: true,\n getPathData: function(_matrix, _precision) {\n var segments = this._segments, length = segments.length, f = new Formatter(_precision), coords = new Array(6), first = true, curX, curY, prevX, prevY, inX, inY, outX, outY, parts = [];\n function addSegment(segment, skipLine) {\n segment._transformCoordinates(_matrix, coords);\n curX = coords[0];\n curY = coords[1];\n if (first) {\n parts.push(\"M\" + f.pair(curX, curY));\n first = false;\n } else {\n inX = coords[2];\n inY = coords[3];\n if (inX === curX && inY === curY && outX === prevX && outY === prevY) {\n if (!skipLine) {\n var dx = curX - prevX, dy = curY - prevY;\n parts.push(dx === 0 ? \"v\" + f.number(dy) : dy === 0 ? \"h\" + f.number(dx) : \"l\" + f.pair(dx, dy));\n }\n } else parts.push(\"c\" + f.pair(outX - prevX, outY - prevY) + \" \" + f.pair(inX - prevX, inY - prevY) + \" \" + f.pair(curX - prevX, curY - prevY));\n }\n prevX = curX;\n prevY = curY;\n outX = coords[4];\n outY = coords[5];\n }\n if (!length) return \"\";\n for(var i = 0; i < length; i++)addSegment(segments[i]);\n if (this._closed && length > 0) {\n addSegment(segments[0], true);\n parts.push(\"z\");\n }\n return parts.join(\"\");\n },\n isEmpty: function() {\n return !this._segments.length;\n },\n _transformContent: function(matrix) {\n var segments = this._segments, coords = new Array(6);\n for(var i = 0, l = segments.length; i < l; i++)segments[i]._transformCoordinates(matrix, coords, true);\n return true;\n },\n _add: function(segs, index) {\n var segments = this._segments, curves = this._curves, amount = segs.length, append = index == null, index = append ? segments.length : index;\n for(var i = 0; i < amount; i++){\n var segment = segs[i];\n if (segment._path) segment = segs[i] = segment.clone();\n segment._path = this;\n segment._index = index + i;\n if (segment._selection) this._updateSelection(segment, 0, segment._selection);\n }\n if (append) Base.push(segments, segs);\n else {\n segments.splice.apply(segments, [\n index,\n 0\n ].concat(segs));\n for(var i = index + amount, l = segments.length; i < l; i++)segments[i]._index = i;\n }\n if (curves) {\n var total = this._countCurves(), start = index > 0 && index + amount - 1 === total ? index - 1 : index, insert = start, end = Math.min(start + amount, total);\n if (segs._curves) {\n curves.splice.apply(curves, [\n start,\n 0\n ].concat(segs._curves));\n insert += segs._curves.length;\n }\n for(var i = insert; i < end; i++)curves.splice(i, 0, new Curve(this, null, null));\n this._adjustCurves(start, end);\n }\n this._changed(41);\n return segs;\n },\n _adjustCurves: function(start, end) {\n var segments = this._segments, curves = this._curves, curve;\n for(var i = start; i < end; i++){\n curve = curves[i];\n curve._path = this;\n curve._segment1 = segments[i];\n curve._segment2 = segments[i + 1] || segments[0];\n curve._changed();\n }\n if (curve = curves[this._closed && !start ? segments.length - 1 : start - 1]) {\n curve._segment2 = segments[start] || segments[0];\n curve._changed();\n }\n if (curve = curves[end]) {\n curve._segment1 = segments[end];\n curve._changed();\n }\n },\n _countCurves: function() {\n var length = this._segments.length;\n return !this._closed && length > 0 ? length - 1 : length;\n },\n add: function(segment1) {\n var args = arguments;\n return args.length > 1 && typeof segment1 !== \"number\" ? this._add(Segment.readList(args)) : this._add([\n Segment.read(args)\n ])[0];\n },\n insert: function(index, segment1) {\n var args = arguments;\n return args.length > 2 && typeof segment1 !== \"number\" ? this._add(Segment.readList(args, 1), index) : this._add([\n Segment.read(args, 1)\n ], index)[0];\n },\n addSegment: function() {\n return this._add([\n Segment.read(arguments)\n ])[0];\n },\n insertSegment: function(index) {\n return this._add([\n Segment.read(arguments, 1)\n ], index)[0];\n },\n addSegments: function(segments) {\n return this._add(Segment.readList(segments));\n },\n insertSegments: function(index, segments) {\n return this._add(Segment.readList(segments), index);\n },\n removeSegment: function(index) {\n return this.removeSegments(index, index + 1)[0] || null;\n },\n removeSegments: function(start, end, _includeCurves) {\n start = start || 0;\n end = Base.pick(end, this._segments.length);\n var segments = this._segments, curves = this._curves, count = segments.length, removed = segments.splice(start, end - start), amount = removed.length;\n if (!amount) return removed;\n for(var i = 0; i < amount; i++){\n var segment = removed[i];\n if (segment._selection) this._updateSelection(segment, segment._selection, 0);\n segment._index = segment._path = null;\n }\n for(var i = start, l = segments.length; i < l; i++)segments[i]._index = i;\n if (curves) {\n var index = start > 0 && end === count + (this._closed ? 1 : 0) ? start - 1 : start, curves = curves.splice(index, amount);\n for(var i = curves.length - 1; i >= 0; i--)curves[i]._path = null;\n if (_includeCurves) removed._curves = curves.slice(1);\n this._adjustCurves(index, index);\n }\n this._changed(41);\n return removed;\n },\n clear: \"#removeSegments\",\n hasHandles: function() {\n var segments = this._segments;\n for(var i = 0, l = segments.length; i < l; i++){\n if (segments[i].hasHandles()) return true;\n }\n return false;\n },\n clearHandles: function() {\n var segments = this._segments;\n for(var i = 0, l = segments.length; i < l; i++)segments[i].clearHandles();\n },\n getLength: function() {\n if (this._length == null) {\n var curves = this.getCurves(), length = 0;\n for(var i = 0, l = curves.length; i < l; i++)length += curves[i].getLength();\n this._length = length;\n }\n return this._length;\n },\n getArea: function() {\n var area = this._area;\n if (area == null) {\n var segments = this._segments, closed = this._closed;\n area = 0;\n for(var i = 0, l = segments.length; i < l; i++){\n var last = i + 1 === l;\n area += Curve.getArea(Curve.getValues(segments[i], segments[last ? 0 : i + 1], null, last && !closed));\n }\n this._area = area;\n }\n return area;\n },\n isFullySelected: function() {\n var length = this._segments.length;\n return this.isSelected() && length > 0 && this._segmentSelection === length * 7;\n },\n setFullySelected: function(selected) {\n if (selected) this._selectSegments(true);\n this.setSelected(selected);\n },\n setSelection: function setSelection(selection) {\n if (!(selection & 1)) this._selectSegments(false);\n setSelection.base.call(this, selection);\n },\n _selectSegments: function(selected) {\n var segments = this._segments, length = segments.length, selection = selected ? 7 : 0;\n this._segmentSelection = selection * length;\n for(var i = 0; i < length; i++)segments[i]._selection = selection;\n },\n _updateSelection: function(segment, oldSelection, newSelection) {\n segment._selection = newSelection;\n var selection = this._segmentSelection += newSelection - oldSelection;\n if (selection > 0) this.setSelected(true);\n },\n divideAt: function(location) {\n var loc = this.getLocationAt(location), curve;\n return loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset())) ? curve._segment1 : null;\n },\n splitAt: function(location) {\n var loc = this.getLocationAt(location), index = loc && loc.index, time = loc && loc.time, tMin = 1e-8, tMax = 1 - tMin;\n if (time > tMax) {\n index++;\n time = 0;\n }\n var curves = this.getCurves();\n if (index >= 0 && index < curves.length) {\n if (time >= tMin) curves[index++].divideAtTime(time);\n var segs = this.removeSegments(index, this._segments.length, true), path;\n if (this._closed) {\n this.setClosed(false);\n path = this;\n } else {\n path = new Path(Item.NO_INSERT);\n path.insertAbove(this);\n path.copyAttributes(this);\n }\n path._add(segs, 0);\n this.addSegment(segs[0]);\n return path;\n }\n return null;\n },\n split: function(index, time) {\n var curve, location = time === undefined ? index : (curve = this.getCurves()[index]) && curve.getLocationAtTime(time);\n return location != null ? this.splitAt(location) : null;\n },\n join: function(path, tolerance) {\n var epsilon = tolerance || 0;\n if (path && path !== this) {\n var segments = path._segments, last1 = this.getLastSegment(), last2 = path.getLastSegment();\n if (!last2) return this;\n if (last1 && last1._point.isClose(last2._point, epsilon)) path.reverse();\n var first2 = path.getFirstSegment();\n if (last1 && last1._point.isClose(first2._point, epsilon)) {\n last1.setHandleOut(first2._handleOut);\n this._add(segments.slice(1));\n } else {\n var first1 = this.getFirstSegment();\n if (first1 && first1._point.isClose(first2._point, epsilon)) path.reverse();\n last2 = path.getLastSegment();\n if (first1 && first1._point.isClose(last2._point, epsilon)) {\n first1.setHandleIn(last2._handleIn);\n this._add(segments.slice(0, segments.length - 1), 0);\n } else this._add(segments.slice());\n }\n if (path._closed) this._add([\n segments[0]\n ]);\n path.remove();\n }\n var first = this.getFirstSegment(), last = this.getLastSegment();\n if (first !== last && first._point.isClose(last._point, epsilon)) {\n first.setHandleIn(last._handleIn);\n last.remove();\n this.setClosed(true);\n }\n return this;\n },\n reduce: function(options) {\n var curves = this.getCurves(), simplify = options && options.simplify, tolerance = simplify ? 1e-7 : 0;\n for(var i = curves.length - 1; i >= 0; i--){\n var curve = curves[i];\n if (!curve.hasHandles() && (!curve.hasLength(tolerance) || simplify && curve.isCollinear(curve.getNext()))) curve.remove();\n }\n return this;\n },\n reverse: function() {\n this._segments.reverse();\n for(var i = 0, l = this._segments.length; i < l; i++){\n var segment = this._segments[i];\n var handleIn = segment._handleIn;\n segment._handleIn = segment._handleOut;\n segment._handleOut = handleIn;\n segment._index = i;\n }\n this._curves = null;\n this._changed(9);\n },\n flatten: function(flatness) {\n var flattener = new PathFlattener(this, flatness || 0.25, 256, true), parts = flattener.parts, length = parts.length, segments = [];\n for(var i = 0; i < length; i++)segments.push(new Segment(parts[i].curve.slice(0, 2)));\n if (!this._closed && length > 0) segments.push(new Segment(parts[length - 1].curve.slice(6)));\n this.setSegments(segments);\n },\n simplify: function(tolerance) {\n var segments = new PathFitter(this).fit(tolerance || 2.5);\n if (segments) this.setSegments(segments);\n return !!segments;\n },\n smooth: function(options) {\n var that = this, opts = options || {}, type = opts.type || \"asymmetric\", segments = this._segments, length = segments.length, closed = this._closed;\n function getIndex(value, _default) {\n var index = value && value.index;\n if (index != null) {\n var path = value.path;\n if (path && path !== that) throw new Error(value._class + \" \" + index + \" of \" + path + \" is not part of \" + that);\n if (_default && value instanceof Curve) index++;\n } else index = typeof value === \"number\" ? value : _default;\n return Math.min(index < 0 && closed ? index % length : index < 0 ? index + length : index, length - 1);\n }\n var loop = closed && opts.from === undefined && opts.to === undefined, from = getIndex(opts.from, 0), to = getIndex(opts.to, length - 1);\n if (from > to) {\n if (closed) from -= length;\n else {\n var tmp = from;\n from = to;\n to = tmp;\n }\n }\n if (/^(?:asymmetric|continuous)$/.test(type)) {\n var asymmetric = type === \"asymmetric\", min = Math.min, amount = to - from + 1, n = amount - 1, padding = loop ? min(amount, 4) : 1, paddingLeft = padding, paddingRight = padding, knots = [];\n if (!closed) {\n paddingLeft = min(1, from);\n paddingRight = min(1, length - to - 1);\n }\n n += paddingLeft + paddingRight;\n if (n <= 1) return;\n for(var i = 0, j = from - paddingLeft; i <= n; i++, j++)knots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n var x = knots[0]._x + 2 * knots[1]._x, y = knots[0]._y + 2 * knots[1]._y, f = 2, n_1 = n - 1, rx = [\n x\n ], ry = [\n y\n ], rf = [\n f\n ], px = [], py = [];\n for(var i = 1; i < n; i++){\n var internal = i < n_1, a = internal ? 1 : asymmetric ? 1 : 2, b = internal ? 4 : asymmetric ? 2 : 7, u = internal ? 4 : asymmetric ? 3 : 8, v = internal ? 2 : asymmetric ? 0 : 1, m = a / f;\n f = rf[i] = b - m;\n x = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n y = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n }\n px[n_1] = rx[n_1] / rf[n_1];\n py[n_1] = ry[n_1] / rf[n_1];\n for(var i = n - 2; i >= 0; i--){\n px[i] = (rx[i] - px[i + 1]) / rf[i];\n py[i] = (ry[i] - py[i + 1]) / rf[i];\n }\n px[n] = (3 * knots[n]._x - px[n_1]) / 2;\n py[n] = (3 * knots[n]._y - py[n_1]) / 2;\n for(var i = paddingLeft, max = n - paddingRight, j = from; i <= max; i++, j++){\n var segment = segments[j < 0 ? j + length : j], pt = segment._point, hx = px[i] - pt._x, hy = py[i] - pt._y;\n if (loop || i < max) segment.setHandleOut(hx, hy);\n if (loop || i > paddingLeft) segment.setHandleIn(-hx, -hy);\n }\n } else for(var i = from; i <= to; i++)segments[i < 0 ? i + length : i].smooth(opts, !loop && i === from, !loop && i === to);\n },\n toShape: function(insert) {\n if (!this._closed) return null;\n var segments = this._segments, type, size, radius, topCenter;\n function isCollinear(i, j) {\n var seg1 = segments[i], seg2 = seg1.getNext(), seg3 = segments[j], seg4 = seg3.getNext();\n return seg1._handleOut.isZero() && seg2._handleIn.isZero() && seg3._handleOut.isZero() && seg4._handleIn.isZero() && seg2._point.subtract(seg1._point).isCollinear(seg4._point.subtract(seg3._point));\n }\n function isOrthogonal(i) {\n var seg2 = segments[i], seg1 = seg2.getPrevious(), seg3 = seg2.getNext();\n return seg1._handleOut.isZero() && seg2._handleIn.isZero() && seg2._handleOut.isZero() && seg3._handleIn.isZero() && seg2._point.subtract(seg1._point).isOrthogonal(seg3._point.subtract(seg2._point));\n }\n function isArc(i) {\n var seg1 = segments[i], seg2 = seg1.getNext(), handle1 = seg1._handleOut, handle2 = seg2._handleIn, kappa = 0.5522847498307936;\n if (handle1.isOrthogonal(handle2)) {\n var pt1 = seg1._point, pt2 = seg2._point, corner = new Line(pt1, handle1, true).intersect(new Line(pt2, handle2, true), true);\n return corner && Numerical.isZero(handle1.getLength() / corner.subtract(pt1).getLength() - kappa) && Numerical.isZero(handle2.getLength() / corner.subtract(pt2).getLength() - kappa);\n }\n return false;\n }\n function getDistance(i, j) {\n return segments[i]._point.getDistance(segments[j]._point);\n }\n if (!this.hasHandles() && segments.length === 4 && isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n type = Shape.Rectangle;\n size = new Size(getDistance(0, 3), getDistance(0, 1));\n topCenter = segments[1]._point.add(segments[2]._point).divide(2);\n } else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4) && isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n type = Shape.Rectangle;\n size = new Size(getDistance(1, 6), getDistance(0, 3));\n radius = size.subtract(new Size(getDistance(0, 7), getDistance(1, 2))).divide(2);\n topCenter = segments[3]._point.add(segments[4]._point).divide(2);\n } else if (segments.length === 4 && isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n if (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n type = Shape.Circle;\n radius = getDistance(0, 2) / 2;\n } else {\n type = Shape.Ellipse;\n radius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n }\n topCenter = segments[1]._point;\n }\n if (type) {\n var center = this.getPosition(true), shape = new type({\n center: center,\n size: size,\n radius: radius,\n insert: false\n });\n shape.copyAttributes(this, true);\n shape._matrix.prepend(this._matrix);\n shape.rotate(topCenter.subtract(center).getAngle() + 90);\n if (insert === undefined || insert) shape.insertAbove(this);\n return shape;\n }\n return null;\n },\n toPath: \"#clone\",\n compare: function compare(path) {\n if (!path || path instanceof CompoundPath) return compare.base.call(this, path);\n var curves1 = this.getCurves(), curves2 = path.getCurves(), length1 = curves1.length, length2 = curves2.length;\n if (!length1 || !length2) return length1 == length2;\n var v1 = curves1[0].getValues(), values2 = [], pos1 = 0, pos2, end1 = 0, end2;\n for(var i = 0; i < length2; i++){\n var v2 = curves2[i].getValues();\n values2.push(v2);\n var overlaps = Curve.getOverlaps(v1, v2);\n if (overlaps) {\n pos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n end2 = overlaps[0][1];\n break;\n }\n }\n var abs = Math.abs, epsilon = 1e-8, v2 = values2[pos2], start2;\n while(v1 && v2){\n var overlaps = Curve.getOverlaps(v1, v2);\n if (overlaps) {\n var t1 = overlaps[0][0];\n if (abs(t1 - end1) < epsilon) {\n end1 = overlaps[1][0];\n if (end1 === 1) {\n v1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n end1 = 0;\n }\n var t2 = overlaps[0][1];\n if (abs(t2 - end2) < epsilon) {\n if (!start2) start2 = [\n pos2,\n t2\n ];\n end2 = overlaps[1][1];\n if (end2 === 1) {\n if (++pos2 >= length2) pos2 = 0;\n v2 = values2[pos2] || curves2[pos2].getValues();\n end2 = 0;\n }\n if (!v1) return start2[0] === pos2 && start2[1] === end2;\n continue;\n }\n }\n }\n break;\n }\n return false;\n },\n _hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n var that = this, style = this.getStyle(), segments = this._segments, numSegments = segments.length, closed = this._closed, tolerancePadding = options._tolerancePadding, strokePadding = tolerancePadding, join, cap, miterLimit, area, loc, res, hitStroke = options.stroke && style.hasStroke(), hitFill = options.fill && style.hasFill(), hitCurves = options.curves, strokeRadius = hitStroke ? style.getStrokeWidth() / 2 : hitFill && options.tolerance > 0 || hitCurves ? 0 : null;\n if (strokeRadius !== null) {\n if (strokeRadius > 0) {\n join = style.getStrokeJoin();\n cap = style.getStrokeCap();\n miterLimit = style.getMiterLimit();\n strokePadding = strokePadding.add(Path._getStrokePadding(strokeRadius, strokeMatrix));\n } else join = cap = \"round\";\n }\n function isCloseEnough(pt, padding) {\n return point.subtract(pt).divide(padding).length <= 1;\n }\n function checkSegmentPoint(seg, pt, name) {\n if (!options.selected || pt.isSelected()) {\n var anchor = seg._point;\n if (pt !== anchor) pt = pt.add(anchor);\n if (isCloseEnough(pt, strokePadding)) return new HitResult(name, that, {\n segment: seg,\n point: pt\n });\n }\n }\n function checkSegmentPoints(seg, ends) {\n return (ends || options.segments) && checkSegmentPoint(seg, seg._point, \"segment\") || !ends && options.handles && (checkSegmentPoint(seg, seg._handleIn, \"handle-in\") || checkSegmentPoint(seg, seg._handleOut, \"handle-out\"));\n }\n function addToArea(point) {\n area.add(point);\n }\n function checkSegmentStroke(segment) {\n var isJoin = closed || segment._index > 0 && segment._index < numSegments - 1;\n if ((isJoin ? join : cap) === \"round\") return isCloseEnough(segment._point, strokePadding);\n else {\n area = new Path({\n internal: true,\n closed: true\n });\n if (isJoin) {\n if (!segment.isSmooth()) Path._addBevelJoin(segment, join, strokeRadius, miterLimit, null, strokeMatrix, addToArea, true);\n } else if (cap === \"square\") Path._addSquareCap(segment, cap, strokeRadius, null, strokeMatrix, addToArea, true);\n if (!area.isEmpty()) {\n var loc;\n return area.contains(point) || (loc = area.getNearestLocation(point)) && isCloseEnough(loc.getPoint(), tolerancePadding);\n }\n }\n }\n if (options.ends && !options.segments && !closed) {\n if (res = checkSegmentPoints(segments[0], true) || checkSegmentPoints(segments[numSegments - 1], true)) return res;\n } else if (options.segments || options.handles) {\n for(var i = 0; i < numSegments; i++)if (res = checkSegmentPoints(segments[i])) return res;\n }\n if (strokeRadius !== null) {\n loc = this.getNearestLocation(point);\n if (loc) {\n var time = loc.getTime();\n if (time === 0 || time === 1 && numSegments > 1) {\n if (!checkSegmentStroke(loc.getSegment())) loc = null;\n } else if (!isCloseEnough(loc.getPoint(), strokePadding)) loc = null;\n }\n if (!loc && join === \"miter\" && numSegments > 1) for(var i = 0; i < numSegments; i++){\n var segment = segments[i];\n if (point.getDistance(segment._point) <= miterLimit * strokeRadius && checkSegmentStroke(segment)) {\n loc = segment.getLocation();\n break;\n }\n }\n }\n return !loc && hitFill && this._contains(point) || loc && !hitStroke && !hitCurves ? new HitResult(\"fill\", this) : loc ? new HitResult(hitStroke ? \"stroke\" : \"curve\", this, {\n location: loc,\n point: loc.getPoint()\n }) : null;\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n this[name + \"At\"] = function(offset) {\n var loc = this.getLocationAt(offset);\n return loc && loc[name]();\n };\n }, {\n beans: false,\n getLocationOf: function() {\n var point = Point.read(arguments), curves = this.getCurves();\n for(var i = 0, l = curves.length; i < l; i++){\n var loc = curves[i].getLocationOf(point);\n if (loc) return loc;\n }\n return null;\n },\n getOffsetOf: function() {\n var loc = this.getLocationOf.apply(this, arguments);\n return loc ? loc.getOffset() : null;\n },\n getLocationAt: function(offset) {\n if (typeof offset === \"number\") {\n var curves = this.getCurves(), length = 0;\n for(var i = 0, l = curves.length; i < l; i++){\n var start = length, curve = curves[i];\n length += curve.getLength();\n if (length > offset) return curve.getLocationAt(offset - start);\n }\n if (curves.length > 0 && offset <= this.getLength()) return new CurveLocation(curves[curves.length - 1], 1);\n } else if (offset && offset.getPath && offset.getPath() === this) return offset;\n return null;\n },\n getOffsetsWithTangent: function() {\n var tangent = Point.read(arguments);\n if (tangent.isZero()) return [];\n var offsets = [];\n var curveStart = 0;\n var curves = this.getCurves();\n for(var i = 0, l = curves.length; i < l; i++){\n var curve = curves[i];\n var curveTimes = curve.getTimesWithTangent(tangent);\n for(var j = 0, m = curveTimes.length; j < m; j++){\n var offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n if (offsets.indexOf(offset) < 0) offsets.push(offset);\n }\n curveStart += curve.length;\n }\n return offsets;\n }\n }), new function() {\n function drawHandles(ctx, segments, matrix, size) {\n if (size <= 0) return;\n var half = size / 2, miniSize = size - 2, miniHalf = half - 1, coords = new Array(6), pX, pY;\n function drawHandle(index) {\n var hX = coords[index], hY = coords[index + 1];\n if (pX != hX || pY != hY) {\n ctx.beginPath();\n ctx.moveTo(pX, pY);\n ctx.lineTo(hX, hY);\n ctx.stroke();\n ctx.beginPath();\n ctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n ctx.fill();\n }\n }\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i], selection = segment._selection;\n segment._transformCoordinates(matrix, coords);\n pX = coords[0];\n pY = coords[1];\n if (selection & 2) drawHandle(2);\n if (selection & 4) drawHandle(4);\n ctx.fillRect(pX - half, pY - half, size, size);\n if (miniSize > 0 && !(selection & 1)) {\n var fillStyle = ctx.fillStyle;\n ctx.fillStyle = \"#ffffff\";\n ctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n ctx.fillStyle = fillStyle;\n }\n }\n }\n function drawSegments(ctx, path, matrix) {\n var segments = path._segments, length = segments.length, coords = new Array(6), first = true, curX, curY, prevX, prevY, inX, inY, outX, outY;\n function drawSegment(segment) {\n if (matrix) {\n segment._transformCoordinates(matrix, coords);\n curX = coords[0];\n curY = coords[1];\n } else {\n var point = segment._point;\n curX = point._x;\n curY = point._y;\n }\n if (first) {\n ctx.moveTo(curX, curY);\n first = false;\n } else {\n if (matrix) {\n inX = coords[2];\n inY = coords[3];\n } else {\n var handle = segment._handleIn;\n inX = curX + handle._x;\n inY = curY + handle._y;\n }\n if (inX === curX && inY === curY && outX === prevX && outY === prevY) ctx.lineTo(curX, curY);\n else ctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n }\n prevX = curX;\n prevY = curY;\n if (matrix) {\n outX = coords[4];\n outY = coords[5];\n } else {\n var handle = segment._handleOut;\n outX = prevX + handle._x;\n outY = prevY + handle._y;\n }\n }\n for(var i = 0; i < length; i++)drawSegment(segments[i]);\n if (path._closed && length > 0) drawSegment(segments[0]);\n }\n return {\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var dontStart = param.dontStart, dontPaint = param.dontFinish || param.clip, style = this.getStyle(), hasFill = style.hasFill(), hasStroke = style.hasStroke(), dashArray = style.getDashArray(), dashLength = !paper.support.nativeDash && hasStroke && dashArray && dashArray.length;\n if (!dontStart) ctx.beginPath();\n if (hasFill || hasStroke && !dashLength || dontPaint) {\n drawSegments(ctx, this, strokeMatrix);\n if (this._closed) ctx.closePath();\n }\n function getOffset(i) {\n return dashArray[(i % dashLength + dashLength) % dashLength];\n }\n if (!dontPaint && (hasFill || hasStroke)) {\n this._setStyles(ctx, param, viewMatrix);\n if (hasFill) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) {\n if (dashLength) {\n if (!dontStart) ctx.beginPath();\n var flattener = new PathFlattener(this, 0.25, 32, false, strokeMatrix), length = flattener.length, from = -style.getDashOffset(), to, i = 0;\n while(from > 0)from -= getOffset(i--) + getOffset(i--);\n while(from < length){\n to = from + getOffset(i++);\n if (from > 0 || to > 0) flattener.drawPart(ctx, Math.max(from, 0), Math.max(to, 0));\n from = to + getOffset(i++);\n }\n }\n ctx.stroke();\n }\n }\n },\n _drawSelected: function(ctx, matrix) {\n ctx.beginPath();\n drawSegments(ctx, this, matrix);\n ctx.stroke();\n drawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n }\n };\n }, new function() {\n function getCurrentSegment(that) {\n var segments = that._segments;\n if (!segments.length) throw new Error(\"Use a moveTo() command first\");\n return segments[segments.length - 1];\n }\n return {\n moveTo: function() {\n var segments = this._segments;\n if (segments.length === 1) this.removeSegment(0);\n if (!segments.length) this._add([\n new Segment(Point.read(arguments))\n ]);\n },\n moveBy: function() {\n throw new Error(\"moveBy() is unsupported on Path items.\");\n },\n lineTo: function() {\n this._add([\n new Segment(Point.read(arguments))\n ]);\n },\n cubicCurveTo: function() {\n var args = arguments, handle1 = Point.read(args), handle2 = Point.read(args), to = Point.read(args), current = getCurrentSegment(this);\n current.setHandleOut(handle1.subtract(current._point));\n this._add([\n new Segment(to, handle2.subtract(to))\n ]);\n },\n quadraticCurveTo: function() {\n var args = arguments, handle = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.cubicCurveTo(handle.add(current.subtract(handle).multiply(1 / 3)), handle.add(to.subtract(handle).multiply(1 / 3)), to);\n },\n curveTo: function() {\n var args = arguments, through = Point.read(args), to = Point.read(args), t = Base.pick(Base.read(args), 0.5), t1 = 1 - t, current = getCurrentSegment(this)._point, handle = through.subtract(current.multiply(t1 * t1)).subtract(to.multiply(t * t)).divide(2 * t * t1);\n if (handle.isNaN()) throw new Error(\"Cannot put a curve through points with parameter = \" + t);\n this.quadraticCurveTo(handle, to);\n },\n arcTo: function() {\n var args = arguments, abs = Math.abs, sqrt = Math.sqrt, current = getCurrentSegment(this), from = current._point, to = Point.read(args), through, peek = Base.peek(args), clockwise = Base.pick(peek, true), center, extent, vector, matrix;\n if (typeof clockwise === \"boolean\") var middle = from.add(to).divide(2), through = middle.add(middle.subtract(from).rotate(clockwise ? -90 : 90));\n else if (Base.remain(args) <= 2) {\n through = to;\n to = Point.read(args);\n } else if (!from.equals(to)) {\n var radius = Size.read(args), isZero = Numerical.isZero;\n if (isZero(radius.width) || isZero(radius.height)) return this.lineTo(to);\n var rotation = Base.read(args), clockwise = !!Base.read(args), large = !!Base.read(args), middle = from.add(to).divide(2), pt = from.subtract(middle).rotate(-rotation), x = pt.x, y = pt.y, rx = abs(radius.width), ry = abs(radius.height), rxSq = rx * rx, rySq = ry * ry, xSq = x * x, ySq = y * y;\n var factor = sqrt(xSq / rxSq + ySq / rySq);\n if (factor > 1) {\n rx *= factor;\n ry *= factor;\n rxSq = rx * rx;\n rySq = ry * ry;\n }\n factor = (rxSq * rySq - rxSq * ySq - rySq * xSq) / (rxSq * ySq + rySq * xSq);\n if (abs(factor) < 1e-12) factor = 0;\n if (factor < 0) throw new Error(\"Cannot create an arc with the given arguments\");\n center = new Point(rx * y / ry, -ry * x / rx).multiply((large === clockwise ? -1 : 1) * sqrt(factor)).rotate(rotation).add(middle);\n matrix = new Matrix().translate(center).rotate(rotation).scale(rx, ry);\n vector = matrix._inverseTransform(from);\n extent = vector.getDirectedAngle(matrix._inverseTransform(to));\n if (!clockwise && extent > 0) extent -= 360;\n else if (clockwise && extent < 0) extent += 360;\n }\n if (through) {\n var l1 = new Line(from.add(through).divide(2), through.subtract(from).rotate(90), true), l2 = new Line(through.add(to).divide(2), to.subtract(through).rotate(90), true), line = new Line(from, to), throughSide = line.getSide(through);\n center = l1.intersect(l2, true);\n if (!center) {\n if (!throughSide) return this.lineTo(to);\n throw new Error(\"Cannot create an arc with the given arguments\");\n }\n vector = from.subtract(center);\n extent = vector.getDirectedAngle(to.subtract(center));\n var centerSide = line.getSide(center, true);\n if (centerSide === 0) extent = throughSide * abs(extent);\n else if (throughSide === centerSide) extent += extent < 0 ? 360 : -360;\n }\n if (extent) {\n var epsilon = 1e-5, ext = abs(extent), count = ext >= 360 ? 4 : Math.ceil((ext - epsilon) / 90), inc = extent / count, half = inc * Math.PI / 360, z = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)), segments = [];\n for(var i = 0; i <= count; i++){\n var pt = to, out = null;\n if (i < count) {\n out = vector.rotate(90).multiply(z);\n if (matrix) {\n pt = matrix._transformPoint(vector);\n out = matrix._transformPoint(vector.add(out)).subtract(pt);\n } else pt = center.add(vector);\n }\n if (!i) current.setHandleOut(out);\n else {\n var _in = vector.rotate(-90).multiply(z);\n if (matrix) _in = matrix._transformPoint(vector.add(_in)).subtract(pt);\n segments.push(new Segment(pt, _in, out));\n }\n vector = vector.rotate(inc);\n }\n this._add(segments);\n }\n },\n lineBy: function() {\n var to = Point.read(arguments), current = getCurrentSegment(this)._point;\n this.lineTo(current.add(to));\n },\n curveBy: function() {\n var args = arguments, through = Point.read(args), to = Point.read(args), parameter = Base.read(args), current = getCurrentSegment(this)._point;\n this.curveTo(current.add(through), current.add(to), parameter);\n },\n cubicCurveBy: function() {\n var args = arguments, handle1 = Point.read(args), handle2 = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.cubicCurveTo(current.add(handle1), current.add(handle2), current.add(to));\n },\n quadraticCurveBy: function() {\n var args = arguments, handle = Point.read(args), to = Point.read(args), current = getCurrentSegment(this)._point;\n this.quadraticCurveTo(current.add(handle), current.add(to));\n },\n arcBy: function() {\n var args = arguments, current = getCurrentSegment(this)._point, point = current.add(Point.read(args)), clockwise = Base.pick(Base.peek(args), true);\n if (typeof clockwise === \"boolean\") this.arcTo(point, clockwise);\n else this.arcTo(point, current.add(Point.read(args)));\n },\n closePath: function(tolerance) {\n this.setClosed(true);\n this.join(this, tolerance);\n }\n };\n }, {\n _getBounds: function(matrix, options) {\n var method = options.handle ? \"getHandleBounds\" : options.stroke ? \"getStrokeBounds\" : \"getBounds\";\n return Path[method](this._segments, this._closed, this, matrix, options);\n },\n statics: {\n getBounds: function(segments, closed, path, matrix, options, strokePadding) {\n var first = segments[0];\n if (!first) return new Rectangle();\n var coords = new Array(6), prevCoords = first._transformCoordinates(matrix, new Array(6)), min = prevCoords.slice(0, 2), max = min.slice(), roots = new Array(2);\n function processSegment(segment) {\n segment._transformCoordinates(matrix, coords);\n for(var i = 0; i < 2; i++)Curve._addBounds(prevCoords[i], prevCoords[i + 4], coords[i + 2], coords[i], i, strokePadding ? strokePadding[i] : 0, min, max, roots);\n var tmp = prevCoords;\n prevCoords = coords;\n coords = tmp;\n }\n for(var i = 1, l = segments.length; i < l; i++)processSegment(segments[i]);\n if (closed) processSegment(first);\n return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n },\n getStrokeBounds: function(segments, closed, path, matrix, options) {\n var style = path.getStyle(), stroke = style.hasStroke(), strokeWidth = style.getStrokeWidth(), strokeMatrix = stroke && path._getStrokeMatrix(matrix, options), strokePadding = stroke && Path._getStrokePadding(strokeWidth, strokeMatrix), bounds = Path.getBounds(segments, closed, path, matrix, options, strokePadding);\n if (!stroke) return bounds;\n var strokeRadius = strokeWidth / 2, join = style.getStrokeJoin(), cap = style.getStrokeCap(), miterLimit = style.getMiterLimit(), joinBounds = new Rectangle(new Size(strokePadding));\n function addPoint(point) {\n bounds = bounds.include(point);\n }\n function addRound(segment) {\n bounds = bounds.unite(joinBounds.setCenter(segment._point.transform(matrix)));\n }\n function addJoin(segment, join) {\n if (join === \"round\" || segment.isSmooth()) addRound(segment);\n else Path._addBevelJoin(segment, join, strokeRadius, miterLimit, matrix, strokeMatrix, addPoint);\n }\n function addCap(segment, cap) {\n if (cap === \"round\") addRound(segment);\n else Path._addSquareCap(segment, cap, strokeRadius, matrix, strokeMatrix, addPoint);\n }\n var length = segments.length - (closed ? 0 : 1);\n if (length > 0) {\n for(var i = 1; i < length; i++)addJoin(segments[i], join);\n if (closed) addJoin(segments[0], join);\n else {\n addCap(segments[0], cap);\n addCap(segments[segments.length - 1], cap);\n }\n }\n return bounds;\n },\n _getStrokePadding: function(radius, matrix) {\n if (!matrix) return [\n radius,\n radius\n ];\n var hor = new Point(radius, 0).transform(matrix), ver = new Point(0, radius).transform(matrix), phi = hor.getAngleInRadians(), a = hor.getLength(), b = ver.getLength();\n var sin = Math.sin(phi), cos = Math.cos(phi), tan = Math.tan(phi), tx = Math.atan2(b * tan, a), ty = Math.atan2(b, tan * a);\n return [\n Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n Math.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)\n ];\n },\n _addBevelJoin: function(segment, join, radius, miterLimit, matrix, strokeMatrix, addPoint, isArea) {\n var curve2 = segment.getCurve(), curve1 = curve2.getPrevious(), point = curve2.getPoint1().transform(matrix), normal1 = curve1.getNormalAtTime(1).multiply(radius).transform(strokeMatrix), normal2 = curve2.getNormalAtTime(0).multiply(radius).transform(strokeMatrix), angle = normal1.getDirectedAngle(normal2);\n if (angle < 0 || angle >= 180) {\n normal1 = normal1.negate();\n normal2 = normal2.negate();\n }\n if (isArea) addPoint(point);\n addPoint(point.add(normal1));\n if (join === \"miter\") {\n var corner = new Line(point.add(normal1), new Point(-normal1.y, normal1.x), true).intersect(new Line(point.add(normal2), new Point(-normal2.y, normal2.x), true), true);\n if (corner && point.getDistance(corner) <= miterLimit * radius) addPoint(corner);\n }\n addPoint(point.add(normal2));\n },\n _addSquareCap: function(segment, cap, radius, matrix, strokeMatrix, addPoint, isArea) {\n var point = segment._point.transform(matrix), loc = segment.getLocation(), normal = loc.getNormal().multiply(loc.getTime() === 0 ? radius : -radius).transform(strokeMatrix);\n if (cap === \"square\") {\n if (isArea) {\n addPoint(point.subtract(normal));\n addPoint(point.add(normal));\n }\n point = point.add(normal.rotate(-90));\n }\n addPoint(point.add(normal));\n addPoint(point.subtract(normal));\n },\n getHandleBounds: function(segments, closed, path, matrix, options) {\n var style = path.getStyle(), stroke = options.stroke && style.hasStroke(), strokePadding, joinPadding;\n if (stroke) {\n var strokeMatrix = path._getStrokeMatrix(matrix, options), strokeRadius = style.getStrokeWidth() / 2, joinRadius = strokeRadius;\n if (style.getStrokeJoin() === \"miter\") joinRadius = strokeRadius * style.getMiterLimit();\n if (style.getStrokeCap() === \"square\") joinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n strokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n joinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n }\n var coords = new Array(6), x1 = Infinity, x2 = -x1, y1 = x1, y2 = x2;\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i];\n segment._transformCoordinates(matrix, coords);\n for(var j = 0; j < 6; j += 2){\n var padding = !j ? joinPadding : strokePadding, paddingX = padding ? padding[0] : 0, paddingY = padding ? padding[1] : 0, x = coords[j], y = coords[j + 1], xn = x - paddingX, xx = x + paddingX, yn = y - paddingY, yx = y + paddingY;\n if (xn < x1) x1 = xn;\n if (xx > x2) x2 = xx;\n if (yn < y1) y1 = yn;\n if (yx > y2) y2 = yx;\n }\n }\n return new Rectangle(x1, y1, x2 - x1, y2 - y1);\n }\n }\n });\n Path.inject({\n statics: new function() {\n var kappa = 0.5522847498307936, ellipseSegments = [\n new Segment([\n -1,\n 0\n ], [\n 0,\n kappa\n ], [\n 0,\n -kappa\n ]),\n new Segment([\n 0,\n -1\n ], [\n -kappa,\n 0\n ], [\n kappa,\n 0\n ]),\n new Segment([\n 1,\n 0\n ], [\n 0,\n -kappa\n ], [\n 0,\n kappa\n ]),\n new Segment([\n 0,\n 1\n ], [\n kappa,\n 0\n ], [\n -kappa,\n 0\n ])\n ];\n function createPath(segments, closed, args) {\n var props = Base.getNamed(args), path = new Path(props && (props.insert == true ? Item.INSERT : props.insert == false ? Item.NO_INSERT : null));\n path._add(segments);\n path._closed = closed;\n return path.set(props, Item.INSERT);\n }\n function createEllipse(center, radius, args) {\n var segments = new Array(4);\n for(var i = 0; i < 4; i++){\n var segment = ellipseSegments[i];\n segments[i] = new Segment(segment._point.multiply(radius).add(center), segment._handleIn.multiply(radius), segment._handleOut.multiply(radius));\n }\n return createPath(segments, true, args);\n }\n return {\n Line: function() {\n var args = arguments;\n return createPath([\n new Segment(Point.readNamed(args, \"from\")),\n new Segment(Point.readNamed(args, \"to\"))\n ], false, args);\n },\n Circle: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), radius = Base.readNamed(args, \"radius\");\n return createEllipse(center, new Size(radius), args);\n },\n Rectangle: function() {\n var args = arguments, rect = Rectangle.readNamed(args, \"rectangle\"), radius = Size.readNamed(args, \"radius\", 0, {\n readNull: true\n }), bl = rect.getBottomLeft(true), tl = rect.getTopLeft(true), tr = rect.getTopRight(true), br = rect.getBottomRight(true), segments;\n if (!radius || radius.isZero()) segments = [\n new Segment(bl),\n new Segment(tl),\n new Segment(tr),\n new Segment(br)\n ];\n else {\n radius = Size.min(radius, rect.getSize(true).divide(2));\n var rx = radius.width, ry = radius.height, hx = rx * kappa, hy = ry * kappa;\n segments = [\n new Segment(bl.add(rx, 0), null, [\n -hx,\n 0\n ]),\n new Segment(bl.subtract(0, ry), [\n 0,\n hy\n ]),\n new Segment(tl.add(0, ry), null, [\n 0,\n -hy\n ]),\n new Segment(tl.add(rx, 0), [\n -hx,\n 0\n ], null),\n new Segment(tr.subtract(rx, 0), null, [\n hx,\n 0\n ]),\n new Segment(tr.add(0, ry), [\n 0,\n -hy\n ], null),\n new Segment(br.subtract(0, ry), null, [\n 0,\n hy\n ]),\n new Segment(br.subtract(rx, 0), [\n hx,\n 0\n ])\n ];\n }\n return createPath(segments, true, args);\n },\n RoundRectangle: \"#Rectangle\",\n Ellipse: function() {\n var args = arguments, ellipse = Shape._readEllipse(args);\n return createEllipse(ellipse.center, ellipse.radius, args);\n },\n Oval: \"#Ellipse\",\n Arc: function() {\n var args = arguments, from = Point.readNamed(args, \"from\"), through = Point.readNamed(args, \"through\"), to = Point.readNamed(args, \"to\"), props = Base.getNamed(args), path = new Path(props && props.insert == false && Item.NO_INSERT);\n path.moveTo(from);\n path.arcTo(through, to);\n return path.set(props);\n },\n RegularPolygon: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), sides = Base.readNamed(args, \"sides\"), radius = Base.readNamed(args, \"radius\"), step = 360 / sides, three = sides % 3 === 0, vector = new Point(0, three ? -radius : radius), offset = three ? -1 : 0.5, segments = new Array(sides);\n for(var i = 0; i < sides; i++)segments[i] = new Segment(center.add(vector.rotate((i + offset) * step)));\n return createPath(segments, true, args);\n },\n Star: function() {\n var args = arguments, center = Point.readNamed(args, \"center\"), points = Base.readNamed(args, \"points\") * 2, radius1 = Base.readNamed(args, \"radius1\"), radius2 = Base.readNamed(args, \"radius2\"), step = 360 / points, vector = new Point(0, -1), segments = new Array(points);\n for(var i = 0; i < points; i++)segments[i] = new Segment(center.add(vector.rotate(step * i).multiply(i % 2 ? radius2 : radius1)));\n return createPath(segments, true, args);\n }\n };\n }\n });\n var CompoundPath = PathItem.extend({\n _class: \"CompoundPath\",\n _serializeFields: {\n children: []\n },\n beans: true,\n initialize: function CompoundPath(arg) {\n this._children = [];\n this._namedChildren = {};\n if (!this._initialize(arg)) {\n if (typeof arg === \"string\") this.setPathData(arg);\n else this.addChildren(Array.isArray(arg) ? arg : arguments);\n }\n },\n insertChildren: function insertChildren(index, items) {\n var list = items, first = list[0];\n if (first && typeof first[0] === \"number\") list = [\n list\n ];\n for(var i = items.length - 1; i >= 0; i--){\n var item = list[i];\n if (list === items && !(item instanceof Path)) list = Base.slice(list);\n if (Array.isArray(item)) list[i] = new Path({\n segments: item,\n insert: false\n });\n else if (item instanceof CompoundPath) {\n list.splice.apply(list, [\n i,\n 1\n ].concat(item.removeChildren()));\n item.remove();\n }\n }\n return insertChildren.base.call(this, index, list);\n },\n reduce: function reduce(options) {\n var children = this._children;\n for(var i = children.length - 1; i >= 0; i--){\n var path = children[i].reduce(options);\n if (path.isEmpty()) path.remove();\n }\n if (!children.length) {\n var path = new Path(Item.NO_INSERT);\n path.copyAttributes(this);\n path.insertAbove(this);\n this.remove();\n return path;\n }\n return reduce.base.call(this);\n },\n isClosed: function() {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n if (!children[i]._closed) return false;\n }\n return true;\n },\n setClosed: function(closed) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++)children[i].setClosed(closed);\n },\n getFirstSegment: function() {\n var first = this.getFirstChild();\n return first && first.getFirstSegment();\n },\n getLastSegment: function() {\n var last = this.getLastChild();\n return last && last.getLastSegment();\n },\n getCurves: function() {\n var children = this._children, curves = [];\n for(var i = 0, l = children.length; i < l; i++)Base.push(curves, children[i].getCurves());\n return curves;\n },\n getFirstCurve: function() {\n var first = this.getFirstChild();\n return first && first.getFirstCurve();\n },\n getLastCurve: function() {\n var last = this.getLastChild();\n return last && last.getLastCurve();\n },\n getArea: function() {\n var children = this._children, area = 0;\n for(var i = 0, l = children.length; i < l; i++)area += children[i].getArea();\n return area;\n },\n getLength: function() {\n var children = this._children, length = 0;\n for(var i = 0, l = children.length; i < l; i++)length += children[i].getLength();\n return length;\n },\n getPathData: function(_matrix, _precision) {\n var children = this._children, paths = [];\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i], mx = child._matrix;\n paths.push(child.getPathData(_matrix && !mx.isIdentity() ? _matrix.appended(mx) : _matrix, _precision));\n }\n return paths.join(\"\");\n },\n _hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n return _hitTestChildren.base.call(this, point, options.class === Path || options.type === \"path\" ? options : Base.set({}, options, {\n fill: false\n }), viewMatrix);\n },\n _draw: function(ctx, param, viewMatrix, strokeMatrix) {\n var children = this._children;\n if (!children.length) return;\n param = param.extend({\n dontStart: true,\n dontFinish: true\n });\n ctx.beginPath();\n for(var i = 0, l = children.length; i < l; i++)children[i].draw(ctx, param, strokeMatrix);\n if (!param.clip) {\n this._setStyles(ctx, param, viewMatrix);\n var style = this._style;\n if (style.hasFill()) {\n ctx.fill(style.getFillRule());\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (style.hasStroke()) ctx.stroke();\n }\n },\n _drawSelected: function(ctx, matrix, selectionItems) {\n var children = this._children;\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i], mx = child._matrix;\n if (!selectionItems[child._id]) child._drawSelected(ctx, mx.isIdentity() ? matrix : matrix.appended(mx));\n }\n }\n }, new function() {\n function getCurrentPath(that, check) {\n var children = that._children;\n if (check && !children.length) throw new Error(\"Use a moveTo() command first\");\n return children[children.length - 1];\n }\n return Base.each([\n \"lineTo\",\n \"cubicCurveTo\",\n \"quadraticCurveTo\",\n \"curveTo\",\n \"arcTo\",\n \"lineBy\",\n \"cubicCurveBy\",\n \"quadraticCurveBy\",\n \"curveBy\",\n \"arcBy\"\n ], function(key) {\n this[key] = function() {\n var path = getCurrentPath(this, true);\n path[key].apply(path, arguments);\n };\n }, {\n moveTo: function() {\n var current = getCurrentPath(this), path = current && current.isEmpty() ? current : new Path(Item.NO_INSERT);\n if (path !== current) this.addChild(path);\n path.moveTo.apply(path, arguments);\n },\n moveBy: function() {\n var current = getCurrentPath(this, true), last = current && current.getLastSegment(), point = Point.read(arguments);\n this.moveTo(last ? point.add(last._point) : point);\n },\n closePath: function(tolerance) {\n getCurrentPath(this, true).closePath(tolerance);\n }\n });\n }, Base.each([\n \"reverse\",\n \"flatten\",\n \"simplify\",\n \"smooth\"\n ], function(key) {\n this[key] = function(param) {\n var children = this._children, res;\n for(var i = 0, l = children.length; i < l; i++)res = children[i][key](param) || res;\n return res;\n };\n }, {}));\n PathItem.inject(new function() {\n var min = Math.min, max = Math.max, abs = Math.abs, operators = {\n unite: {\n \"1\": true,\n \"2\": true\n },\n intersect: {\n \"2\": true\n },\n subtract: {\n \"1\": true\n },\n exclude: {\n \"1\": true,\n \"-1\": true\n }\n };\n function getPaths(path) {\n return path._children || [\n path\n ];\n }\n function preparePath(path, resolve) {\n var res = path.clone(false).reduce({\n simplify: true\n }).transform(null, true, true);\n if (resolve) {\n var paths = getPaths(res);\n for(var i = 0, l = paths.length; i < l; i++){\n var path = paths[i];\n if (!path._closed && !path.isEmpty()) {\n path.closePath(1e-12);\n path.getFirstSegment().setHandleIn(0, 0);\n path.getLastSegment().setHandleOut(0, 0);\n }\n }\n res = res.resolveCrossings().reorient(res.getFillRule() === \"nonzero\", true);\n }\n return res;\n }\n function createResult(paths, simplify, path1, path2, options) {\n var result = new CompoundPath(Item.NO_INSERT);\n result.addChildren(paths, true);\n result = result.reduce({\n simplify: simplify\n });\n if (!(options && options.insert == false)) result.insertAbove(path2 && path1.isSibling(path2) && path1.getIndex() < path2.getIndex() ? path2 : path1);\n result.copyAttributes(path1, true);\n return result;\n }\n function filterIntersection(inter) {\n return inter.hasOverlap() || inter.isCrossing();\n }\n function traceBoolean(path1, path2, operation, options) {\n if (options && (options.trace == false || options.stroke) && /^(subtract|intersect)$/.test(operation)) return splitBoolean(path1, path2, operation);\n var _path1 = preparePath(path1, true), _path2 = path2 && path1 !== path2 && preparePath(path2, true), operator = operators[operation];\n operator[operation] = true;\n if (_path2 && (operator.subtract || operator.exclude) ^ (_path2.isClockwise() ^ _path1.isClockwise())) _path2.reverse();\n var crossings = divideLocations(CurveLocation.expand(_path1.getIntersections(_path2, filterIntersection))), paths1 = getPaths(_path1), paths2 = _path2 && getPaths(_path2), segments = [], curves = [], paths;\n function collectPaths(paths) {\n for(var i = 0, l = paths.length; i < l; i++){\n var path = paths[i];\n Base.push(segments, path._segments);\n Base.push(curves, path.getCurves());\n path._overlapsOnly = true;\n }\n }\n function getCurves(indices) {\n var list = [];\n for(var i = 0, l = indices && indices.length; i < l; i++)list.push(curves[indices[i]]);\n return list;\n }\n if (crossings.length) {\n collectPaths(paths1);\n if (paths2) collectPaths(paths2);\n var curvesValues = new Array(curves.length);\n for(var i = 0, l = curves.length; i < l; i++)curvesValues[i] = curves[i].getValues();\n var curveCollisions = CollisionDetection.findCurveBoundsCollisions(curvesValues, curvesValues, 0, true);\n var curveCollisionsMap = {};\n for(var i = 0; i < curves.length; i++){\n var curve = curves[i], id = curve._path._id, map = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n map[curve.getIndex()] = {\n hor: getCurves(curveCollisions[i].hor),\n ver: getCurves(curveCollisions[i].ver)\n };\n }\n for(var i = 0, l = crossings.length; i < l; i++)propagateWinding(crossings[i]._segment, _path1, _path2, curveCollisionsMap, operator);\n for(var i = 0, l = segments.length; i < l; i++){\n var segment = segments[i], inter = segment._intersection;\n if (!segment._winding) propagateWinding(segment, _path1, _path2, curveCollisionsMap, operator);\n if (!(inter && inter._overlap)) segment._path._overlapsOnly = false;\n }\n paths = tracePaths(segments, operator);\n } else paths = reorientPaths(paths2 ? paths1.concat(paths2) : paths1.slice(), function(w) {\n return !!operator[w];\n });\n return createResult(paths, true, path1, path2, options);\n }\n function splitBoolean(path1, path2, operation) {\n var _path1 = preparePath(path1), _path2 = preparePath(path2), crossings = _path1.getIntersections(_path2, filterIntersection), subtract = operation === \"subtract\", divide = operation === \"divide\", added = {}, paths = [];\n function addPath(path) {\n if (!added[path._id] && (divide || _path2.contains(path.getPointAt(path.getLength() / 2)) ^ subtract)) {\n paths.unshift(path);\n return added[path._id] = true;\n }\n }\n for(var i = crossings.length - 1; i >= 0; i--){\n var path = crossings[i].split();\n if (path) {\n if (addPath(path)) path.getFirstSegment().setHandleIn(0, 0);\n _path1.getLastSegment().setHandleOut(0, 0);\n }\n }\n addPath(_path1);\n return createResult(paths, false, path1, path2);\n }\n function linkIntersections(from, to) {\n var prev = from;\n while(prev){\n if (prev === to) return;\n prev = prev._previous;\n }\n while(from._next && from._next !== to)from = from._next;\n if (!from._next) {\n while(to._previous)to = to._previous;\n from._next = to;\n to._previous = from;\n }\n }\n function clearCurveHandles(curves) {\n for(var i = curves.length - 1; i >= 0; i--)curves[i].clearHandles();\n }\n function reorientPaths(paths, isInside, clockwise) {\n var length = paths && paths.length;\n if (length) {\n var lookup = Base.each(paths, function(path, i) {\n this[path._id] = {\n container: null,\n winding: path.isClockwise() ? 1 : -1,\n index: i\n };\n }, {}), sorted = paths.slice().sort(function(a, b) {\n return abs(b.getArea()) - abs(a.getArea());\n }), first = sorted[0];\n var collisions = CollisionDetection.findItemBoundsCollisions(sorted, null, Numerical.GEOMETRIC_EPSILON);\n if (clockwise == null) clockwise = first.isClockwise();\n for(var i = 0; i < length; i++){\n var path1 = sorted[i], entry1 = lookup[path1._id], containerWinding = 0, indices = collisions[i];\n if (indices) {\n var point = null;\n for(var j = indices.length - 1; j >= 0; j--)if (indices[j] < i) {\n point = point || path1.getInteriorPoint();\n var path2 = sorted[indices[j]];\n if (path2.contains(point)) {\n var entry2 = lookup[path2._id];\n containerWinding = entry2.winding;\n entry1.winding += containerWinding;\n entry1.container = entry2.exclude ? entry2.container : path2;\n break;\n }\n }\n }\n if (isInside(entry1.winding) === isInside(containerWinding)) {\n entry1.exclude = true;\n paths[entry1.index] = null;\n } else {\n var container = entry1.container;\n path1.setClockwise(container ? !container.isClockwise() : clockwise);\n }\n }\n }\n return paths;\n }\n function divideLocations(locations, include, clearLater) {\n var results = include && [], tMin = 1e-8, tMax = 1 - tMin, clearHandles = false, clearCurves = clearLater || [], clearLookup = clearLater && {}, renormalizeLocs, prevCurve, prevTime;\n function getId(curve) {\n return curve._path._id + \".\" + curve._segment1._index;\n }\n for(var i = (clearLater && clearLater.length) - 1; i >= 0; i--){\n var curve = clearLater[i];\n if (curve._path) clearLookup[getId(curve)] = true;\n }\n for(var i = locations.length - 1; i >= 0; i--){\n var loc = locations[i], time = loc._time, origTime = time, exclude = include && !include(loc), curve = loc._curve, segment;\n if (curve) {\n if (curve !== prevCurve) {\n clearHandles = !curve.hasHandles() || clearLookup && clearLookup[getId(curve)];\n renormalizeLocs = [];\n prevTime = null;\n prevCurve = curve;\n } else if (prevTime >= tMin) time /= prevTime;\n }\n if (exclude) {\n if (renormalizeLocs) renormalizeLocs.push(loc);\n continue;\n } else if (include) results.unshift(loc);\n prevTime = origTime;\n if (time < tMin) segment = curve._segment1;\n else if (time > tMax) segment = curve._segment2;\n else {\n var newCurve = curve.divideAtTime(time, true);\n if (clearHandles) clearCurves.push(curve, newCurve);\n segment = newCurve._segment1;\n for(var j = renormalizeLocs.length - 1; j >= 0; j--){\n var l = renormalizeLocs[j];\n l._time = (l._time - time) / (1 - time);\n }\n }\n loc._setSegment(segment);\n var inter = segment._intersection, dest = loc._intersection;\n if (inter) {\n linkIntersections(inter, dest);\n var other = inter;\n while(other){\n linkIntersections(other._intersection, inter);\n other = other._next;\n }\n } else segment._intersection = dest;\n }\n if (!clearLater) clearCurveHandles(clearCurves);\n return results || locations;\n }\n function getWinding(point, curves, dir, closed, dontFlip) {\n var curvesList = Array.isArray(curves) ? curves : curves[dir ? \"hor\" : \"ver\"];\n var ia = dir ? 1 : 0, io = ia ^ 1, pv = [\n point.x,\n point.y\n ], pa = pv[ia], po = pv[io], windingEpsilon = 1e-9, qualityEpsilon = 1e-6, paL = pa - windingEpsilon, paR = pa + windingEpsilon, windingL = 0, windingR = 0, pathWindingL = 0, pathWindingR = 0, onPath = false, onAnyPath = false, quality = 1, roots = [], vPrev, vClose;\n function addWinding(v) {\n var o0 = v[io + 0], o3 = v[io + 6];\n if (po < min(o0, o3) || po > max(o0, o3)) return;\n var a0 = v[ia + 0], a1 = v[ia + 2], a2 = v[ia + 4], a3 = v[ia + 6];\n if (o0 === o3) {\n if (a0 < paR && a3 > paL || a3 < paR && a0 > paL) onPath = true;\n return;\n }\n var t = po === o0 ? 0 : po === o3 ? 1 : paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) ? 1 : Curve.solveCubic(v, io, po, roots, 0, 1) > 0 ? roots[0] : 1, a = t === 0 ? a0 : t === 1 ? a3 : Curve.getPoint(v, t)[dir ? \"y\" : \"x\"], winding = o0 > o3 ? 1 : -1, windingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1, a3Prev = vPrev[ia + 6];\n if (po !== o0) {\n if (a < paL) pathWindingL += winding;\n else if (a > paR) pathWindingR += winding;\n else onPath = true;\n if (a > pa - qualityEpsilon && a < pa + qualityEpsilon) quality /= 2;\n } else {\n if (winding !== windingPrev) {\n if (a0 < paL) pathWindingL += winding;\n else if (a0 > paR) pathWindingR += winding;\n } else if (a0 != a3Prev) {\n if (a3Prev < paR && a > paR) {\n pathWindingR += winding;\n onPath = true;\n } else if (a3Prev > paL && a < paL) {\n pathWindingL += winding;\n onPath = true;\n }\n }\n quality /= 4;\n }\n vPrev = v;\n return !dontFlip && a > paL && a < paR && Curve.getTangent(v, t)[dir ? \"x\" : \"y\"] === 0 && getWinding(point, curves, !dir, closed, true);\n }\n function handleCurve(v) {\n var o0 = v[io + 0], o1 = v[io + 2], o2 = v[io + 4], o3 = v[io + 6];\n if (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n var a0 = v[ia + 0], a1 = v[ia + 2], a2 = v[ia + 4], a3 = v[ia + 6], monoCurves = paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3) ? [\n v\n ] : Curve.getMonoCurves(v, dir), res;\n for(var i = 0, l = monoCurves.length; i < l; i++){\n if (res = addWinding(monoCurves[i])) return res;\n }\n }\n }\n for(var i = 0, l = curvesList.length; i < l; i++){\n var curve = curvesList[i], path = curve._path, v = curve.getValues(), res;\n if (!i || curvesList[i - 1]._path !== path) {\n vPrev = null;\n if (!path._closed) {\n vClose = Curve.getValues(path.getLastCurve().getSegment2(), curve.getSegment1(), null, !closed);\n if (vClose[io] !== vClose[io + 6]) vPrev = vClose;\n }\n if (!vPrev) {\n vPrev = v;\n var prev = path.getLastCurve();\n while(prev && prev !== curve){\n var v2 = prev.getValues();\n if (v2[io] !== v2[io + 6]) {\n vPrev = v2;\n break;\n }\n prev = prev.getPrevious();\n }\n }\n }\n if (res = handleCurve(v)) return res;\n if (i + 1 === l || curvesList[i + 1]._path !== path) {\n if (vClose && (res = handleCurve(vClose))) return res;\n if (onPath && !pathWindingL && !pathWindingR) pathWindingL = pathWindingR = path.isClockwise(closed) ^ dir ? 1 : -1;\n windingL += pathWindingL;\n windingR += pathWindingR;\n pathWindingL = pathWindingR = 0;\n if (onPath) {\n onAnyPath = true;\n onPath = false;\n }\n vClose = null;\n }\n }\n windingL = abs(windingL);\n windingR = abs(windingR);\n return {\n winding: max(windingL, windingR),\n windingL: windingL,\n windingR: windingR,\n quality: quality,\n onPath: onAnyPath\n };\n }\n function propagateWinding(segment, path1, path2, curveCollisionsMap, operator) {\n var chain = [], start = segment, totalLength = 0, winding;\n do {\n var curve = segment.getCurve();\n if (curve) {\n var length = curve.getLength();\n chain.push({\n segment: segment,\n curve: curve,\n length: length\n });\n totalLength += length;\n }\n segment = segment.getNext();\n }while (segment && !segment._intersection && segment !== start);\n var offsets = [\n 0.5,\n 0.25,\n 0.75\n ], winding = {\n winding: 0,\n quality: -1\n }, tMin = 1e-3, tMax = 1 - tMin;\n for(var i = 0; i < offsets.length && winding.quality < 0.5; i++){\n var length = totalLength * offsets[i];\n for(var j = 0, l = chain.length; j < l; j++){\n var entry = chain[j], curveLength = entry.length;\n if (length <= curveLength) {\n var curve = entry.curve, path = curve._path, parent = path._parent, operand = parent instanceof CompoundPath ? parent : path, t = Numerical.clamp(curve.getTimeAt(length), tMin, tMax), pt = curve.getPointAtTime(t), dir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n var wind = null;\n if (operator.subtract && path2) {\n var otherPath = operand === path1 ? path2 : path1, pathWinding = otherPath._getWinding(pt, dir, true);\n if (operand === path1 && pathWinding.winding || operand === path2 && !pathWinding.winding) {\n if (pathWinding.quality < 1) continue;\n else wind = {\n winding: 0,\n quality: 1\n };\n }\n }\n wind = wind || getWinding(pt, curveCollisionsMap[path._id][curve.getIndex()], dir, true);\n if (wind.quality > winding.quality) winding = wind;\n break;\n }\n length -= curveLength;\n }\n }\n for(var j = chain.length - 1; j >= 0; j--)chain[j].segment._winding = winding;\n }\n function tracePaths(segments, operator) {\n var paths = [], starts;\n function isValid(seg) {\n var winding;\n return !!(seg && !seg._visited && (!operator || operator[(winding = seg._winding || {}).winding] && !(operator.unite && winding.winding === 2 && winding.windingL && winding.windingR)));\n }\n function isStart(seg) {\n if (seg) for(var i = 0, l = starts.length; i < l; i++){\n if (seg === starts[i]) return true;\n }\n return false;\n }\n function visitPath(path) {\n var segments = path._segments;\n for(var i = 0, l = segments.length; i < l; i++)segments[i]._visited = true;\n }\n function getCrossingSegments(segment, collectStarts) {\n var inter = segment._intersection, start = inter, crossings = [];\n if (collectStarts) starts = [\n segment\n ];\n function collect(inter, end) {\n while(inter && inter !== end){\n var other = inter._segment, path = other && other._path;\n if (path) {\n var next = other.getNext() || path.getFirstSegment(), nextInter = next._intersection;\n if (other !== segment && (isStart(other) || isStart(next) || next && isValid(other) && (isValid(next) || nextInter && isValid(nextInter._segment)))) crossings.push(other);\n if (collectStarts) starts.push(other);\n }\n inter = inter._next;\n }\n }\n if (inter) {\n collect(inter);\n while(inter && inter._previous)inter = inter._previous;\n collect(inter, start);\n }\n return crossings;\n }\n segments.sort(function(seg1, seg2) {\n var inter1 = seg1._intersection, inter2 = seg2._intersection, over1 = !!(inter1 && inter1._overlap), over2 = !!(inter2 && inter2._overlap), path1 = seg1._path, path2 = seg2._path;\n return over1 ^ over2 ? over1 ? 1 : -1 : !inter1 ^ !inter2 ? inter1 ? 1 : -1 : path1 !== path2 ? path1._id - path2._id : seg1._index - seg2._index;\n });\n for(var i = 0, l = segments.length; i < l; i++){\n var seg = segments[i], valid = isValid(seg), path = null, finished = false, closed = true, branches = [], branch, visited, handleIn;\n if (valid && seg._path._overlapsOnly) {\n var path1 = seg._path, path2 = seg._intersection._segment._path;\n if (path1.compare(path2)) {\n if (path1.getArea()) paths.push(path1.clone(false));\n visitPath(path1);\n visitPath(path2);\n valid = false;\n }\n }\n while(valid){\n var first = !path, crossings = getCrossingSegments(seg, first), other = crossings.shift(), finished = !first && (isStart(seg) || isStart(other)), cross = !finished && other;\n if (first) {\n path = new Path(Item.NO_INSERT);\n branch = null;\n }\n if (finished) {\n if (seg.isFirst() || seg.isLast()) closed = seg._path._closed;\n seg._visited = true;\n break;\n }\n if (cross && branch) {\n branches.push(branch);\n branch = null;\n }\n if (!branch) {\n if (cross) crossings.push(seg);\n branch = {\n start: path._segments.length,\n crossings: crossings,\n visited: visited = [],\n handleIn: handleIn\n };\n }\n if (cross) seg = other;\n if (!isValid(seg)) {\n path.removeSegments(branch.start);\n for(var j = 0, k = visited.length; j < k; j++)visited[j]._visited = false;\n visited.length = 0;\n do {\n seg = branch && branch.crossings.shift();\n if (!seg || !seg._path) {\n seg = null;\n branch = branches.pop();\n if (branch) {\n visited = branch.visited;\n handleIn = branch.handleIn;\n }\n }\n }while (branch && !isValid(seg));\n if (!seg) break;\n }\n var next = seg.getNext();\n path.add(new Segment(seg._point, handleIn, next && seg._handleOut));\n seg._visited = true;\n visited.push(seg);\n seg = next || seg._path.getFirstSegment();\n handleIn = next && next._handleIn;\n }\n if (finished) {\n if (closed) {\n path.getFirstSegment().setHandleIn(handleIn);\n path.setClosed(closed);\n }\n if (path.getArea() !== 0) paths.push(path);\n }\n }\n return paths;\n }\n return {\n _getWinding: function(point, dir, closed) {\n return getWinding(point, this.getCurves(), dir, closed);\n },\n unite: function(path, options) {\n return traceBoolean(this, path, \"unite\", options);\n },\n intersect: function(path, options) {\n return traceBoolean(this, path, \"intersect\", options);\n },\n subtract: function(path, options) {\n return traceBoolean(this, path, \"subtract\", options);\n },\n exclude: function(path, options) {\n return traceBoolean(this, path, \"exclude\", options);\n },\n divide: function(path, options) {\n return options && (options.trace == false || options.stroke) ? splitBoolean(this, path, \"divide\") : createResult([\n this.subtract(path, options),\n this.intersect(path, options)\n ], true, this, path, options);\n },\n resolveCrossings: function() {\n var children = this._children, paths = children || [\n this\n ];\n function hasOverlap(seg, path) {\n var inter = seg && seg._intersection;\n return inter && inter._overlap && inter._path === path;\n }\n var hasOverlaps = false, hasCrossings = false, intersections = this.getIntersections(null, function(inter) {\n return inter.hasOverlap() && (hasOverlaps = true) || inter.isCrossing() && (hasCrossings = true);\n }), clearCurves = hasOverlaps && hasCrossings && [];\n intersections = CurveLocation.expand(intersections);\n if (hasOverlaps) {\n var overlaps = divideLocations(intersections, function(inter) {\n return inter.hasOverlap();\n }, clearCurves);\n for(var i = overlaps.length - 1; i >= 0; i--){\n var overlap = overlaps[i], path = overlap._path, seg = overlap._segment, prev = seg.getPrevious(), next = seg.getNext();\n if (hasOverlap(prev, path) && hasOverlap(next, path)) {\n seg.remove();\n prev._handleOut._set(0, 0);\n next._handleIn._set(0, 0);\n if (prev !== seg && !prev.getCurve().hasLength()) {\n next._handleIn.set(prev._handleIn);\n prev.remove();\n }\n }\n }\n }\n if (hasCrossings) {\n divideLocations(intersections, hasOverlaps && function(inter) {\n var curve1 = inter.getCurve(), seg1 = inter.getSegment(), other = inter._intersection, curve2 = other._curve, seg2 = other._segment;\n if (curve1 && curve2 && curve1._path && curve2._path) return true;\n if (seg1) seg1._intersection = null;\n if (seg2) seg2._intersection = null;\n }, clearCurves);\n if (clearCurves) clearCurveHandles(clearCurves);\n paths = tracePaths(Base.each(paths, function(path) {\n Base.push(this, path._segments);\n }, []));\n }\n var length = paths.length, item;\n if (length > 1 && children) {\n if (paths !== children) this.setChildren(paths);\n item = this;\n } else if (length === 1 && !children) {\n if (paths[0] !== this) this.setSegments(paths[0].removeSegments());\n item = this;\n }\n if (!item) {\n item = new CompoundPath(Item.NO_INSERT);\n item.addChildren(paths);\n item = item.reduce();\n item.copyAttributes(this);\n this.replaceWith(item);\n }\n return item;\n },\n reorient: function(nonZero, clockwise) {\n var children = this._children;\n if (children && children.length) this.setChildren(reorientPaths(this.removeChildren(), function(w) {\n return !!(nonZero ? w : w & 1);\n }, clockwise));\n else if (clockwise !== undefined) this.setClockwise(clockwise);\n return this;\n },\n getInteriorPoint: function() {\n var bounds = this.getBounds(), point = bounds.getCenter(true);\n if (!this.contains(point)) {\n var curves = this.getCurves(), y = point.y, intercepts = [], roots = [];\n for(var i = 0, l = curves.length; i < l; i++){\n var v = curves[i].getValues(), o0 = v[1], o1 = v[3], o2 = v[5], o3 = v[7];\n if (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n var monoCurves = Curve.getMonoCurves(v);\n for(var j = 0, m = monoCurves.length; j < m; j++){\n var mv = monoCurves[j], mo0 = mv[1], mo3 = mv[7];\n if (mo0 !== mo3 && (y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)) {\n var x = y === mo0 ? mv[0] : y === mo3 ? mv[6] : Curve.solveCubic(mv, 1, y, roots, 0, 1) === 1 ? Curve.getPoint(mv, roots[0]).x : (mv[0] + mv[6]) / 2;\n intercepts.push(x);\n }\n }\n }\n }\n if (intercepts.length > 1) {\n intercepts.sort(function(a, b) {\n return a - b;\n });\n point.x = (intercepts[0] + intercepts[1]) / 2;\n }\n }\n return point;\n }\n };\n });\n var PathFlattener = Base.extend({\n _class: \"PathFlattener\",\n initialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n var curves = [], parts = [], length = 0, minSpan = 1 / (maxRecursion || 32), segments = path._segments, segment1 = segments[0], segment2;\n function addCurve(segment1, segment2) {\n var curve = Curve.getValues(segment1, segment2, matrix);\n curves.push(curve);\n computeParts(curve, segment1._index, 0, 1);\n }\n function computeParts(curve, index, t1, t2) {\n if (t2 - t1 > minSpan && !(ignoreStraight && Curve.isStraight(curve)) && !Curve.isFlatEnough(curve, flatness || 0.25)) {\n var halves = Curve.subdivide(curve, 0.5), tMid = (t1 + t2) / 2;\n computeParts(halves[0], index, t1, tMid);\n computeParts(halves[1], index, tMid, t2);\n } else {\n var dx = curve[6] - curve[0], dy = curve[7] - curve[1], dist = Math.sqrt(dx * dx + dy * dy);\n if (dist > 0) {\n length += dist;\n parts.push({\n offset: length,\n curve: curve,\n index: index,\n time: t2\n });\n }\n }\n }\n for(var i = 1, l = segments.length; i < l; i++){\n segment2 = segments[i];\n addCurve(segment1, segment2);\n segment1 = segment2;\n }\n if (path._closed) addCurve(segment2 || segment1, segments[0]);\n this.curves = curves;\n this.parts = parts;\n this.length = length;\n this.index = 0;\n },\n _get: function(offset) {\n var parts = this.parts, length = parts.length, start, i, j = this.index;\n for(;;){\n i = j;\n if (!j || parts[--j].offset < offset) break;\n }\n for(; i < length; i++){\n var part = parts[i];\n if (part.offset >= offset) {\n this.index = i;\n var prev = parts[i - 1], prevTime = prev && prev.index === part.index ? prev.time : 0, prevOffset = prev ? prev.offset : 0;\n return {\n index: part.index,\n time: prevTime + (part.time - prevTime) * (offset - prevOffset) / (part.offset - prevOffset)\n };\n }\n }\n return {\n index: parts[length - 1].index,\n time: 1\n };\n },\n drawPart: function(ctx, from, to) {\n var start = this._get(from), end = this._get(to);\n for(var i = start.index, l = end.index; i <= l; i++){\n var curve = Curve.getPart(this.curves[i], i === start.index ? start.time : 0, i === end.index ? end.time : 1);\n if (i === start.index) ctx.moveTo(curve[0], curve[1]);\n ctx.bezierCurveTo.apply(ctx, curve.slice(2));\n }\n }\n }, Base.each(Curve._evaluateMethods, function(name) {\n this[name + \"At\"] = function(offset) {\n var param = this._get(offset);\n return Curve[name](this.curves[param.index], param.time);\n };\n }, {}));\n var PathFitter = Base.extend({\n initialize: function(path) {\n var points = this.points = [], segments = path._segments, closed = path._closed;\n for(var i = 0, prev, l = segments.length; i < l; i++){\n var point = segments[i].point;\n if (!prev || !prev.equals(point)) points.push(prev = point.clone());\n }\n if (closed) {\n points.unshift(points[points.length - 1]);\n points.push(points[1]);\n }\n this.closed = closed;\n },\n fit: function(error) {\n var points = this.points, length = points.length, segments = null;\n if (length > 0) {\n segments = [\n new Segment(points[0])\n ];\n if (length > 1) {\n this.fitCubic(segments, error, 0, length - 1, points[1].subtract(points[0]), points[length - 2].subtract(points[length - 1]));\n if (this.closed) {\n segments.shift();\n segments.pop();\n }\n }\n }\n return segments;\n },\n fitCubic: function(segments, error, first, last, tan1, tan2) {\n var points = this.points;\n if (last - first === 1) {\n var pt1 = points[first], pt2 = points[last], dist = pt1.getDistance(pt2) / 3;\n this.addCurve(segments, [\n pt1,\n pt1.add(tan1.normalize(dist)),\n pt2.add(tan2.normalize(dist)),\n pt2\n ]);\n return;\n }\n var uPrime = this.chordLengthParameterize(first, last), maxError = Math.max(error, error * error), split, parametersInOrder = true;\n for(var i = 0; i <= 4; i++){\n var curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n var max = this.findMaxError(first, last, curve, uPrime);\n if (max.error < error && parametersInOrder) {\n this.addCurve(segments, curve);\n return;\n }\n split = max.index;\n if (max.error >= maxError) break;\n parametersInOrder = this.reparameterize(first, last, uPrime, curve);\n maxError = max.error;\n }\n var tanCenter = points[split - 1].subtract(points[split + 1]);\n this.fitCubic(segments, error, first, split, tan1, tanCenter);\n this.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n },\n addCurve: function(segments, curve) {\n var prev = segments[segments.length - 1];\n prev.setHandleOut(curve[1].subtract(curve[0]));\n segments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n },\n generateBezier: function(first, last, uPrime, tan1, tan2) {\n var epsilon = 1e-12, abs = Math.abs, points = this.points, pt1 = points[first], pt2 = points[last], C = [\n [\n 0,\n 0\n ],\n [\n 0,\n 0\n ]\n ], X = [\n 0,\n 0\n ];\n for(var i = 0, l = last - first + 1; i < l; i++){\n var u = uPrime[i], t = 1 - u, b = 3 * u * t, b0 = t * t * t, b1 = b * t, b2 = b * u, b3 = u * u * u, a1 = tan1.normalize(b1), a2 = tan2.normalize(b2), tmp = points[first + i].subtract(pt1.multiply(b0 + b1)).subtract(pt2.multiply(b2 + b3));\n C[0][0] += a1.dot(a1);\n C[0][1] += a1.dot(a2);\n C[1][0] = C[0][1];\n C[1][1] += a2.dot(a2);\n X[0] += a1.dot(tmp);\n X[1] += a2.dot(tmp);\n }\n var detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1], alpha1, alpha2;\n if (abs(detC0C1) > epsilon) {\n var detC0X = C[0][0] * X[1] - C[1][0] * X[0], detXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n alpha1 = detXC1 / detC0C1;\n alpha2 = detC0X / detC0C1;\n } else {\n var c0 = C[0][0] + C[0][1], c1 = C[1][0] + C[1][1];\n alpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0 : abs(c1) > epsilon ? X[1] / c1 : 0;\n }\n var segLength = pt2.getDistance(pt1), eps = epsilon * segLength, handle1, handle2;\n if (alpha1 < eps || alpha2 < eps) alpha1 = alpha2 = segLength / 3;\n else {\n var line = pt2.subtract(pt1);\n handle1 = tan1.normalize(alpha1);\n handle2 = tan2.normalize(alpha2);\n if (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n alpha1 = alpha2 = segLength / 3;\n handle1 = handle2 = null;\n }\n }\n return [\n pt1,\n pt1.add(handle1 || tan1.normalize(alpha1)),\n pt2.add(handle2 || tan2.normalize(alpha2)),\n pt2\n ];\n },\n reparameterize: function(first, last, u, curve) {\n for(var i = first; i <= last; i++)u[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n for(var i = 1, l = u.length; i < l; i++){\n if (u[i] <= u[i - 1]) return false;\n }\n return true;\n },\n findRoot: function(curve, point, u) {\n var curve1 = [], curve2 = [];\n for(var i = 0; i <= 2; i++)curve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n for(var i = 0; i <= 1; i++)curve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n var pt = this.evaluate(3, curve, u), pt1 = this.evaluate(2, curve1, u), pt2 = this.evaluate(1, curve2, u), diff = pt.subtract(point), df = pt1.dot(pt1) + diff.dot(pt2);\n return Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n },\n evaluate: function(degree, curve, t) {\n var tmp = curve.slice();\n for(var i = 1; i <= degree; i++)for(var j = 0; j <= degree - i; j++)tmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n return tmp[0];\n },\n chordLengthParameterize: function(first, last) {\n var u = [\n 0\n ];\n for(var i = first + 1; i <= last; i++)u[i - first] = u[i - first - 1] + this.points[i].getDistance(this.points[i - 1]);\n for(var i = 1, m = last - first; i <= m; i++)u[i] /= u[m];\n return u;\n },\n findMaxError: function(first, last, curve, u) {\n var index = Math.floor((last - first + 1) / 2), maxDist = 0;\n for(var i = first + 1; i < last; i++){\n var P = this.evaluate(3, curve, u[i - first]);\n var v = P.subtract(this.points[i]);\n var dist = v.x * v.x + v.y * v.y;\n if (dist >= maxDist) {\n maxDist = dist;\n index = i;\n }\n }\n return {\n error: maxDist,\n index: index\n };\n }\n });\n var TextItem = Item.extend({\n _class: \"TextItem\",\n _applyMatrix: false,\n _canApplyMatrix: false,\n _serializeFields: {\n content: null\n },\n _boundsOptions: {\n stroke: false,\n handle: false\n },\n initialize: function TextItem(arg) {\n this._content = \"\";\n this._lines = [];\n var hasProps = arg && Base.isPlainObject(arg) && arg.x === undefined && arg.y === undefined;\n this._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n },\n _equals: function(item) {\n return this._content === item._content;\n },\n copyContent: function(source) {\n this.setContent(source._content);\n },\n getContent: function() {\n return this._content;\n },\n setContent: function(content) {\n this._content = \"\" + content;\n this._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n this._changed(521);\n },\n isEmpty: function() {\n return !this._content;\n },\n getCharacterStyle: \"#getStyle\",\n setCharacterStyle: \"#setStyle\",\n getParagraphStyle: \"#getStyle\",\n setParagraphStyle: \"#setStyle\"\n });\n var PointText = TextItem.extend({\n _class: \"PointText\",\n initialize: function PointText() {\n TextItem.apply(this, arguments);\n },\n getPoint: function() {\n var point = this._matrix.getTranslation();\n return new LinkedPoint(point.x, point.y, this, \"setPoint\");\n },\n setPoint: function() {\n var point = Point.read(arguments);\n this.translate(point.subtract(this._matrix.getTranslation()));\n },\n _draw: function(ctx, param, viewMatrix) {\n if (!this._content) return;\n this._setStyles(ctx, param, viewMatrix);\n var lines = this._lines, style = this._style, hasFill = style.hasFill(), hasStroke = style.hasStroke(), leading = style.getLeading(), shadowColor = ctx.shadowColor;\n ctx.font = style.getFontStyle();\n ctx.textAlign = style.getJustification();\n for(var i = 0, l = lines.length; i < l; i++){\n ctx.shadowColor = shadowColor;\n var line = lines[i];\n if (hasFill) {\n ctx.fillText(line, 0, 0);\n ctx.shadowColor = \"rgba(0,0,0,0)\";\n }\n if (hasStroke) ctx.strokeText(line, 0, 0);\n ctx.translate(0, leading);\n }\n },\n _getBounds: function(matrix, options) {\n var style = this._style, lines = this._lines, numLines = lines.length, justification = style.getJustification(), leading = style.getLeading(), width = this.getView().getTextWidth(style.getFontStyle(), lines), x = 0;\n if (justification !== \"left\") x -= width / (justification === \"center\" ? 2 : 1);\n var rect = new Rectangle(x, numLines ? -0.75 * leading : 0, width, numLines * leading);\n return matrix ? matrix._transformBounds(rect, rect) : rect;\n }\n });\n var Color = Base.extend(new function() {\n var types = {\n gray: [\n \"gray\"\n ],\n rgb: [\n \"red\",\n \"green\",\n \"blue\"\n ],\n hsb: [\n \"hue\",\n \"saturation\",\n \"brightness\"\n ],\n hsl: [\n \"hue\",\n \"saturation\",\n \"lightness\"\n ],\n gradient: [\n \"gradient\",\n \"origin\",\n \"destination\",\n \"highlight\"\n ]\n };\n var componentParsers = {}, namedColors = {\n transparent: [\n 0,\n 0,\n 0,\n 0\n ]\n }, colorCtx;\n function fromCSS(string) {\n var match = string.match(/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i) || string.match(/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i), type = \"rgb\", components;\n if (match) {\n var amount = match[4] ? 4 : 3;\n components = new Array(amount);\n for(var i = 0; i < amount; i++){\n var value = match[i + 1];\n components[i] = parseInt(value.length == 1 ? value + value : value, 16) / 255;\n }\n } else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n type = match[1];\n components = match[2].trim().split(/[,\\s]+/g);\n var isHSL = type === \"hsl\";\n for(var i = 0, l = Math.min(components.length, 4); i < l; i++){\n var component = components[i];\n var value = parseFloat(component);\n if (isHSL) {\n if (i === 0) {\n var unit = component.match(/([a-z]*)$/)[1];\n value *= ({\n turn: 360,\n rad: 180 / Math.PI,\n grad: 0.9\n })[unit] || 1;\n } else if (i < 3) value /= 100;\n } else if (i < 3) value /= /%$/.test(component) ? 100 : 255;\n components[i] = value;\n }\n } else {\n var color = namedColors[string];\n if (!color) {\n if (window) {\n if (!colorCtx) {\n colorCtx = CanvasProvider.getContext(1, 1, {\n willReadFrequently: true\n });\n colorCtx.globalCompositeOperation = \"copy\";\n }\n colorCtx.fillStyle = \"rgba(0,0,0,0)\";\n colorCtx.fillStyle = string;\n colorCtx.fillRect(0, 0, 1, 1);\n var data = colorCtx.getImageData(0, 0, 1, 1).data;\n color = namedColors[string] = [\n data[0] / 255,\n data[1] / 255,\n data[2] / 255\n ];\n } else color = [\n 0,\n 0,\n 0\n ];\n }\n components = color.slice();\n }\n return [\n type,\n components\n ];\n }\n var hsbIndices = [\n [\n 0,\n 3,\n 1\n ],\n [\n 2,\n 0,\n 1\n ],\n [\n 1,\n 0,\n 3\n ],\n [\n 1,\n 2,\n 0\n ],\n [\n 3,\n 1,\n 0\n ],\n [\n 0,\n 1,\n 2\n ]\n ];\n var converters = {\n \"rgb-hsb\": function(r, g, b) {\n var max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min, h = delta === 0 ? 0 : (max == r ? (g - b) / delta + (g < b ? 6 : 0) : max == g ? (b - r) / delta + 2 : (r - g) / delta + 4) * 60;\n return [\n h,\n max === 0 ? 0 : delta / max,\n max\n ];\n },\n \"hsb-rgb\": function(h, s, b) {\n h = (h / 60 % 6 + 6) % 6;\n var i = Math.floor(h), f = h - i, i = hsbIndices[i], v = [\n b,\n b * (1 - s),\n b * (1 - s * f),\n b * (1 - s * (1 - f))\n ];\n return [\n v[i[0]],\n v[i[1]],\n v[i[2]]\n ];\n },\n \"rgb-hsl\": function(r, g, b) {\n var max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min, achromatic = delta === 0, h = achromatic ? 0 : (max == r ? (g - b) / delta + (g < b ? 6 : 0) : max == g ? (b - r) / delta + 2 : (r - g) / delta + 4) * 60, l = (max + min) / 2, s = achromatic ? 0 : l < 0.5 ? delta / (max + min) : delta / (2 - max - min);\n return [\n h,\n s,\n l\n ];\n },\n \"hsl-rgb\": function(h, s, l) {\n h = (h / 360 % 1 + 1) % 1;\n if (s === 0) return [\n l,\n l,\n l\n ];\n var t3s = [\n h + 1 / 3,\n h,\n h - 1 / 3\n ], t2 = l < 0.5 ? l * (1 + s) : l + s - l * s, t1 = 2 * l - t2, c = [];\n for(var i = 0; i < 3; i++){\n var t3 = t3s[i];\n if (t3 < 0) t3 += 1;\n if (t3 > 1) t3 -= 1;\n c[i] = 6 * t3 < 1 ? t1 + (t2 - t1) * 6 * t3 : 2 * t3 < 1 ? t2 : 3 * t3 < 2 ? t1 + (t2 - t1) * (2 / 3 - t3) * 6 : t1;\n }\n return c;\n },\n \"rgb-gray\": function(r, g, b) {\n return [\n r * 0.2989 + g * 0.587 + b * 0.114\n ];\n },\n \"gray-rgb\": function(g) {\n return [\n g,\n g,\n g\n ];\n },\n \"gray-hsb\": function(g) {\n return [\n 0,\n 0,\n g\n ];\n },\n \"gray-hsl\": function(g) {\n return [\n 0,\n 0,\n g\n ];\n },\n \"gradient-rgb\": function() {\n return [];\n },\n \"rgb-gradient\": function() {\n return [];\n }\n };\n return Base.each(types, function(properties, type) {\n componentParsers[type] = [];\n Base.each(properties, function(name, index) {\n var part = Base.capitalize(name), hasOverlap = /^(hue|saturation)$/.test(name), parser = componentParsers[type][index] = type === \"gradient\" ? name === \"gradient\" ? function(value) {\n var current = this._components[0];\n value = Gradient.read(Array.isArray(value) ? value : arguments, 0, {\n readNull: true\n });\n if (current !== value) {\n if (current) current._removeOwner(this);\n if (value) value._addOwner(this);\n }\n return value;\n } : function() {\n return Point.read(arguments, 0, {\n readNull: name === \"highlight\",\n clone: true\n });\n } : function(value) {\n return value == null || isNaN(value) ? 0 : +value;\n };\n this[\"get\" + part] = function() {\n return this._type === type || hasOverlap && /^hs[bl]$/.test(this._type) ? this._components[index] : this._convert(type)[index];\n };\n this[\"set\" + part] = function(value) {\n if (this._type !== type && !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n this._components = this._convert(type);\n this._properties = types[type];\n this._type = type;\n }\n this._components[index] = parser.call(this, value);\n this._changed();\n };\n }, this);\n }, {\n _class: \"Color\",\n _readIndex: true,\n initialize: function Color(arg) {\n var args = arguments, reading = this.__read, read = 0, type, components, alpha, values;\n if (Array.isArray(arg)) {\n args = arg;\n arg = args[0];\n }\n var argType = arg != null && typeof arg;\n if (argType === \"string\" && arg in types) {\n type = arg;\n arg = args[1];\n if (Array.isArray(arg)) {\n components = arg;\n alpha = args[2];\n } else {\n if (reading) read = 1;\n args = Base.slice(args, 1);\n argType = typeof arg;\n }\n }\n if (!components) {\n values = argType === \"number\" ? args : argType === \"object\" && arg.length != null ? arg : null;\n if (values) {\n if (!type) type = values.length >= 3 ? \"rgb\" : \"gray\";\n var length = types[type].length;\n alpha = values[length];\n if (reading) read += values === arguments ? length + (alpha != null ? 1 : 0) : 1;\n if (values.length > length) values = Base.slice(values, 0, length);\n } else if (argType === \"string\") {\n var converted = fromCSS(arg);\n type = converted[0];\n components = converted[1];\n if (components.length === 4) {\n alpha = components[3];\n components.length--;\n }\n } else if (argType === \"object\") {\n if (arg.constructor === Color) {\n type = arg._type;\n components = arg._components.slice();\n alpha = arg._alpha;\n if (type === \"gradient\") for(var i = 1, l = components.length; i < l; i++){\n var point = components[i];\n if (point) components[i] = point.clone();\n }\n } else if (arg.constructor === Gradient) {\n type = \"gradient\";\n values = args;\n } else {\n type = \"hue\" in arg ? \"lightness\" in arg ? \"hsl\" : \"hsb\" : \"gradient\" in arg || \"stops\" in arg || \"radial\" in arg ? \"gradient\" : \"gray\" in arg ? \"gray\" : \"rgb\";\n var properties = types[type], parsers = componentParsers[type];\n this._components = components = [];\n for(var i = 0, l = properties.length; i < l; i++){\n var value = arg[properties[i]];\n if (value == null && !i && type === \"gradient\" && \"stops\" in arg) value = {\n stops: arg.stops,\n radial: arg.radial\n };\n value = parsers[i].call(this, value);\n if (value != null) components[i] = value;\n }\n alpha = arg.alpha;\n }\n }\n if (reading && type) read = 1;\n }\n this._type = type || \"rgb\";\n if (!components) {\n this._components = components = [];\n var parsers = componentParsers[this._type];\n for(var i = 0, l = parsers.length; i < l; i++){\n var value = parsers[i].call(this, values && values[i]);\n if (value != null) components[i] = value;\n }\n }\n this._components = components;\n this._properties = types[this._type];\n this._alpha = alpha;\n if (reading) this.__read = read;\n return this;\n },\n set: \"#initialize\",\n _serialize: function(options, dictionary) {\n var components = this.getComponents();\n return Base.serialize(/^(gray|rgb)$/.test(this._type) ? components : [\n this._type\n ].concat(components), options, true, dictionary);\n },\n _changed: function() {\n this._canvasStyle = null;\n if (this._owner) {\n if (this._setter) this._owner[this._setter](this);\n else this._owner._changed(129);\n }\n },\n _convert: function(type) {\n var converter;\n return this._type === type ? this._components.slice() : (converter = converters[this._type + \"-\" + type]) ? converter.apply(this, this._components) : converters[\"rgb-\" + type].apply(this, converters[this._type + \"-rgb\"].apply(this, this._components));\n },\n convert: function(type) {\n return new Color(type, this._convert(type), this._alpha);\n },\n getType: function() {\n return this._type;\n },\n setType: function(type) {\n this._components = this._convert(type);\n this._properties = types[type];\n this._type = type;\n },\n getComponents: function() {\n var components = this._components.slice();\n if (this._alpha != null) components.push(this._alpha);\n return components;\n },\n getAlpha: function() {\n return this._alpha != null ? this._alpha : 1;\n },\n setAlpha: function(alpha) {\n this._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n this._changed();\n },\n hasAlpha: function() {\n return this._alpha != null;\n },\n equals: function(color) {\n var col = Base.isPlainValue(color, true) ? Color.read(arguments) : color;\n return col === this || col && this._class === col._class && this._type === col._type && this.getAlpha() === col.getAlpha() && Base.equals(this._components, col._components) || false;\n },\n toString: function() {\n var properties = this._properties, parts = [], isGradient = this._type === \"gradient\", f = Formatter.instance;\n for(var i = 0, l = properties.length; i < l; i++){\n var value = this._components[i];\n if (value != null) parts.push(properties[i] + \": \" + (isGradient ? value : f.number(value)));\n }\n if (this._alpha != null) parts.push(\"alpha: \" + f.number(this._alpha));\n return \"{ \" + parts.join(\", \") + \" }\";\n },\n toCSS: function(hex) {\n var components = this._convert(\"rgb\"), alpha = hex || this._alpha == null ? 1 : this._alpha;\n function convert(val) {\n return Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n }\n components = [\n convert(components[0]),\n convert(components[1]),\n convert(components[2])\n ];\n if (alpha < 1) components.push(alpha < 0 ? 0 : alpha);\n return hex ? \"#\" + (16777216 + (components[0] << 16) + (components[1] << 8) + components[2]).toString(16).slice(1) : (components.length == 4 ? \"rgba(\" : \"rgb(\") + components.join(\",\") + \")\";\n },\n toCanvasStyle: function(ctx, matrix) {\n if (this._canvasStyle) return this._canvasStyle;\n if (this._type !== \"gradient\") return this._canvasStyle = this.toCSS();\n var components = this._components, gradient = components[0], stops = gradient._stops, origin = components[1], destination = components[2], highlight = components[3], inverse = matrix && matrix.inverted(), canvasGradient;\n if (inverse) {\n origin = inverse._transformPoint(origin);\n destination = inverse._transformPoint(destination);\n if (highlight) highlight = inverse._transformPoint(highlight);\n }\n if (gradient._radial) {\n var radius = destination.getDistance(origin);\n if (highlight) {\n var vector = highlight.subtract(origin);\n if (vector.getLength() > radius) highlight = origin.add(vector.normalize(radius - 0.1));\n }\n var start = highlight || origin;\n canvasGradient = ctx.createRadialGradient(start.x, start.y, 0, origin.x, origin.y, radius);\n } else canvasGradient = ctx.createLinearGradient(origin.x, origin.y, destination.x, destination.y);\n for(var i = 0, l = stops.length; i < l; i++){\n var stop = stops[i], offset = stop._offset;\n canvasGradient.addColorStop(offset == null ? i / (l - 1) : offset, stop._color.toCanvasStyle());\n }\n return this._canvasStyle = canvasGradient;\n },\n transform: function(matrix) {\n if (this._type === \"gradient\") {\n var components = this._components;\n for(var i = 1, l = components.length; i < l; i++){\n var point = components[i];\n matrix._transformPoint(point, point, true);\n }\n this._changed();\n }\n },\n statics: {\n _types: types,\n random: function() {\n var random = Math.random;\n return new Color(random(), random(), random());\n },\n _setOwner: function(color, owner, setter) {\n if (color) {\n if (color._owner && owner && color._owner !== owner) color = color.clone();\n if (!color._owner ^ !owner) {\n color._owner = owner || null;\n color._setter = setter || null;\n }\n }\n return color;\n }\n }\n });\n }, new function() {\n var operators = {\n add: function(a, b) {\n return a + b;\n },\n subtract: function(a, b) {\n return a - b;\n },\n multiply: function(a, b) {\n return a * b;\n },\n divide: function(a, b) {\n return a / b;\n }\n };\n return Base.each(operators, function(operator, name) {\n this[name] = function(color) {\n color = Color.read(arguments);\n var type = this._type, components1 = this._components, components2 = color._convert(type);\n for(var i = 0, l = components1.length; i < l; i++)components2[i] = operator(components1[i], components2[i]);\n return new Color(type, components2, this._alpha != null ? operator(this._alpha, color.getAlpha()) : null);\n };\n }, {});\n });\n var Gradient = Base.extend({\n _class: \"Gradient\",\n initialize: function Gradient(stops, radial) {\n this._id = UID.get();\n if (stops && Base.isPlainObject(stops)) {\n this.set(stops);\n stops = radial = null;\n }\n if (this._stops == null) this.setStops(stops || [\n \"white\",\n \"black\"\n ]);\n if (this._radial == null) this.setRadial(typeof radial === \"string\" && radial === \"radial\" || radial || false);\n },\n _serialize: function(options, dictionary) {\n return dictionary.add(this, function() {\n return Base.serialize([\n this._stops,\n this._radial\n ], options, true, dictionary);\n });\n },\n _changed: function() {\n for(var i = 0, l = this._owners && this._owners.length; i < l; i++)this._owners[i]._changed();\n },\n _addOwner: function(color) {\n if (!this._owners) this._owners = [];\n this._owners.push(color);\n },\n _removeOwner: function(color) {\n var index = this._owners ? this._owners.indexOf(color) : -1;\n if (index != -1) {\n this._owners.splice(index, 1);\n if (!this._owners.length) this._owners = undefined;\n }\n },\n clone: function() {\n var stops = [];\n for(var i = 0, l = this._stops.length; i < l; i++)stops[i] = this._stops[i].clone();\n return new Gradient(stops, this._radial);\n },\n getStops: function() {\n return this._stops;\n },\n setStops: function(stops) {\n if (stops.length < 2) throw new Error(\"Gradient stop list needs to contain at least two stops.\");\n var _stops = this._stops;\n if (_stops) for(var i = 0, l = _stops.length; i < l; i++)_stops[i]._owner = undefined;\n _stops = this._stops = GradientStop.readList(stops, 0, {\n clone: true\n });\n for(var i = 0, l = _stops.length; i < l; i++)_stops[i]._owner = this;\n this._changed();\n },\n getRadial: function() {\n return this._radial;\n },\n setRadial: function(radial) {\n this._radial = radial;\n this._changed();\n },\n equals: function(gradient) {\n if (gradient === this) return true;\n if (gradient && this._class === gradient._class) {\n var stops1 = this._stops, stops2 = gradient._stops, length = stops1.length;\n if (length === stops2.length) {\n for(var i = 0; i < length; i++){\n if (!stops1[i].equals(stops2[i])) return false;\n }\n return true;\n }\n }\n return false;\n }\n });\n var GradientStop = Base.extend({\n _class: \"GradientStop\",\n initialize: function GradientStop(arg0, arg1) {\n var color = arg0, offset = arg1;\n if (typeof arg0 === \"object\" && arg1 === undefined) {\n if (Array.isArray(arg0) && typeof arg0[0] !== \"number\") {\n color = arg0[0];\n offset = arg0[1];\n } else if (\"color\" in arg0 || \"offset\" in arg0 || \"rampPoint\" in arg0) {\n color = arg0.color;\n offset = arg0.offset || arg0.rampPoint || 0;\n }\n }\n this.setColor(color);\n this.setOffset(offset);\n },\n clone: function() {\n return new GradientStop(this._color.clone(), this._offset);\n },\n _serialize: function(options, dictionary) {\n var color = this._color, offset = this._offset;\n return Base.serialize(offset == null ? [\n color\n ] : [\n color,\n offset\n ], options, true, dictionary);\n },\n _changed: function() {\n if (this._owner) this._owner._changed(129);\n },\n getOffset: function() {\n return this._offset;\n },\n setOffset: function(offset) {\n this._offset = offset;\n this._changed();\n },\n getRampPoint: \"#getOffset\",\n setRampPoint: \"#setOffset\",\n getColor: function() {\n return this._color;\n },\n setColor: function() {\n Color._setOwner(this._color, null);\n this._color = Color._setOwner(Color.read(arguments, 0), this, \"setColor\");\n this._changed();\n },\n equals: function(stop) {\n return stop === this || stop && this._class === stop._class && this._color.equals(stop._color) && this._offset == stop._offset || false;\n }\n });\n var Style = Base.extend(new function() {\n var itemDefaults = {\n fillColor: null,\n fillRule: \"nonzero\",\n strokeColor: null,\n strokeWidth: 1,\n strokeCap: \"butt\",\n strokeJoin: \"miter\",\n strokeScaling: true,\n miterLimit: 10,\n dashOffset: 0,\n dashArray: [],\n shadowColor: null,\n shadowBlur: 0,\n shadowOffset: new Point(),\n selectedColor: null\n }, groupDefaults = Base.set({}, itemDefaults, {\n fontFamily: \"sans-serif\",\n fontWeight: \"normal\",\n fontSize: 12,\n leading: null,\n justification: \"left\"\n }), textDefaults = Base.set({}, groupDefaults, {\n fillColor: new Color()\n }), flags = {\n strokeWidth: 193,\n strokeCap: 193,\n strokeJoin: 193,\n strokeScaling: 201,\n miterLimit: 193,\n fontFamily: 9,\n fontWeight: 9,\n fontSize: 9,\n font: 9,\n leading: 9,\n justification: 9\n }, item = {\n beans: true\n }, fields = {\n _class: \"Style\",\n beans: true,\n initialize: function Style(style, _owner, _project) {\n this._values = {};\n this._owner = _owner;\n this._project = _owner && _owner._project || _project || paper.project;\n this._defaults = !_owner || _owner instanceof Group ? groupDefaults : _owner instanceof TextItem ? textDefaults : itemDefaults;\n if (style) this.set(style);\n }\n };\n Base.each(groupDefaults, function(value, key) {\n var isColor = /Color$/.test(key), isPoint = key === \"shadowOffset\", part = Base.capitalize(key), flag = flags[key], set = \"set\" + part, get = \"get\" + part;\n fields[set] = function(value) {\n var owner = this._owner, children = owner && owner._children, applyToChildren = children && children.length > 0 && !(owner instanceof CompoundPath);\n if (applyToChildren) for(var i = 0, l = children.length; i < l; i++)children[i]._style[set](value);\n if ((key === \"selectedColor\" || !applyToChildren) && key in this._defaults) {\n var old = this._values[key];\n if (old !== value) {\n if (isColor) {\n if (old) {\n Color._setOwner(old, null);\n old._canvasStyle = null;\n }\n if (value && value.constructor === Color) value = Color._setOwner(value, owner, applyToChildren && set);\n }\n this._values[key] = value;\n if (owner) owner._changed(flag || 129);\n }\n }\n };\n fields[get] = function(_dontMerge) {\n var owner = this._owner, children = owner && owner._children, applyToChildren = children && children.length > 0 && !(owner instanceof CompoundPath), value;\n if (applyToChildren && !_dontMerge) for(var i = 0, l = children.length; i < l; i++){\n var childValue = children[i]._style[get]();\n if (!i) value = childValue;\n else if (!Base.equals(value, childValue)) return undefined;\n }\n else if (key in this._defaults) {\n var value = this._values[key];\n if (value === undefined) {\n value = this._defaults[key];\n if (value && value.clone) value = value.clone();\n } else {\n var ctor = isColor ? Color : isPoint ? Point : null;\n if (ctor && !(value && value.constructor === ctor)) this._values[key] = value = ctor.read([\n value\n ], 0, {\n readNull: true,\n clone: true\n });\n }\n }\n if (value && isColor) value = Color._setOwner(value, owner, applyToChildren && set);\n return value;\n };\n item[get] = function(_dontMerge) {\n return this._style[get](_dontMerge);\n };\n item[set] = function(value) {\n this._style[set](value);\n };\n });\n Base.each({\n Font: \"FontFamily\",\n WindingRule: \"FillRule\"\n }, function(value, key) {\n var get = \"get\" + key, set = \"set\" + key;\n fields[get] = item[get] = \"#get\" + value;\n fields[set] = item[set] = \"#set\" + value;\n });\n Item.inject(item);\n return fields;\n }, {\n set: function(style) {\n var isStyle = style instanceof Style, values = isStyle ? style._values : style;\n if (values) {\n for(var key in values)if (key in this._defaults) {\n var value = values[key];\n this[key] = value && isStyle && value.clone ? value.clone() : value;\n }\n }\n },\n equals: function(style) {\n function compare(style1, style2, secondary) {\n var values1 = style1._values, values2 = style2._values, defaults2 = style2._defaults;\n for(var key in values1){\n var value1 = values1[key], value2 = values2[key];\n if (!(secondary && key in values2) && !Base.equals(value1, value2 === undefined ? defaults2[key] : value2)) return false;\n }\n return true;\n }\n return style === this || style && this._class === style._class && compare(this, style) && compare(style, this, true) || false;\n },\n _dispose: function() {\n var color;\n color = this.getFillColor();\n if (color) color._canvasStyle = null;\n color = this.getStrokeColor();\n if (color) color._canvasStyle = null;\n color = this.getShadowColor();\n if (color) color._canvasStyle = null;\n },\n hasFill: function() {\n var color = this.getFillColor();\n return !!color && color.alpha > 0;\n },\n hasStroke: function() {\n var color = this.getStrokeColor();\n return !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n },\n hasShadow: function() {\n var color = this.getShadowColor();\n return !!color && color.alpha > 0 && (this.getShadowBlur() > 0 || !this.getShadowOffset().isZero());\n },\n getView: function() {\n return this._project._view;\n },\n getFontStyle: function() {\n var fontSize = this.getFontSize();\n return this.getFontWeight() + \" \" + fontSize + (/[a-z]/i.test(fontSize + \"\") ? \" \" : \"px \") + this.getFontFamily();\n },\n getFont: \"#getFontFamily\",\n setFont: \"#setFontFamily\",\n getLeading: function getLeading() {\n var leading = getLeading.base.call(this), fontSize = this.getFontSize();\n if (/pt|em|%|px/.test(fontSize)) fontSize = this.getView().getPixelSize(fontSize);\n return leading != null ? leading : fontSize * 1.2;\n }\n });\n var DomElement = new function() {\n function handlePrefix(el, name, set, value) {\n var prefixes = [\n \"\",\n \"webkit\",\n \"moz\",\n \"Moz\",\n \"ms\",\n \"o\"\n ], suffix = name[0].toUpperCase() + name.substring(1);\n for(var i = 0; i < 6; i++){\n var prefix = prefixes[i], key = prefix ? prefix + suffix : name;\n if (key in el) {\n if (set) el[key] = value;\n else return el[key];\n break;\n }\n }\n }\n return {\n getStyles: function(el) {\n var doc = el && el.nodeType !== 9 ? el.ownerDocument : el, view = doc && doc.defaultView;\n return view && view.getComputedStyle(el, \"\");\n },\n getBounds: function(el, viewport) {\n var doc = el.ownerDocument, body = doc.body, html = doc.documentElement, rect;\n try {\n rect = el.getBoundingClientRect();\n } catch (e) {\n rect = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n }\n var x = rect.left - (html.clientLeft || body.clientLeft || 0), y = rect.top - (html.clientTop || body.clientTop || 0);\n if (!viewport) {\n var view = doc.defaultView;\n x += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n y += view.pageYOffset || html.scrollTop || body.scrollTop;\n }\n return new Rectangle(x, y, rect.width, rect.height);\n },\n getViewportBounds: function(el) {\n var doc = el.ownerDocument, view = doc.defaultView, html = doc.documentElement;\n return new Rectangle(0, 0, view.innerWidth || html.clientWidth, view.innerHeight || html.clientHeight);\n },\n getOffset: function(el, viewport) {\n return DomElement.getBounds(el, viewport).getPoint();\n },\n getSize: function(el) {\n return DomElement.getBounds(el, true).getSize();\n },\n isInvisible: function(el) {\n return DomElement.getSize(el).equals(new Size(0, 0));\n },\n isInView: function(el) {\n return !DomElement.isInvisible(el) && DomElement.getViewportBounds(el).intersects(DomElement.getBounds(el, true));\n },\n isInserted: function(el) {\n return document.body.contains(el);\n },\n getPrefixed: function(el, name) {\n return el && handlePrefix(el, name);\n },\n setPrefixed: function(el, name, value) {\n if (typeof name === \"object\") for(var key in name)handlePrefix(el, key, true, name[key]);\n else handlePrefix(el, name, true, value);\n }\n };\n };\n var DomEvent = {\n add: function(el, events) {\n if (el) for(var type in events){\n var func = events[type], parts = type.split(/[\\s,]+/g);\n for(var i = 0, l = parts.length; i < l; i++){\n var name = parts[i];\n var options = el === document && (name === \"touchstart\" || name === \"touchmove\") ? {\n passive: false\n } : false;\n el.addEventListener(name, func, options);\n }\n }\n },\n remove: function(el, events) {\n if (el) for(var type in events){\n var func = events[type], parts = type.split(/[\\s,]+/g);\n for(var i = 0, l = parts.length; i < l; i++)el.removeEventListener(parts[i], func, false);\n }\n },\n getPoint: function(event) {\n var pos = event.targetTouches ? event.targetTouches.length ? event.targetTouches[0] : event.changedTouches[0] : event;\n return new Point(pos.pageX || pos.clientX + document.documentElement.scrollLeft, pos.pageY || pos.clientY + document.documentElement.scrollTop);\n },\n getTarget: function(event) {\n return event.target || event.srcElement;\n },\n getRelatedTarget: function(event) {\n return event.relatedTarget || event.toElement;\n },\n getOffset: function(event, target) {\n return DomEvent.getPoint(event).subtract(DomElement.getOffset(target || DomEvent.getTarget(event)));\n }\n };\n DomEvent.requestAnimationFrame = new function() {\n var nativeRequest = DomElement.getPrefixed(window, \"requestAnimationFrame\"), requested = false, callbacks = [], timer;\n function handleCallbacks() {\n var functions = callbacks;\n callbacks = [];\n for(var i = 0, l = functions.length; i < l; i++)functions[i]();\n requested = nativeRequest && callbacks.length;\n if (requested) nativeRequest(handleCallbacks);\n }\n return function(callback) {\n callbacks.push(callback);\n if (nativeRequest) {\n if (!requested) {\n nativeRequest(handleCallbacks);\n requested = true;\n }\n } else if (!timer) timer = setInterval(handleCallbacks, 1000 / 60);\n };\n };\n var View = Base.extend(Emitter, {\n _class: \"View\",\n initialize: function View(project, element) {\n function getSize(name) {\n return element[name] || parseInt(element.getAttribute(name), 10);\n }\n function getCanvasSize() {\n var size = DomElement.getSize(element);\n return size.isNaN() || size.isZero() ? new Size(getSize(\"width\"), getSize(\"height\")) : size;\n }\n var size;\n if (window && element) {\n this._id = element.getAttribute(\"id\");\n if (this._id == null) element.setAttribute(\"id\", this._id = \"paper-view-\" + View._id++);\n DomEvent.add(element, this._viewEvents);\n var none = \"none\";\n DomElement.setPrefixed(element.style, {\n userDrag: none,\n userSelect: none,\n touchCallout: none,\n contentZooming: none,\n tapHighlightColor: \"rgba(0,0,0,0)\"\n });\n if (PaperScope.hasAttribute(element, \"resize\")) {\n var that = this;\n DomEvent.add(window, this._windowEvents = {\n resize: function() {\n that.setViewSize(getCanvasSize());\n }\n });\n }\n size = getCanvasSize();\n if (PaperScope.hasAttribute(element, \"stats\") && typeof Stats !== \"undefined\") {\n this._stats = new Stats();\n var stats = this._stats.domElement, style = stats.style, offset = DomElement.getOffset(element);\n style.position = \"absolute\";\n style.left = offset.x + \"px\";\n style.top = offset.y + \"px\";\n document.body.appendChild(stats);\n }\n } else {\n size = new Size(element);\n element = null;\n }\n this._project = project;\n this._scope = project._scope;\n this._element = element;\n if (!this._pixelRatio) this._pixelRatio = window && window.devicePixelRatio || 1;\n this._setElementSize(size.width, size.height);\n this._viewSize = size;\n View._views.push(this);\n View._viewsById[this._id] = this;\n (this._matrix = new Matrix())._owner = this;\n if (!View._focused) View._focused = this;\n this._frameItems = {};\n this._frameItemCount = 0;\n this._itemEvents = {\n native: {},\n virtual: {}\n };\n this._autoUpdate = !paper.agent.node;\n this._needsUpdate = false;\n },\n remove: function() {\n if (!this._project) return false;\n if (View._focused === this) View._focused = null;\n View._views.splice(View._views.indexOf(this), 1);\n delete View._viewsById[this._id];\n var project = this._project;\n if (project._view === this) project._view = null;\n DomEvent.remove(this._element, this._viewEvents);\n DomEvent.remove(window, this._windowEvents);\n this._element = this._project = null;\n this.off(\"frame\");\n this._animate = false;\n this._frameItems = {};\n return true;\n },\n _events: Base.each(Item._itemHandlers.concat([\n \"onResize\",\n \"onKeyDown\",\n \"onKeyUp\"\n ]), function(name) {\n this[name] = {};\n }, {\n onFrame: {\n install: function() {\n this.play();\n },\n uninstall: function() {\n this.pause();\n }\n }\n }),\n _animate: false,\n _time: 0,\n _count: 0,\n getAutoUpdate: function() {\n return this._autoUpdate;\n },\n setAutoUpdate: function(autoUpdate) {\n this._autoUpdate = autoUpdate;\n if (autoUpdate) this.requestUpdate();\n },\n update: function() {},\n draw: function() {\n this.update();\n },\n requestUpdate: function() {\n if (!this._requested) {\n var that = this;\n DomEvent.requestAnimationFrame(function() {\n that._requested = false;\n if (that._animate) {\n that.requestUpdate();\n var element = that._element;\n if ((!DomElement.getPrefixed(document, \"hidden\") || PaperScope.getAttribute(element, \"keepalive\") === \"true\") && DomElement.isInView(element)) that._handleFrame();\n }\n if (that._autoUpdate) that.update();\n });\n this._requested = true;\n }\n },\n play: function() {\n this._animate = true;\n this.requestUpdate();\n },\n pause: function() {\n this._animate = false;\n },\n _handleFrame: function() {\n paper = this._scope;\n var now = Date.now() / 1000, delta = this._last ? now - this._last : 0;\n this._last = now;\n this.emit(\"frame\", new Base({\n delta: delta,\n time: this._time += delta,\n count: this._count++\n }));\n if (this._stats) this._stats.update();\n },\n _animateItem: function(item, animate) {\n var items = this._frameItems;\n if (animate) {\n items[item._id] = {\n item: item,\n time: 0,\n count: 0\n };\n if (++this._frameItemCount === 1) this.on(\"frame\", this._handleFrameItems);\n } else {\n delete items[item._id];\n if (--this._frameItemCount === 0) this.off(\"frame\", this._handleFrameItems);\n }\n },\n _handleFrameItems: function(event) {\n for(var i in this._frameItems){\n var entry = this._frameItems[i];\n entry.item.emit(\"frame\", new Base(event, {\n time: entry.time += event.delta,\n count: entry.count++\n }));\n }\n },\n _changed: function() {\n this._project._changed(4097);\n this._bounds = this._decomposed = undefined;\n },\n getElement: function() {\n return this._element;\n },\n getPixelRatio: function() {\n return this._pixelRatio;\n },\n getResolution: function() {\n return this._pixelRatio * 72;\n },\n getViewSize: function() {\n var size = this._viewSize;\n return new LinkedSize(size.width, size.height, this, \"setViewSize\");\n },\n setViewSize: function() {\n var size = Size.read(arguments), delta = size.subtract(this._viewSize);\n if (delta.isZero()) return;\n this._setElementSize(size.width, size.height);\n this._viewSize.set(size);\n this._changed();\n this.emit(\"resize\", {\n size: size,\n delta: delta\n });\n if (this._autoUpdate) this.update();\n },\n _setElementSize: function(width, height) {\n var element = this._element;\n if (element) {\n if (element.width !== width) element.width = width;\n if (element.height !== height) element.height = height;\n }\n },\n getBounds: function() {\n if (!this._bounds) this._bounds = this._matrix.inverted()._transformBounds(new Rectangle(new Point(), this._viewSize));\n return this._bounds;\n },\n getSize: function() {\n return this.getBounds().getSize();\n },\n isVisible: function() {\n return DomElement.isInView(this._element);\n },\n isInserted: function() {\n return DomElement.isInserted(this._element);\n },\n getPixelSize: function(size) {\n var element = this._element, pixels;\n if (element) {\n var parent = element.parentNode, temp = document.createElement(\"div\");\n temp.style.fontSize = size;\n parent.appendChild(temp);\n pixels = parseFloat(DomElement.getStyles(temp).fontSize);\n parent.removeChild(temp);\n } else pixels = parseFloat(pixels);\n return pixels;\n },\n getTextWidth: function(font, lines) {\n return 0;\n }\n }, Base.each([\n \"rotate\",\n \"scale\",\n \"shear\",\n \"skew\"\n ], function(key) {\n var rotate = key === \"rotate\";\n this[key] = function() {\n var args = arguments, value = (rotate ? Base : Point).read(args), center = Point.read(args, 0, {\n readNull: true\n });\n return this.transform(new Matrix()[key](value, center || this.getCenter(true)));\n };\n }, {\n _decompose: function() {\n return this._decomposed || (this._decomposed = this._matrix.decompose());\n },\n translate: function() {\n var mx = new Matrix();\n return this.transform(mx.translate.apply(mx, arguments));\n },\n getCenter: function() {\n return this.getBounds().getCenter();\n },\n setCenter: function() {\n var center = Point.read(arguments);\n this.translate(this.getCenter().subtract(center));\n },\n getZoom: function() {\n var scaling = this._decompose().scaling;\n return (scaling.x + scaling.y) / 2;\n },\n setZoom: function(zoom) {\n this.transform(new Matrix().scale(zoom / this.getZoom(), this.getCenter()));\n },\n getRotation: function() {\n return this._decompose().rotation;\n },\n setRotation: function(rotation) {\n var current = this.getRotation();\n if (current != null && rotation != null) this.rotate(rotation - current);\n },\n getScaling: function() {\n var scaling = this._decompose().scaling;\n return new LinkedPoint(scaling.x, scaling.y, this, \"setScaling\");\n },\n setScaling: function() {\n var current = this.getScaling(), scaling = Point.read(arguments, 0, {\n clone: true,\n readNull: true\n });\n if (current && scaling) this.scale(scaling.x / current.x, scaling.y / current.y);\n },\n getMatrix: function() {\n return this._matrix;\n },\n setMatrix: function() {\n var matrix = this._matrix;\n matrix.set.apply(matrix, arguments);\n },\n transform: function(matrix) {\n this._matrix.append(matrix);\n },\n scrollBy: function() {\n this.translate(Point.read(arguments).negate());\n }\n }), {\n projectToView: function() {\n return this._matrix._transformPoint(Point.read(arguments));\n },\n viewToProject: function() {\n return this._matrix._inverseTransform(Point.read(arguments));\n },\n getEventPoint: function(event) {\n return this.viewToProject(DomEvent.getOffset(event, this._element));\n }\n }, {\n statics: {\n _views: [],\n _viewsById: {},\n _id: 0,\n create: function(project, element) {\n if (document && typeof element === \"string\") element = document.getElementById(element);\n var ctor = window ? CanvasView : View;\n return new ctor(project, element);\n }\n }\n }, new function() {\n if (!window) return;\n var prevFocus, tempFocus, dragging = false, mouseDown = false;\n function getView(event) {\n var target = DomEvent.getTarget(event);\n return target.getAttribute && View._viewsById[target.getAttribute(\"id\")];\n }\n function updateFocus() {\n var view = View._focused;\n if (!view || !view.isVisible()) {\n for(var i = 0, l = View._views.length; i < l; i++)if ((view = View._views[i]).isVisible()) {\n View._focused = tempFocus = view;\n break;\n }\n }\n }\n function handleMouseMove(view, event, point) {\n view._handleMouseEvent(\"mousemove\", event, point);\n }\n var navigator = window.navigator, mousedown, mousemove, mouseup;\n if (navigator.pointerEnabled || navigator.msPointerEnabled) {\n mousedown = \"pointerdown MSPointerDown\";\n mousemove = \"pointermove MSPointerMove\";\n mouseup = \"pointerup pointercancel MSPointerUp MSPointerCancel\";\n } else {\n mousedown = \"touchstart\";\n mousemove = \"touchmove\";\n mouseup = \"touchend touchcancel\";\n if (!(\"ontouchstart\" in window && navigator.userAgent.match(/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n mousedown += \" mousedown\";\n mousemove += \" mousemove\";\n mouseup += \" mouseup\";\n }\n }\n var viewEvents = {}, docEvents = {\n mouseout: function(event) {\n var view = View._focused, target = DomEvent.getRelatedTarget(event);\n if (view && (!target || target.nodeName === \"HTML\")) {\n var offset = DomEvent.getOffset(event, view._element), x = offset.x, abs = Math.abs, ax = abs(x), max = 33554432, diff = ax - max;\n offset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n handleMouseMove(view, event, view.viewToProject(offset));\n }\n },\n scroll: updateFocus\n };\n viewEvents[mousedown] = function(event) {\n var view = View._focused = getView(event);\n if (!dragging) {\n dragging = true;\n view._handleMouseEvent(\"mousedown\", event);\n }\n };\n docEvents[mousemove] = function(event) {\n var view = View._focused;\n if (!mouseDown) {\n var target = getView(event);\n if (target) {\n if (view !== target) {\n if (view) handleMouseMove(view, event);\n if (!prevFocus) prevFocus = view;\n view = View._focused = tempFocus = target;\n }\n } else if (tempFocus && tempFocus === view) {\n if (prevFocus && !prevFocus.isInserted()) prevFocus = null;\n view = View._focused = prevFocus;\n prevFocus = null;\n updateFocus();\n }\n }\n if (view) handleMouseMove(view, event);\n };\n docEvents[mousedown] = function() {\n mouseDown = true;\n };\n docEvents[mouseup] = function(event) {\n var view = View._focused;\n if (view && dragging) view._handleMouseEvent(\"mouseup\", event);\n mouseDown = dragging = false;\n };\n DomEvent.add(document, docEvents);\n DomEvent.add(window, {\n load: updateFocus\n });\n var called = false, prevented = false, fallbacks = {\n doubleclick: \"click\",\n mousedrag: \"mousemove\"\n }, wasInView = false, overView, downPoint, lastPoint, downItem, overItem, dragItem, clickItem, clickTime, dblClick;\n function emitMouseEvent(obj, target, type, event, point, prevPoint, stopItem) {\n var stopped = false, mouseEvent;\n function emit(obj, type) {\n if (obj.responds(type)) {\n if (!mouseEvent) mouseEvent = new MouseEvent(type, event, point, target || obj, prevPoint ? point.subtract(prevPoint) : null);\n if (obj.emit(type, mouseEvent)) {\n called = true;\n if (mouseEvent.prevented) prevented = true;\n if (mouseEvent.stopped) return stopped = true;\n }\n } else {\n var fallback = fallbacks[type];\n if (fallback) return emit(obj, fallback);\n }\n }\n while(obj && obj !== stopItem){\n if (emit(obj, type)) break;\n obj = obj._parent;\n }\n return stopped;\n }\n function emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n view._project.removeOn(type);\n prevented = called = false;\n return dragItem && emitMouseEvent(dragItem, null, type, event, point, prevPoint) || hitItem && hitItem !== dragItem && !hitItem.isDescendant(dragItem) && emitMouseEvent(hitItem, null, type === \"mousedrag\" ? \"mousemove\" : type, event, point, prevPoint, dragItem) || emitMouseEvent(view, dragItem || hitItem || view, type, event, point, prevPoint);\n }\n var itemEventsMap = {\n mousedown: {\n mousedown: 1,\n mousedrag: 1,\n click: 1,\n doubleclick: 1\n },\n mouseup: {\n mouseup: 1,\n mousedrag: 1,\n click: 1,\n doubleclick: 1\n },\n mousemove: {\n mousedrag: 1,\n mousemove: 1,\n mouseenter: 1,\n mouseleave: 1\n }\n };\n return {\n _viewEvents: viewEvents,\n _handleMouseEvent: function(type, event, point) {\n var itemEvents = this._itemEvents, hitItems = itemEvents.native[type], nativeMove = type === \"mousemove\", tool = this._scope.tool, view = this;\n function responds(type) {\n return itemEvents.virtual[type] || view.responds(type) || tool && tool.responds(type);\n }\n if (nativeMove && dragging && responds(\"mousedrag\")) type = \"mousedrag\";\n if (!point) point = this.getEventPoint(event);\n var inView = this.getBounds().contains(point), hit = hitItems && inView && view._project.hitTest(point, {\n tolerance: 0,\n fill: true,\n stroke: true\n }), hitItem = hit && hit.item || null, handle = false, mouse = {};\n mouse[type.substr(5)] = true;\n if (hitItems && hitItem !== overItem) {\n if (overItem) emitMouseEvent(overItem, null, \"mouseleave\", event, point);\n if (hitItem) emitMouseEvent(hitItem, null, \"mouseenter\", event, point);\n overItem = hitItem;\n }\n if (wasInView ^ inView) {\n emitMouseEvent(this, null, inView ? \"mouseenter\" : \"mouseleave\", event, point);\n overView = inView ? this : null;\n handle = true;\n }\n if ((inView || mouse.drag) && !point.equals(lastPoint)) {\n emitMouseEvents(this, hitItem, nativeMove ? type : \"mousemove\", event, point, lastPoint);\n handle = true;\n }\n wasInView = inView;\n if (mouse.down && inView || mouse.up && downPoint) {\n emitMouseEvents(this, hitItem, type, event, point, downPoint);\n if (mouse.down) {\n dblClick = hitItem === clickItem && Date.now() - clickTime < 300;\n downItem = clickItem = hitItem;\n if (!prevented && hitItem) {\n var item = hitItem;\n while(item && !item.responds(\"mousedrag\"))item = item._parent;\n if (item) dragItem = hitItem;\n }\n downPoint = point;\n } else if (mouse.up) {\n if (!prevented && hitItem === downItem) {\n clickTime = Date.now();\n emitMouseEvents(this, hitItem, dblClick ? \"doubleclick\" : \"click\", event, point, downPoint);\n dblClick = false;\n }\n downItem = dragItem = null;\n }\n wasInView = false;\n handle = true;\n }\n lastPoint = point;\n if (handle && tool) called = tool._handleMouseEvent(type, event, point, mouse) || called;\n if (event.cancelable !== false && (called && !mouse.move || mouse.down && responds(\"mouseup\"))) event.preventDefault();\n },\n _handleKeyEvent: function(type, event, key, character) {\n var scope = this._scope, tool = scope.tool, keyEvent;\n function emit(obj) {\n if (obj.responds(type)) {\n paper = scope;\n obj.emit(type, keyEvent = keyEvent || new KeyEvent(type, event, key, character));\n }\n }\n if (this.isVisible()) {\n emit(this);\n if (tool && tool.responds(type)) emit(tool);\n }\n },\n _countItemEvent: function(type, sign) {\n var itemEvents = this._itemEvents, native = itemEvents.native, virtual = itemEvents.virtual;\n for(var key in itemEventsMap)native[key] = (native[key] || 0) + (itemEventsMap[key][type] || 0) * sign;\n virtual[type] = (virtual[type] || 0) + sign;\n },\n statics: {\n updateFocus: updateFocus,\n _resetState: function() {\n dragging = mouseDown = called = wasInView = false;\n prevFocus = tempFocus = overView = downPoint = lastPoint = downItem = overItem = dragItem = clickItem = clickTime = dblClick = null;\n }\n }\n };\n });\n var CanvasView = View.extend({\n _class: \"CanvasView\",\n initialize: function CanvasView(project, canvas) {\n if (!(canvas instanceof window.HTMLCanvasElement)) {\n var size = Size.read(arguments, 1);\n if (size.isZero()) throw new Error(\"Cannot create CanvasView with the provided argument: \" + Base.slice(arguments, 1));\n canvas = CanvasProvider.getCanvas(size);\n }\n var ctx = this._context = canvas.getContext(\"2d\");\n ctx.save();\n this._pixelRatio = 1;\n if (!/^off|false$/.test(PaperScope.getAttribute(canvas, \"hidpi\"))) {\n var deviceRatio = window.devicePixelRatio || 1, backingStoreRatio = DomElement.getPrefixed(ctx, \"backingStorePixelRatio\") || 1;\n this._pixelRatio = deviceRatio / backingStoreRatio;\n }\n View.call(this, project, canvas);\n this._needsUpdate = true;\n },\n remove: function remove() {\n this._context.restore();\n return remove.base.call(this);\n },\n _setElementSize: function _setElementSize(width, height) {\n var pixelRatio = this._pixelRatio;\n _setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n if (pixelRatio !== 1) {\n var element = this._element, ctx = this._context;\n if (!PaperScope.hasAttribute(element, \"resize\")) {\n var style = element.style;\n style.width = width + \"px\";\n style.height = height + \"px\";\n }\n ctx.restore();\n ctx.save();\n ctx.scale(pixelRatio, pixelRatio);\n }\n },\n getContext: function() {\n return this._context;\n },\n getPixelSize: function getPixelSize(size) {\n var agent = paper.agent, pixels;\n if (agent && agent.firefox) pixels = getPixelSize.base.call(this, size);\n else {\n var ctx = this._context, prevFont = ctx.font;\n ctx.font = size + \" serif\";\n pixels = parseFloat(ctx.font);\n ctx.font = prevFont;\n }\n return pixels;\n },\n getTextWidth: function(font, lines) {\n var ctx = this._context, prevFont = ctx.font, width = 0;\n ctx.font = font;\n for(var i = 0, l = lines.length; i < l; i++)width = Math.max(width, ctx.measureText(lines[i]).width);\n ctx.font = prevFont;\n return width;\n },\n update: function() {\n if (!this._needsUpdate) return false;\n var project = this._project, ctx = this._context, size = this._viewSize;\n ctx.clearRect(0, 0, size.width + 1, size.height + 1);\n if (project) project.draw(ctx, this._matrix, this._pixelRatio);\n this._needsUpdate = false;\n return true;\n }\n });\n var Event = Base.extend({\n _class: \"Event\",\n initialize: function Event(event) {\n this.event = event;\n this.type = event && event.type;\n },\n prevented: false,\n stopped: false,\n preventDefault: function() {\n this.prevented = true;\n this.event.preventDefault();\n },\n stopPropagation: function() {\n this.stopped = true;\n this.event.stopPropagation();\n },\n stop: function() {\n this.stopPropagation();\n this.preventDefault();\n },\n getTimeStamp: function() {\n return this.event.timeStamp;\n },\n getModifiers: function() {\n return Key.modifiers;\n }\n });\n var KeyEvent = Event.extend({\n _class: \"KeyEvent\",\n initialize: function KeyEvent(type, event, key, character) {\n this.type = type;\n this.event = event;\n this.key = key;\n this.character = character;\n },\n toString: function() {\n return \"{ type: '\" + this.type + \"', key: '\" + this.key + \"', character: '\" + this.character + \"', modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var Key = new function() {\n var keyLookup = {\n \"\t\": \"tab\",\n \" \": \"space\",\n \"\\b\": \"backspace\",\n \"\\x7f\": \"delete\",\n \"Spacebar\": \"space\",\n \"Del\": \"delete\",\n \"Win\": \"meta\",\n \"Esc\": \"escape\"\n }, charLookup = {\n \"tab\": \"\t\",\n \"space\": \" \",\n \"enter\": \"\\r\"\n }, keyMap = {}, charMap = {}, metaFixMap, downKey, modifiers = new Base({\n shift: false,\n control: false,\n alt: false,\n meta: false,\n capsLock: false,\n space: false\n }).inject({\n option: {\n get: function() {\n return this.alt;\n }\n },\n command: {\n get: function() {\n var agent = paper && paper.agent;\n return agent && agent.mac ? this.meta : this.control;\n }\n }\n });\n function getKey(event) {\n var key = event.key || event.keyIdentifier;\n key = /^U\\+/.test(key) ? String.fromCharCode(parseInt(key.substr(2), 16)) : /^Arrow[A-Z]/.test(key) ? key.substr(5) : key === \"Unidentified\" || key === undefined ? String.fromCharCode(event.keyCode) : key;\n return keyLookup[key] || (key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n }\n function handleKey(down, key, character, event) {\n var type = down ? \"keydown\" : \"keyup\", view = View._focused, name;\n keyMap[key] = down;\n if (down) charMap[key] = character;\n else delete charMap[key];\n if (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n modifiers[name] = down;\n var agent = paper && paper.agent;\n if (name === \"meta\" && agent && agent.mac) {\n if (down) metaFixMap = {};\n else {\n for(var k in metaFixMap)if (k in charMap) handleKey(false, k, metaFixMap[k], event);\n metaFixMap = null;\n }\n }\n } else if (down && metaFixMap) metaFixMap[key] = character;\n if (view) view._handleKeyEvent(down ? \"keydown\" : \"keyup\", event, key, character);\n }\n DomEvent.add(document, {\n keydown: function(event) {\n var key = getKey(event), agent = paper && paper.agent;\n if (key.length > 1 || agent && agent.chrome && (event.altKey || agent.mac && event.metaKey || !agent.mac && event.ctrlKey)) handleKey(true, key, charLookup[key] || (key.length > 1 ? \"\" : key), event);\n else downKey = key;\n },\n keypress: function(event) {\n if (downKey) {\n var key = getKey(event), code = event.charCode, character = code >= 32 ? String.fromCharCode(code) : key.length > 1 ? \"\" : key;\n if (key !== downKey) key = character.toLowerCase();\n handleKey(true, key, character, event);\n downKey = null;\n }\n },\n keyup: function(event) {\n var key = getKey(event);\n if (key in charMap) handleKey(false, key, charMap[key], event);\n }\n });\n DomEvent.add(window, {\n blur: function(event) {\n for(var key in charMap)handleKey(false, key, charMap[key], event);\n }\n });\n return {\n modifiers: modifiers,\n isDown: function(key) {\n return !!keyMap[key];\n }\n };\n };\n var MouseEvent = Event.extend({\n _class: \"MouseEvent\",\n initialize: function MouseEvent(type, event, point, target, delta) {\n this.type = type;\n this.event = event;\n this.point = point;\n this.target = target;\n this.delta = delta;\n },\n toString: function() {\n return \"{ type: '\" + this.type + \"', point: \" + this.point + \", target: \" + this.target + (this.delta ? \", delta: \" + this.delta : \"\") + \", modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var ToolEvent = Event.extend({\n _class: \"ToolEvent\",\n _item: null,\n initialize: function ToolEvent(tool, type, event) {\n this.tool = tool;\n this.type = type;\n this.event = event;\n },\n _choosePoint: function(point, toolPoint) {\n return point ? point : toolPoint ? toolPoint.clone() : null;\n },\n getPoint: function() {\n return this._choosePoint(this._point, this.tool._point);\n },\n setPoint: function(point) {\n this._point = point;\n },\n getLastPoint: function() {\n return this._choosePoint(this._lastPoint, this.tool._lastPoint);\n },\n setLastPoint: function(lastPoint) {\n this._lastPoint = lastPoint;\n },\n getDownPoint: function() {\n return this._choosePoint(this._downPoint, this.tool._downPoint);\n },\n setDownPoint: function(downPoint) {\n this._downPoint = downPoint;\n },\n getMiddlePoint: function() {\n if (!this._middlePoint && this.tool._lastPoint) return this.tool._point.add(this.tool._lastPoint).divide(2);\n return this._middlePoint;\n },\n setMiddlePoint: function(middlePoint) {\n this._middlePoint = middlePoint;\n },\n getDelta: function() {\n return !this._delta && this.tool._lastPoint ? this.tool._point.subtract(this.tool._lastPoint) : this._delta;\n },\n setDelta: function(delta) {\n this._delta = delta;\n },\n getCount: function() {\n return this.tool[/^mouse(down|up)$/.test(this.type) ? \"_downCount\" : \"_moveCount\"];\n },\n setCount: function(count) {\n this.tool[/^mouse(down|up)$/.test(this.type) ? \"downCount\" : \"count\"] = count;\n },\n getItem: function() {\n if (!this._item) {\n var result = this.tool._scope.project.hitTest(this.getPoint());\n if (result) {\n var item = result.item, parent = item._parent;\n while(/^(Group|CompoundPath)$/.test(parent._class)){\n item = parent;\n parent = parent._parent;\n }\n this._item = item;\n }\n }\n return this._item;\n },\n setItem: function(item) {\n this._item = item;\n },\n toString: function() {\n return \"{ type: \" + this.type + \", point: \" + this.getPoint() + \", count: \" + this.getCount() + \", modifiers: \" + this.getModifiers() + \" }\";\n }\n });\n var Tool = PaperScopeItem.extend({\n _class: \"Tool\",\n _list: \"tools\",\n _reference: \"tool\",\n _events: [\n \"onMouseDown\",\n \"onMouseUp\",\n \"onMouseDrag\",\n \"onMouseMove\",\n \"onActivate\",\n \"onDeactivate\",\n \"onEditOptions\",\n \"onKeyDown\",\n \"onKeyUp\"\n ],\n initialize: function Tool(props) {\n PaperScopeItem.call(this);\n this._moveCount = -1;\n this._downCount = -1;\n this.set(props);\n },\n getMinDistance: function() {\n return this._minDistance;\n },\n setMinDistance: function(minDistance) {\n this._minDistance = minDistance;\n if (minDistance != null && this._maxDistance != null && minDistance > this._maxDistance) this._maxDistance = minDistance;\n },\n getMaxDistance: function() {\n return this._maxDistance;\n },\n setMaxDistance: function(maxDistance) {\n this._maxDistance = maxDistance;\n if (this._minDistance != null && maxDistance != null && maxDistance < this._minDistance) this._minDistance = maxDistance;\n },\n getFixedDistance: function() {\n return this._minDistance == this._maxDistance ? this._minDistance : null;\n },\n setFixedDistance: function(distance) {\n this._minDistance = this._maxDistance = distance;\n },\n _handleMouseEvent: function(type, event, point, mouse) {\n paper = this._scope;\n if (mouse.drag && !this.responds(type)) type = \"mousemove\";\n var move = mouse.move || mouse.drag, responds = this.responds(type), minDistance = this.minDistance, maxDistance = this.maxDistance, called = false, tool = this;\n function update(minDistance, maxDistance) {\n var pt = point, toolPoint = move ? tool._point : tool._downPoint || pt;\n if (move) {\n if (tool._moveCount >= 0 && pt.equals(toolPoint)) return false;\n if (toolPoint && (minDistance != null || maxDistance != null)) {\n var vector = pt.subtract(toolPoint), distance = vector.getLength();\n if (distance < (minDistance || 0)) return false;\n if (maxDistance) pt = toolPoint.add(vector.normalize(Math.min(distance, maxDistance)));\n }\n tool._moveCount++;\n }\n tool._point = pt;\n tool._lastPoint = toolPoint || pt;\n if (mouse.down) {\n tool._moveCount = -1;\n tool._downPoint = pt;\n tool._downCount++;\n }\n return true;\n }\n function emit() {\n if (responds) called = tool.emit(type, new ToolEvent(tool, type, event)) || called;\n }\n if (mouse.down) {\n update();\n emit();\n } else if (mouse.up) {\n update(null, maxDistance);\n emit();\n } else if (responds) while(update(minDistance, maxDistance))emit();\n return called;\n }\n });\n var Tween = Base.extend(Emitter, {\n _class: \"Tween\",\n statics: {\n easings: new Base({\n linear: function(t) {\n return t;\n },\n easeInQuad: function(t) {\n return t * t;\n },\n easeOutQuad: function(t) {\n return t * (2 - t);\n },\n easeInOutQuad: function(t) {\n return t < 0.5 ? 2 * t * t : -1 + 2 * (2 - t) * t;\n },\n easeInCubic: function(t) {\n return t * t * t;\n },\n easeOutCubic: function(t) {\n return --t * t * t + 1;\n },\n easeInOutCubic: function(t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n },\n easeInQuart: function(t) {\n return t * t * t * t;\n },\n easeOutQuart: function(t) {\n return 1 - --t * t * t * t;\n },\n easeInOutQuart: function(t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n },\n easeInQuint: function(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function(t) {\n return 1 + --t * t * t * t * t;\n },\n easeInOutQuint: function(t) {\n return t < 0.5 ? 16 * t * t * t * t * t : 1 + 16 * --t * t * t * t * t;\n }\n })\n },\n initialize: function Tween(object, from, to, duration, easing, start) {\n this.object = object;\n var type = typeof easing;\n var isFunction = type === \"function\";\n this.type = isFunction ? type : type === \"string\" ? easing : \"linear\";\n this.easing = isFunction ? easing : Tween.easings[this.type];\n this.duration = duration;\n this.running = false;\n this._then = null;\n this._startTime = null;\n var state = from || to;\n this._keys = state ? Object.keys(state) : [];\n this._parsedKeys = this._parseKeys(this._keys);\n this._from = state && this._getState(from);\n this._to = state && this._getState(to);\n if (start !== false) this.start();\n },\n then: function(then) {\n this._then = then;\n return this;\n },\n start: function() {\n this._startTime = null;\n this.running = true;\n return this;\n },\n stop: function() {\n this.running = false;\n return this;\n },\n update: function(progress) {\n if (this.running) {\n if (progress >= 1) {\n progress = 1;\n this.running = false;\n }\n var factor = this.easing(progress), keys = this._keys, getValue = function(value) {\n return typeof value === \"function\" ? value(factor, progress) : value;\n };\n for(var i = 0, l = keys && keys.length; i < l; i++){\n var key = keys[i], from = getValue(this._from[key]), to = getValue(this._to[key]), value = from && to && from.__add && to.__add ? to.__subtract(from).__multiply(factor).__add(from) : (to - from) * factor + from;\n this._setProperty(this._parsedKeys[key], value);\n }\n if (this.responds(\"update\")) this.emit(\"update\", new Base({\n progress: progress,\n factor: factor\n }));\n if (!this.running && this._then) this._then(this.object);\n }\n return this;\n },\n _events: {\n onUpdate: {}\n },\n _handleFrame: function(time) {\n var startTime = this._startTime, progress = startTime ? (time - startTime) / this.duration : 0;\n if (!startTime) this._startTime = time;\n this.update(progress);\n },\n _getState: function(state) {\n var keys = this._keys, result = {};\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i], path = this._parsedKeys[key], current = this._getProperty(path), value;\n if (state) {\n var resolved = this._resolveValue(current, state[key]);\n this._setProperty(path, resolved);\n value = this._getProperty(path);\n value = value && value.clone ? value.clone() : value;\n this._setProperty(path, current);\n } else value = current && current.clone ? current.clone() : current;\n result[key] = value;\n }\n return result;\n },\n _resolveValue: function(current, value) {\n if (value) {\n if (Array.isArray(value) && value.length === 2) {\n var operator = value[0];\n return operator && operator.match && operator.match(/^[+\\-\\*\\/]=/) ? this._calculate(current, operator[0], value[1]) : value;\n } else if (typeof value === \"string\") {\n var match = value.match(/^[+\\-*/]=(.*)/);\n if (match) {\n var parsed = JSON.parse(match[1].replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g, '\"$2\": '));\n return this._calculate(current, value[0], parsed);\n }\n }\n }\n return value;\n },\n _calculate: function(left, operator, right) {\n return paper.PaperScript.calculateBinary(left, operator, right);\n },\n _parseKeys: function(keys) {\n var parsed = {};\n for(var i = 0, l = keys.length; i < l; i++){\n var key = keys[i], path = key.replace(/\\.([^.]*)/g, \"/$1\").replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, \"/$1\");\n parsed[key] = path.split(\"/\");\n }\n return parsed;\n },\n _getProperty: function(path, offset) {\n var obj = this.object;\n for(var i = 0, l = path.length - (offset || 0); i < l && obj; i++)obj = obj[path[i]];\n return obj;\n },\n _setProperty: function(path, value) {\n var dest = this._getProperty(path, 1);\n if (dest) dest[path[path.length - 1]] = value;\n }\n });\n var Http = {\n request: function(options) {\n var xhr = new self1.XMLHttpRequest();\n xhr.open((options.method || \"get\").toUpperCase(), options.url, Base.pick(options.async, true));\n if (options.mimeType) xhr.overrideMimeType(options.mimeType);\n xhr.onload = function() {\n var status = xhr.status;\n if (status === 0 || status === 200) {\n if (options.onLoad) options.onLoad.call(xhr, xhr.responseText);\n } else xhr.onerror();\n };\n xhr.onerror = function() {\n var status = xhr.status, message = 'Could not load \"' + options.url + '\" (Status: ' + status + \")\";\n if (options.onError) options.onError(message, status);\n else throw new Error(message);\n };\n return xhr.send(null);\n }\n };\n var CanvasProvider = Base.exports.CanvasProvider = {\n canvases: [],\n getCanvas: function(width, height, options) {\n if (!window) return null;\n var canvas, clear = true;\n if (typeof width === \"object\") {\n height = width.height;\n width = width.width;\n }\n if (this.canvases.length) canvas = this.canvases.pop();\n else {\n canvas = document.createElement(\"canvas\");\n clear = false;\n }\n var ctx = canvas.getContext(\"2d\", options || {});\n if (!ctx) throw new Error(\"Canvas \" + canvas + \" is unable to provide a 2D context.\");\n if (canvas.width === width && canvas.height === height) {\n if (clear) ctx.clearRect(0, 0, width + 1, height + 1);\n } else {\n canvas.width = width;\n canvas.height = height;\n }\n ctx.save();\n return canvas;\n },\n getContext: function(width, height, options) {\n var canvas = this.getCanvas(width, height, options);\n return canvas ? canvas.getContext(\"2d\", options || {}) : null;\n },\n release: function(obj) {\n var canvas = obj && obj.canvas ? obj.canvas : obj;\n if (canvas && canvas.getContext) {\n canvas.getContext(\"2d\").restore();\n this.canvases.push(canvas);\n }\n }\n };\n var BlendMode = new function() {\n var min = Math.min, max = Math.max, abs = Math.abs, sr, sg, sb, sa, br, bg, bb, ba, dr, dg, db;\n function getLum(r, g, b) {\n return 0.2989 * r + 0.587 * g + 0.114 * b;\n }\n function setLum(r, g, b, l) {\n var d = l - getLum(r, g, b);\n dr = r + d;\n dg = g + d;\n db = b + d;\n var l = getLum(dr, dg, db), mn = min(dr, dg, db), mx = max(dr, dg, db);\n if (mn < 0) {\n var lmn = l - mn;\n dr = l + (dr - l) * l / lmn;\n dg = l + (dg - l) * l / lmn;\n db = l + (db - l) * l / lmn;\n }\n if (mx > 255) {\n var ln = 255 - l, mxl = mx - l;\n dr = l + (dr - l) * ln / mxl;\n dg = l + (dg - l) * ln / mxl;\n db = l + (db - l) * ln / mxl;\n }\n }\n function getSat(r, g, b) {\n return max(r, g, b) - min(r, g, b);\n }\n function setSat(r, g, b, s) {\n var col = [\n r,\n g,\n b\n ], mx = max(r, g, b), mn = min(r, g, b), md;\n mn = mn === r ? 0 : mn === g ? 1 : 2;\n mx = mx === r ? 0 : mx === g ? 1 : 2;\n md = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n if (col[mx] > col[mn]) {\n col[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n col[mx] = s;\n } else col[md] = col[mx] = 0;\n col[mn] = 0;\n dr = col[0];\n dg = col[1];\n db = col[2];\n }\n var modes = {\n multiply: function() {\n dr = br * sr / 255;\n dg = bg * sg / 255;\n db = bb * sb / 255;\n },\n screen: function() {\n dr = br + sr - br * sr / 255;\n dg = bg + sg - bg * sg / 255;\n db = bb + sb - bb * sb / 255;\n },\n overlay: function() {\n dr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n dg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n db = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n },\n \"soft-light\": function() {\n var t = sr * br / 255;\n dr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n t = sg * bg / 255;\n dg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n t = sb * bb / 255;\n db = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n },\n \"hard-light\": function() {\n dr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n dg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n db = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n },\n \"color-dodge\": function() {\n dr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n dg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n db = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n },\n \"color-burn\": function() {\n dr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n dg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n db = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n },\n darken: function() {\n dr = br < sr ? br : sr;\n dg = bg < sg ? bg : sg;\n db = bb < sb ? bb : sb;\n },\n lighten: function() {\n dr = br > sr ? br : sr;\n dg = bg > sg ? bg : sg;\n db = bb > sb ? bb : sb;\n },\n difference: function() {\n dr = br - sr;\n if (dr < 0) dr = -dr;\n dg = bg - sg;\n if (dg < 0) dg = -dg;\n db = bb - sb;\n if (db < 0) db = -db;\n },\n exclusion: function() {\n dr = br + sr * (255 - br - br) / 255;\n dg = bg + sg * (255 - bg - bg) / 255;\n db = bb + sb * (255 - bb - bb) / 255;\n },\n hue: function() {\n setSat(sr, sg, sb, getSat(br, bg, bb));\n setLum(dr, dg, db, getLum(br, bg, bb));\n },\n saturation: function() {\n setSat(br, bg, bb, getSat(sr, sg, sb));\n setLum(dr, dg, db, getLum(br, bg, bb));\n },\n luminosity: function() {\n setLum(br, bg, bb, getLum(sr, sg, sb));\n },\n color: function() {\n setLum(sr, sg, sb, getLum(br, bg, bb));\n },\n add: function() {\n dr = min(br + sr, 255);\n dg = min(bg + sg, 255);\n db = min(bb + sb, 255);\n },\n subtract: function() {\n dr = max(br - sr, 0);\n dg = max(bg - sg, 0);\n db = max(bb - sb, 0);\n },\n average: function() {\n dr = (br + sr) / 2;\n dg = (bg + sg) / 2;\n db = (bb + sb) / 2;\n },\n negation: function() {\n dr = 255 - abs(255 - sr - br);\n dg = 255 - abs(255 - sg - bg);\n db = 255 - abs(255 - sb - bb);\n }\n };\n var nativeModes = this.nativeModes = Base.each([\n \"source-over\",\n \"source-in\",\n \"source-out\",\n \"source-atop\",\n \"destination-over\",\n \"destination-in\",\n \"destination-out\",\n \"destination-atop\",\n \"lighter\",\n \"darker\",\n \"copy\",\n \"xor\"\n ], function(mode) {\n this[mode] = true;\n }, {});\n var ctx = CanvasProvider.getContext(1, 1, {\n willReadFrequently: true\n });\n if (ctx) {\n Base.each(modes, function(func, mode) {\n var darken = mode === \"darken\", ok = false;\n ctx.save();\n try {\n ctx.fillStyle = darken ? \"#300\" : \"#a00\";\n ctx.fillRect(0, 0, 1, 1);\n ctx.globalCompositeOperation = mode;\n if (ctx.globalCompositeOperation === mode) {\n ctx.fillStyle = darken ? \"#a00\" : \"#300\";\n ctx.fillRect(0, 0, 1, 1);\n ok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken ? 170 : 51;\n }\n } catch (e) {}\n ctx.restore();\n nativeModes[mode] = ok;\n });\n CanvasProvider.release(ctx);\n }\n this.process = function(mode, srcContext, dstContext, alpha, offset) {\n var srcCanvas = srcContext.canvas, normal = mode === \"normal\";\n if (normal || nativeModes[mode]) {\n dstContext.save();\n dstContext.setTransform(1, 0, 0, 1, 0, 0);\n dstContext.globalAlpha = alpha;\n if (!normal) dstContext.globalCompositeOperation = mode;\n dstContext.drawImage(srcCanvas, offset.x, offset.y);\n dstContext.restore();\n } else {\n var process = modes[mode];\n if (!process) return;\n var dstData = dstContext.getImageData(offset.x, offset.y, srcCanvas.width, srcCanvas.height), dst = dstData.data, src = srcContext.getImageData(0, 0, srcCanvas.width, srcCanvas.height).data;\n for(var i = 0, l = dst.length; i < l; i += 4){\n sr = src[i];\n br = dst[i];\n sg = src[i + 1];\n bg = dst[i + 1];\n sb = src[i + 2];\n bb = dst[i + 2];\n sa = src[i + 3];\n ba = dst[i + 3];\n process();\n var a1 = sa * alpha / 255, a2 = 1 - a1;\n dst[i] = a1 * dr + a2 * br;\n dst[i + 1] = a1 * dg + a2 * bg;\n dst[i + 2] = a1 * db + a2 * bb;\n dst[i + 3] = sa * alpha + a2 * ba;\n }\n dstContext.putImageData(dstData, offset.x, offset.y);\n }\n };\n };\n var SvgElement = new function() {\n var svg = \"http://www.w3.org/2000/svg\", xmlns = \"http://www.w3.org/2000/xmlns\", xlink = \"http://www.w3.org/1999/xlink\", attributeNamespace = {\n href: xlink,\n xlink: xmlns,\n xmlns: xmlns + \"/\",\n \"xmlns:xlink\": xmlns + \"/\"\n };\n function create(tag, attributes, formatter) {\n return set(document.createElementNS(svg, tag), attributes, formatter);\n }\n function get(node, name) {\n var namespace = attributeNamespace[name], value = namespace ? node.getAttributeNS(namespace, name) : node.getAttribute(name);\n return value === \"null\" ? null : value;\n }\n function set(node, attributes, formatter) {\n for(var name in attributes){\n var value = attributes[name], namespace = attributeNamespace[name];\n if (typeof value === \"number\" && formatter) value = formatter.number(value);\n if (namespace) node.setAttributeNS(namespace, name, value);\n else node.setAttribute(name, value);\n }\n return node;\n }\n return {\n svg: svg,\n xmlns: xmlns,\n xlink: xlink,\n create: create,\n get: get,\n set: set\n };\n };\n var SvgStyles = Base.each({\n fillColor: [\n \"fill\",\n \"color\"\n ],\n fillRule: [\n \"fill-rule\",\n \"string\"\n ],\n strokeColor: [\n \"stroke\",\n \"color\"\n ],\n strokeWidth: [\n \"stroke-width\",\n \"number\"\n ],\n strokeCap: [\n \"stroke-linecap\",\n \"string\"\n ],\n strokeJoin: [\n \"stroke-linejoin\",\n \"string\"\n ],\n strokeScaling: [\n \"vector-effect\",\n \"lookup\",\n {\n true: \"none\",\n false: \"non-scaling-stroke\"\n },\n function(item, value) {\n return !value && (item instanceof PathItem || item instanceof Shape || item instanceof TextItem);\n }\n ],\n miterLimit: [\n \"stroke-miterlimit\",\n \"number\"\n ],\n dashArray: [\n \"stroke-dasharray\",\n \"array\"\n ],\n dashOffset: [\n \"stroke-dashoffset\",\n \"number\"\n ],\n fontFamily: [\n \"font-family\",\n \"string\"\n ],\n fontWeight: [\n \"font-weight\",\n \"string\"\n ],\n fontSize: [\n \"font-size\",\n \"number\"\n ],\n justification: [\n \"text-anchor\",\n \"lookup\",\n {\n left: \"start\",\n center: \"middle\",\n right: \"end\"\n }\n ],\n opacity: [\n \"opacity\",\n \"number\"\n ],\n blendMode: [\n \"mix-blend-mode\",\n \"style\"\n ]\n }, function(entry, key) {\n var part = Base.capitalize(key), lookup = entry[2];\n this[key] = {\n type: entry[1],\n property: key,\n attribute: entry[0],\n toSVG: lookup,\n fromSVG: lookup && Base.each(lookup, function(value, name) {\n this[value] = name;\n }, {}),\n exportFilter: entry[3],\n get: \"get\" + part,\n set: \"set\" + part\n };\n }, {});\n new function() {\n var formatter;\n function getTransform(matrix, coordinates, center) {\n var attrs = new Base(), trans = matrix.getTranslation();\n if (coordinates) {\n var point;\n if (matrix.isInvertible()) {\n matrix = matrix._shiftless();\n point = matrix._inverseTransform(trans);\n trans = null;\n } else point = new Point();\n attrs[center ? \"cx\" : \"x\"] = point.x;\n attrs[center ? \"cy\" : \"y\"] = point.y;\n }\n if (!matrix.isIdentity()) {\n var decomposed = matrix.decompose();\n if (decomposed) {\n var parts = [], angle = decomposed.rotation, scale = decomposed.scaling, skew = decomposed.skewing;\n if (trans && !trans.isZero()) parts.push(\"translate(\" + formatter.point(trans) + \")\");\n if (angle) parts.push(\"rotate(\" + formatter.number(angle) + \")\");\n if (!Numerical.isZero(scale.x - 1) || !Numerical.isZero(scale.y - 1)) parts.push(\"scale(\" + formatter.point(scale) + \")\");\n if (skew.x) parts.push(\"skewX(\" + formatter.number(skew.x) + \")\");\n if (skew.y) parts.push(\"skewY(\" + formatter.number(skew.y) + \")\");\n attrs.transform = parts.join(\" \");\n } else attrs.transform = \"matrix(\" + matrix.getValues().join(\",\") + \")\";\n }\n return attrs;\n }\n function exportGroup(item, options) {\n var attrs = getTransform(item._matrix), children = item._children;\n var node = SvgElement.create(\"g\", attrs, formatter);\n for(var i = 0, l = children.length; i < l; i++){\n var child = children[i];\n var childNode = exportSVG(child, options);\n if (childNode) {\n if (child.isClipMask()) {\n var clip = SvgElement.create(\"clipPath\");\n clip.appendChild(childNode);\n setDefinition(child, clip, \"clip\");\n SvgElement.set(node, {\n \"clip-path\": \"url(#\" + clip.id + \")\"\n });\n } else node.appendChild(childNode);\n }\n }\n return node;\n }\n function exportRaster(item, options) {\n var attrs = getTransform(item._matrix, true), size = item.getSize(), image = item.getImage();\n attrs.x -= size.width / 2;\n attrs.y -= size.height / 2;\n attrs.width = size.width;\n attrs.height = size.height;\n attrs.href = options.embedImages == false && image && image.src || item.toDataURL();\n return SvgElement.create(\"image\", attrs, formatter);\n }\n function exportPath(item, options) {\n var matchShapes = options.matchShapes;\n if (matchShapes) {\n var shape = item.toShape(false);\n if (shape) return exportShape(shape, options);\n }\n var segments = item._segments, length = segments.length, type, attrs = getTransform(item._matrix);\n if (matchShapes && length >= 2 && !item.hasHandles()) {\n if (length > 2) {\n type = item._closed ? \"polygon\" : \"polyline\";\n var parts = [];\n for(var i = 0; i < length; i++)parts.push(formatter.point(segments[i]._point));\n attrs.points = parts.join(\" \");\n } else {\n type = \"line\";\n var start = segments[0]._point, end = segments[1]._point;\n attrs.set({\n x1: start.x,\n y1: start.y,\n x2: end.x,\n y2: end.y\n });\n }\n } else {\n type = \"path\";\n attrs.d = item.getPathData(null, options.precision);\n }\n return SvgElement.create(type, attrs, formatter);\n }\n function exportShape(item) {\n var type = item._type, radius = item._radius, attrs = getTransform(item._matrix, true, type !== \"rectangle\");\n if (type === \"rectangle\") {\n type = \"rect\";\n var size = item._size, width = size.width, height = size.height;\n attrs.x -= width / 2;\n attrs.y -= height / 2;\n attrs.width = width;\n attrs.height = height;\n if (radius.isZero()) radius = null;\n }\n if (radius) {\n if (type === \"circle\") attrs.r = radius;\n else {\n attrs.rx = radius.width;\n attrs.ry = radius.height;\n }\n }\n return SvgElement.create(type, attrs, formatter);\n }\n function exportCompoundPath(item, options) {\n var attrs = getTransform(item._matrix);\n var data = item.getPathData(null, options.precision);\n if (data) attrs.d = data;\n return SvgElement.create(\"path\", attrs, formatter);\n }\n function exportSymbolItem(item, options) {\n var attrs = getTransform(item._matrix, true), definition = item._definition, node = getDefinition(definition, \"symbol\"), definitionItem = definition._item, bounds = definitionItem.getStrokeBounds();\n if (!node) {\n node = SvgElement.create(\"symbol\", {\n viewBox: formatter.rectangle(bounds)\n });\n node.appendChild(exportSVG(definitionItem, options));\n setDefinition(definition, node, \"symbol\");\n }\n attrs.href = \"#\" + node.id;\n attrs.x += bounds.x;\n attrs.y += bounds.y;\n attrs.width = bounds.width;\n attrs.height = bounds.height;\n attrs.overflow = \"visible\";\n return SvgElement.create(\"use\", attrs, formatter);\n }\n function exportGradient(color) {\n var gradientNode = getDefinition(color, \"color\");\n if (!gradientNode) {\n var gradient = color.getGradient(), radial = gradient._radial, origin = color.getOrigin(), destination = color.getDestination(), attrs;\n if (radial) {\n attrs = {\n cx: origin.x,\n cy: origin.y,\n r: origin.getDistance(destination)\n };\n var highlight = color.getHighlight();\n if (highlight) {\n attrs.fx = highlight.x;\n attrs.fy = highlight.y;\n }\n } else attrs = {\n x1: origin.x,\n y1: origin.y,\n x2: destination.x,\n y2: destination.y\n };\n attrs.gradientUnits = \"userSpaceOnUse\";\n gradientNode = SvgElement.create((radial ? \"radial\" : \"linear\") + \"Gradient\", attrs, formatter);\n var stops = gradient._stops;\n for(var i = 0, l = stops.length; i < l; i++){\n var stop = stops[i], stopColor = stop._color, alpha = stopColor.getAlpha(), offset = stop._offset;\n attrs = {\n offset: offset == null ? i / (l - 1) : offset\n };\n if (stopColor) attrs[\"stop-color\"] = stopColor.toCSS(true);\n if (alpha < 1) attrs[\"stop-opacity\"] = alpha;\n gradientNode.appendChild(SvgElement.create(\"stop\", attrs, formatter));\n }\n setDefinition(color, gradientNode, \"color\");\n }\n return \"url(#\" + gradientNode.id + \")\";\n }\n function exportText(item) {\n var node = SvgElement.create(\"text\", getTransform(item._matrix, true), formatter);\n node.textContent = item._content;\n return node;\n }\n var exporters = {\n Group: exportGroup,\n Layer: exportGroup,\n Raster: exportRaster,\n Path: exportPath,\n Shape: exportShape,\n CompoundPath: exportCompoundPath,\n SymbolItem: exportSymbolItem,\n PointText: exportText\n };\n function applyStyle(item, node, isRoot) {\n var attrs = {}, parent = !isRoot && item.getParent(), style = [];\n if (item._name != null) attrs.id = item._name;\n Base.each(SvgStyles, function(entry) {\n var get = entry.get, type = entry.type, value = item[get]();\n if (entry.exportFilter ? entry.exportFilter(item, value) : !parent || !Base.equals(parent[get](), value)) {\n if (type === \"color\" && value != null) {\n var alpha = value.getAlpha();\n if (alpha < 1) attrs[entry.attribute + \"-opacity\"] = alpha;\n }\n if (type === \"style\") style.push(entry.attribute + \": \" + value);\n else attrs[entry.attribute] = value == null ? \"none\" : type === \"color\" ? value.gradient ? exportGradient(value, item) : value.toCSS(true) : type === \"array\" ? value.join(\",\") : type === \"lookup\" ? entry.toSVG[value] : value;\n }\n });\n if (style.length) attrs.style = style.join(\";\");\n if (attrs.opacity === 1) delete attrs.opacity;\n if (!item._visible) attrs.visibility = \"hidden\";\n return SvgElement.set(node, attrs, formatter);\n }\n var definitions;\n function getDefinition(item, type) {\n if (!definitions) definitions = {\n ids: {},\n svgs: {}\n };\n return item && definitions.svgs[type + \"-\" + (item._id || item.__id || (item.__id = UID.get(\"svg\")))];\n }\n function setDefinition(item, node, type) {\n if (!definitions) getDefinition();\n var typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n node.id = type + \"-\" + typeId;\n definitions.svgs[type + \"-\" + (item._id || item.__id)] = node;\n }\n function exportDefinitions(node, options) {\n var svg = node, defs = null;\n if (definitions) {\n svg = node.nodeName.toLowerCase() === \"svg\" && node;\n for(var i in definitions.svgs){\n if (!defs) {\n if (!svg) {\n svg = SvgElement.create(\"svg\");\n svg.appendChild(node);\n }\n defs = svg.insertBefore(SvgElement.create(\"defs\"), svg.firstChild);\n }\n defs.appendChild(definitions.svgs[i]);\n }\n definitions = null;\n }\n return options.asString ? new self1.XMLSerializer().serializeToString(svg) : svg;\n }\n function exportSVG(item, options, isRoot) {\n var exporter = exporters[item._class], node = exporter && exporter(item, options);\n if (node) {\n var onExport = options.onExport;\n if (onExport) node = onExport(item, node, options) || node;\n var data = JSON.stringify(item._data);\n if (data && data !== \"{}\" && data !== \"null\") node.setAttribute(\"data-paper-data\", data);\n }\n return node && applyStyle(item, node, isRoot);\n }\n function setOptions(options) {\n if (!options) options = {};\n formatter = new Formatter(options.precision);\n return options;\n }\n Item.inject({\n exportSVG: function(options) {\n options = setOptions(options);\n return exportDefinitions(exportSVG(this, options, true), options);\n }\n });\n Project.inject({\n exportSVG: function(options) {\n options = setOptions(options);\n var children = this._children, view = this.getView(), bounds = Base.pick(options.bounds, \"view\"), mx = options.matrix || bounds === \"view\" && view._matrix, matrix = mx && Matrix.read([\n mx\n ]), rect = bounds === \"view\" ? new Rectangle([\n 0,\n 0\n ], view.getViewSize()) : bounds === \"content\" ? Item._getBounds(children, matrix, {\n stroke: true\n }).rect : Rectangle.read([\n bounds\n ], 0, {\n readNull: true\n }), attrs = {\n version: \"1.1\",\n xmlns: SvgElement.svg,\n \"xmlns:xlink\": SvgElement.xlink\n };\n if (rect) {\n attrs.width = rect.width;\n attrs.height = rect.height;\n if (rect.x || rect.x === 0 || rect.y || rect.y === 0) attrs.viewBox = formatter.rectangle(rect);\n }\n var node = SvgElement.create(\"svg\", attrs, formatter), parent = node;\n if (matrix && !matrix.isIdentity()) parent = node.appendChild(SvgElement.create(\"g\", getTransform(matrix), formatter));\n for(var i = 0, l = children.length; i < l; i++)parent.appendChild(exportSVG(children[i], options, true));\n return exportDefinitions(node, options);\n }\n });\n };\n new function() {\n var definitions = {}, rootSize;\n function getValue(node, name, isString, allowNull, allowPercent, defaultValue) {\n var value = SvgElement.get(node, name) || defaultValue, res = value == null ? allowNull ? null : isString ? \"\" : 0 : isString ? value : parseFloat(value);\n return /%\\s*$/.test(value) ? res / 100 * (allowPercent ? 1 : rootSize[/x|^width/.test(name) ? \"width\" : \"height\"]) : res;\n }\n function getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n x = getValue(node, x || \"x\", false, allowNull, allowPercent, defaultX);\n y = getValue(node, y || \"y\", false, allowNull, allowPercent, defaultY);\n return allowNull && (x == null || y == null) ? null : new Point(x, y);\n }\n function getSize(node, w, h, allowNull, allowPercent) {\n w = getValue(node, w || \"width\", false, allowNull, allowPercent);\n h = getValue(node, h || \"height\", false, allowNull, allowPercent);\n return allowNull && (w == null || h == null) ? null : new Size(w, h);\n }\n function convertValue(value, type, lookup) {\n return value === \"none\" ? null : type === \"number\" ? parseFloat(value) : type === \"array\" ? value ? value.split(/[\\s,]+/g).map(parseFloat) : [] : type === \"color\" ? getDefinition(value) || value : type === \"lookup\" ? lookup[value] : value;\n }\n function importGroup(node, type, options, isRoot) {\n var nodes = node.childNodes, isClip = type === \"clippath\", isDefs = type === \"defs\", item = new Group(), project = item._project, currentStyle = project._currentStyle, children = [];\n if (!isClip && !isDefs) {\n item = applyAttributes(item, node, isRoot);\n project._currentStyle = item._style.clone();\n }\n if (isRoot) {\n var defs = node.querySelectorAll(\"defs\");\n for(var i = 0, l = defs.length; i < l; i++)importNode(defs[i], options, false);\n }\n for(var i = 0, l = nodes.length; i < l; i++){\n var childNode = nodes[i], child;\n if (childNode.nodeType === 1 && !/^defs$/i.test(childNode.nodeName) && (child = importNode(childNode, options, false)) && !(child instanceof SymbolDefinition)) children.push(child);\n }\n item.addChildren(children);\n if (isClip) item = applyAttributes(item.reduce(), node, isRoot);\n project._currentStyle = currentStyle;\n if (isClip || isDefs) {\n item.remove();\n item = null;\n }\n return item;\n }\n function importPoly(node, type) {\n var coords = node.getAttribute(\"points\").match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g), points = [];\n for(var i = 0, l = coords.length; i < l; i += 2)points.push(new Point(parseFloat(coords[i]), parseFloat(coords[i + 1])));\n var path = new Path(points);\n if (type === \"polygon\") path.closePath();\n return path;\n }\n function importPath(node) {\n return PathItem.create(node.getAttribute(\"d\"));\n }\n function importGradient(node, type) {\n var id = (getValue(node, \"href\", true) || \"\").substring(1), radial = type === \"radialgradient\", gradient;\n if (id) {\n gradient = definitions[id].getGradient();\n if (gradient._radial ^ radial) {\n gradient = gradient.clone();\n gradient._radial = radial;\n }\n } else {\n var nodes = node.childNodes, stops = [];\n for(var i = 0, l = nodes.length; i < l; i++){\n var child = nodes[i];\n if (child.nodeType === 1) stops.push(applyAttributes(new GradientStop(), child));\n }\n gradient = new Gradient(stops, radial);\n }\n var origin, destination, highlight, scaleToBounds = getValue(node, \"gradientUnits\", true) !== \"userSpaceOnUse\";\n if (radial) {\n origin = getPoint(node, \"cx\", \"cy\", false, scaleToBounds, \"50%\", \"50%\");\n destination = origin.add(getValue(node, \"r\", false, false, scaleToBounds, \"50%\"), 0);\n highlight = getPoint(node, \"fx\", \"fy\", true, scaleToBounds);\n } else {\n origin = getPoint(node, \"x1\", \"y1\", false, scaleToBounds, \"0%\", \"0%\");\n destination = getPoint(node, \"x2\", \"y2\", false, scaleToBounds, \"100%\", \"0%\");\n }\n var color = applyAttributes(new Color(gradient, origin, destination, highlight), node);\n color._scaleToBounds = scaleToBounds;\n return null;\n }\n var importers = {\n \"#document\": function(node, type, options, isRoot) {\n var nodes = node.childNodes;\n for(var i = 0, l = nodes.length; i < l; i++){\n var child = nodes[i];\n if (child.nodeType === 1) return importNode(child, options, isRoot);\n }\n },\n g: importGroup,\n svg: importGroup,\n clippath: importGroup,\n polygon: importPoly,\n polyline: importPoly,\n path: importPath,\n lineargradient: importGradient,\n radialgradient: importGradient,\n image: function(node) {\n var raster = new Raster(getValue(node, \"href\", true));\n raster.on(\"load\", function() {\n var size = getSize(node);\n this.setSize(size);\n var center = getPoint(node).add(size.divide(2));\n this._matrix.append(new Matrix().translate(center));\n });\n return raster;\n },\n symbol: function(node, type, options, isRoot) {\n return new SymbolDefinition(importGroup(node, type, options, isRoot), true);\n },\n defs: importGroup,\n use: function(node) {\n var id = (getValue(node, \"href\", true) || \"\").substring(1), definition = definitions[id], point = getPoint(node);\n return definition ? definition instanceof SymbolDefinition ? definition.place(point) : definition.clone().translate(point) : null;\n },\n circle: function(node) {\n return new Shape.Circle(getPoint(node, \"cx\", \"cy\"), getValue(node, \"r\"));\n },\n ellipse: function(node) {\n return new Shape.Ellipse({\n center: getPoint(node, \"cx\", \"cy\"),\n radius: getSize(node, \"rx\", \"ry\")\n });\n },\n rect: function(node) {\n return new Shape.Rectangle(new Rectangle(getPoint(node), getSize(node)), getSize(node, \"rx\", \"ry\"));\n },\n line: function(node) {\n return new Path.Line(getPoint(node, \"x1\", \"y1\"), getPoint(node, \"x2\", \"y2\"));\n },\n text: function(node) {\n var text = new PointText(getPoint(node).add(getPoint(node, \"dx\", \"dy\")));\n text.setContent(node.textContent.trim() || \"\");\n return text;\n },\n switch: importGroup\n };\n function applyTransform(item, value, name, node) {\n if (item.transform) {\n var transforms = (node.getAttribute(name) || \"\").split(/\\)\\s*/g), matrix = new Matrix();\n for(var i = 0, l = transforms.length; i < l; i++){\n var transform = transforms[i];\n if (!transform) break;\n var parts = transform.split(/\\(\\s*/), command = parts[0], v = parts[1].split(/[\\s,]+/g);\n for(var j = 0, m = v.length; j < m; j++)v[j] = parseFloat(v[j]);\n switch(command){\n case \"matrix\":\n matrix.append(new Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n break;\n case \"rotate\":\n matrix.rotate(v[0], v[1] || 0, v[2] || 0);\n break;\n case \"translate\":\n matrix.translate(v[0], v[1] || 0);\n break;\n case \"scale\":\n matrix.scale(v);\n break;\n case \"skewX\":\n matrix.skew(v[0], 0);\n break;\n case \"skewY\":\n matrix.skew(0, v[0]);\n break;\n }\n }\n item.transform(matrix);\n }\n }\n function applyOpacity(item, value, name) {\n var key = name === \"fill-opacity\" ? \"getFillColor\" : \"getStrokeColor\", color = item[key] && item[key]();\n if (color) color.setAlpha(parseFloat(value));\n }\n var attributes = Base.set(Base.each(SvgStyles, function(entry) {\n this[entry.attribute] = function(item, value) {\n if (item[entry.set]) {\n item[entry.set](convertValue(value, entry.type, entry.fromSVG));\n if (entry.type === \"color\") {\n var color = item[entry.get]();\n if (color) {\n if (color._scaleToBounds) {\n var bounds = item.getBounds();\n color.transform(new Matrix().translate(bounds.getPoint()).scale(bounds.getSize()));\n }\n }\n }\n }\n };\n }, {}), {\n id: function(item, value) {\n definitions[value] = item;\n if (item.setName) item.setName(value);\n },\n \"clip-path\": function(item, value) {\n var clip = getDefinition(value);\n if (clip) {\n clip = clip.clone();\n clip.setClipMask(true);\n if (item instanceof Group) item.insertChild(0, clip);\n else return new Group(clip, item);\n }\n },\n gradientTransform: applyTransform,\n transform: applyTransform,\n \"fill-opacity\": applyOpacity,\n \"stroke-opacity\": applyOpacity,\n visibility: function(item, value) {\n if (item.setVisible) item.setVisible(value === \"visible\");\n },\n display: function(item, value) {\n if (item.setVisible) item.setVisible(value !== null);\n },\n \"stop-color\": function(item, value) {\n if (item.setColor) item.setColor(value);\n },\n \"stop-opacity\": function(item, value) {\n if (item._color) item._color.setAlpha(parseFloat(value));\n },\n offset: function(item, value) {\n if (item.setOffset) {\n var percent = value.match(/(.*)%$/);\n item.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n }\n },\n viewBox: function(item, value, name, node, styles) {\n var rect = new Rectangle(convertValue(value, \"array\")), size = getSize(node, null, null, true), group, matrix;\n if (item instanceof Group) {\n var scale = size ? size.divide(rect.getSize()) : 1, matrix = new Matrix().scale(scale).translate(rect.getPoint().negate());\n group = item;\n } else if (item instanceof SymbolDefinition) {\n if (size) rect.setSize(size);\n group = item._item;\n }\n if (group) {\n if (getAttribute(node, \"overflow\", styles) !== \"visible\") {\n var clip = new Shape.Rectangle(rect);\n clip.setClipMask(true);\n group.addChild(clip);\n }\n if (matrix) group.transform(matrix);\n }\n }\n });\n function getAttribute(node, name, styles) {\n var attr = node.attributes[name], value = attr && attr.value;\n if (!value && node.style) {\n var style = Base.camelize(name);\n value = node.style[style];\n if (!value && styles.node[style] !== styles.parent[style]) value = styles.node[style];\n }\n return !value ? undefined : value === \"none\" ? null : value;\n }\n function applyAttributes(item, node, isRoot) {\n var parent = node.parentNode, styles = {\n node: DomElement.getStyles(node) || {},\n parent: !isRoot && !/^defs$/i.test(parent.tagName) && DomElement.getStyles(parent) || {}\n };\n Base.each(attributes, function(apply, name) {\n var value = getAttribute(node, name, styles);\n item = value !== undefined && apply(item, value, name, node, styles) || item;\n });\n return item;\n }\n function getDefinition(value) {\n var match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/), name = match && match[1], res = name && definitions[window ? name.replace(window.location.href.split(\"#\")[0] + \"#\", \"\") : name];\n if (res && res._scaleToBounds) {\n res = res.clone();\n res._scaleToBounds = true;\n }\n return res;\n }\n function importNode(node, options, isRoot) {\n var type = node.nodeName.toLowerCase(), isElement = type !== \"#document\", body = document.body, container, parent, next;\n if (isRoot && isElement) {\n rootSize = paper.getView().getSize();\n rootSize = getSize(node, null, null, true) || rootSize;\n container = SvgElement.create(\"svg\", {\n style: \"stroke-width: 1px; stroke-miterlimit: 10\"\n });\n parent = node.parentNode;\n next = node.nextSibling;\n container.appendChild(node);\n body.appendChild(container);\n }\n var settings = paper.settings, applyMatrix = settings.applyMatrix, insertItems = settings.insertItems;\n settings.applyMatrix = false;\n settings.insertItems = false;\n var importer = importers[type], item = importer && importer(node, type, options, isRoot) || null;\n settings.insertItems = insertItems;\n settings.applyMatrix = applyMatrix;\n if (item) {\n if (isElement && !(item instanceof Group)) item = applyAttributes(item, node, isRoot);\n var onImport = options.onImport, data = isElement && node.getAttribute(\"data-paper-data\");\n if (onImport) item = onImport(node, item, options) || item;\n if (options.expandShapes && item instanceof Shape) {\n item.remove();\n item = item.toPath();\n }\n if (data) item._data = JSON.parse(data);\n }\n if (container) {\n body.removeChild(container);\n if (parent) {\n if (next) parent.insertBefore(node, next);\n else parent.appendChild(node);\n }\n }\n if (isRoot) {\n definitions = {};\n if (item && Base.pick(options.applyMatrix, applyMatrix)) item.matrix.apply(true, true);\n }\n return item;\n }\n function importSVG(source, options, owner) {\n if (!source) return null;\n options = typeof options === \"function\" ? {\n onLoad: options\n } : options || {};\n var scope = paper, item = null;\n function onLoad(svg) {\n try {\n var node = typeof svg === \"object\" ? svg : new self1.DOMParser().parseFromString(svg.trim(), \"image/svg+xml\");\n if (!node.nodeName) {\n node = null;\n throw new Error(\"Unsupported SVG source: \" + source);\n }\n paper = scope;\n item = importNode(node, options, true);\n if (!options || options.insert !== false) owner._insertItem(undefined, item);\n var onLoad = options.onLoad;\n if (onLoad) onLoad(item, svg);\n } catch (e) {\n onError(e);\n }\n }\n function onError(message, status) {\n var onError = options.onError;\n if (onError) onError(message, status);\n else throw new Error(message);\n }\n if (typeof source === \"string\" && !/^[\\s\\S]* 3) {\n cats.sort(function(a, b) {\n return b.length - a.length;\n });\n f += \"switch(str.length){\";\n for(var i = 0; i < cats.length; ++i){\n var cat = cats[i];\n f += \"case \" + cat[0].length + \":\";\n compareTo(cat);\n }\n f += \"}\";\n } else compareTo(words);\n return new Function(\"str\", f);\n }\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0\\u08A2-\\u08AC\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097F\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F0\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191C\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA697\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7F8-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA80-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u0620-\\u0649\\u0672-\\u06D3\\u06E7-\\u06E8\\u06FB-\\u06FC\\u0730-\\u074A\\u0800-\\u0814\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0840-\\u0857\\u08E4-\\u08FE\\u0900-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09D7\\u09DF-\\u09E0\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B60\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62-\\u0C63\\u0C66-\\u0C6F\\u0C82\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2-\\u0CE3\\u0CE6-\\u0CEF\\u0D02\\u0D03\\u0D46-\\u0D48\\u0D57\\u0D62-\\u0D63\\u0D66-\\u0D6F\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E34-\\u0E3A\\u0E40-\\u0E45\\u0E50-\\u0E59\\u0EB4-\\u0EB9\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F41-\\u0F47\\u0F71-\\u0F84\\u0F86-\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u170E-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17B2\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1920-\\u192B\\u1930-\\u193B\\u1951-\\u196D\\u19B0-\\u19C0\\u19C8-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A15\\u1A20-\\u1A53\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1B46-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C00-\\u1C22\\u1C40-\\u1C49\\u1C5B-\\u1C7D\\u1CD0-\\u1CD2\\u1D00-\\u1DBE\\u1E01-\\u1F15\\u200C\\u200D\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2D81-\\u2D96\\u2DE0-\\u2DFF\\u3021-\\u3028\\u3099\\u309A\\uA640-\\uA66D\\uA674-\\uA67D\\uA69F\\uA6F0-\\uA6F1\\uA7F8-\\uA800\\uA806\\uA80B\\uA823-\\uA827\\uA880-\\uA881\\uA8B4-\\uA8C4\\uA8D0-\\uA8D9\\uA8F3-\\uA8F7\\uA900-\\uA909\\uA926-\\uA92D\\uA930-\\uA945\\uA980-\\uA983\\uA9B3-\\uA9C0\\uAA00-\\uAA27\\uAA40-\\uAA41\\uAA4C-\\uAA4D\\uAA50-\\uAA59\\uAA7B\\uAAE0-\\uAAE9\\uAAF2-\\uAAF3\\uABC0-\\uABE1\\uABEC\\uABED\\uABF0-\\uABF9\\uFB20-\\uFB28\\uFE00-\\uFE0F\\uFE20-\\uFE26\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n var newline = /[\\n\\r\\u2028\\u2029]/;\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n if (code < 65) return code === 36;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n function line_loc_t() {\n this.line = tokCurLine;\n this.column = tokPos - tokLineStart;\n }\n function initTokenState() {\n tokCurLine = 1;\n tokPos = tokLineStart = 0;\n tokRegexpAllowed = true;\n skipSpace();\n }\n function finishToken(type, val) {\n tokEnd = tokPos;\n if (options.locations) tokEndLoc = new line_loc_t;\n tokType = type;\n skipSpace();\n tokVal = val;\n tokRegexpAllowed = type.beforeExpr;\n }\n function skipBlockComment() {\n var startLoc = options.onComment && options.locations && new line_loc_t;\n var start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n if (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n tokPos = end + 2;\n if (options.locations) {\n lineBreak.lastIndex = start;\n var match;\n while((match = lineBreak.exec(input)) && match.index < tokPos){\n ++tokCurLine;\n tokLineStart = match.index + match[0].length;\n }\n }\n if (options.onComment) options.onComment(true, input.slice(start + 2, end), start, tokPos, startLoc, options.locations && new line_loc_t);\n }\n function skipLineComment() {\n var start = tokPos;\n var startLoc = options.onComment && options.locations && new line_loc_t;\n var ch = input.charCodeAt(tokPos += 2);\n while(tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233){\n ++tokPos;\n ch = input.charCodeAt(tokPos);\n }\n if (options.onComment) options.onComment(false, input.slice(start + 2, tokPos), start, tokPos, startLoc, options.locations && new line_loc_t);\n }\n function skipSpace() {\n while(tokPos < inputLen){\n var ch = input.charCodeAt(tokPos);\n if (ch === 32) ++tokPos;\n else if (ch === 13) {\n ++tokPos;\n var next = input.charCodeAt(tokPos);\n if (next === 10) ++tokPos;\n if (options.locations) {\n ++tokCurLine;\n tokLineStart = tokPos;\n }\n } else if (ch === 10 || ch === 8232 || ch === 8233) {\n ++tokPos;\n if (options.locations) {\n ++tokCurLine;\n tokLineStart = tokPos;\n }\n } else if (ch > 8 && ch < 14) ++tokPos;\n else if (ch === 47) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 42) skipBlockComment();\n else if (next === 47) skipLineComment();\n else break;\n } else if (ch === 160) ++tokPos;\n else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) ++tokPos;\n else break;\n }\n }\n function readToken_dot() {\n var next = input.charCodeAt(tokPos + 1);\n if (next >= 48 && next <= 57) return readNumber(true);\n ++tokPos;\n return finishToken(_dot);\n }\n function readToken_slash() {\n var next = input.charCodeAt(tokPos + 1);\n if (tokRegexpAllowed) {\n ++tokPos;\n return readRegexp();\n }\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_slash, 1);\n }\n function readToken_mult_modulo() {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_multiplyModulo, 1);\n }\n function readToken_pipe_amp(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n function readToken_caret() {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_bitwiseXOR, 1);\n }\n function readToken_plus_min(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === code) {\n if (next == 45 && input.charCodeAt(tokPos + 2) == 62 && newline.test(input.slice(lastEnd, tokPos))) {\n tokPos += 3;\n skipLineComment();\n skipSpace();\n return readToken();\n }\n return finishOp(_incDec, 2);\n }\n if (next === 61) return finishOp(_assign, 2);\n return finishOp(_plusMin, 1);\n }\n function readToken_lt_gt(code) {\n var next = input.charCodeAt(tokPos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n return finishOp(_bitShift, size);\n }\n if (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 && input.charCodeAt(tokPos + 3) == 45) {\n tokPos += 4;\n skipLineComment();\n skipSpace();\n return readToken();\n }\n if (next === 61) size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n return finishOp(_relational, size);\n }\n function readToken_eq_excl(code) {\n var next = input.charCodeAt(tokPos + 1);\n if (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n return finishOp(code === 61 ? _eq : _prefix, 1);\n }\n function getTokenFromCode(code) {\n switch(code){\n case 46:\n return readToken_dot();\n case 40:\n ++tokPos;\n return finishToken(_parenL);\n case 41:\n ++tokPos;\n return finishToken(_parenR);\n case 59:\n ++tokPos;\n return finishToken(_semi);\n case 44:\n ++tokPos;\n return finishToken(_comma);\n case 91:\n ++tokPos;\n return finishToken(_bracketL);\n case 93:\n ++tokPos;\n return finishToken(_bracketR);\n case 123:\n ++tokPos;\n return finishToken(_braceL);\n case 125:\n ++tokPos;\n return finishToken(_braceR);\n case 58:\n ++tokPos;\n return finishToken(_colon);\n case 63:\n ++tokPos;\n return finishToken(_question);\n case 48:\n var next = input.charCodeAt(tokPos + 1);\n if (next === 120 || next === 88) return readHexNumber();\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n return readNumber(false);\n case 34:\n case 39:\n return readString(code);\n case 47:\n return readToken_slash(code);\n case 37:\n case 42:\n return readToken_mult_modulo();\n case 124:\n case 38:\n return readToken_pipe_amp(code);\n case 94:\n return readToken_caret();\n case 43:\n case 45:\n return readToken_plus_min(code);\n case 60:\n case 62:\n return readToken_lt_gt(code);\n case 61:\n case 33:\n return readToken_eq_excl(code);\n case 126:\n return finishOp(_prefix, 1);\n }\n return false;\n }\n function readToken(forceRegexp) {\n if (!forceRegexp) tokStart = tokPos;\n else tokPos = tokStart + 1;\n if (options.locations) tokStartLoc = new line_loc_t;\n if (forceRegexp) return readRegexp();\n if (tokPos >= inputLen) return finishToken(_eof);\n var code = input.charCodeAt(tokPos);\n if (isIdentifierStart(code) || code === 92) return readWord();\n var tok = getTokenFromCode(code);\n if (tok === false) {\n var ch = String.fromCharCode(code);\n if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n }\n return tok;\n }\n function finishOp(type, size) {\n var str = input.slice(tokPos, tokPos + size);\n tokPos += size;\n finishToken(type, str);\n }\n function readRegexp() {\n var content = \"\", escaped, inClass, start = tokPos;\n for(;;){\n if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n var ch = input.charAt(tokPos);\n if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n if (!escaped) {\n if (ch === \"[\") inClass = true;\n else if (ch === \"]\" && inClass) inClass = false;\n else if (ch === \"/\" && !inClass) break;\n escaped = ch === \"\\\\\";\n } else escaped = false;\n ++tokPos;\n }\n var content = input.slice(start, tokPos);\n ++tokPos;\n var mods = readWord1();\n if (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n try {\n var value = new RegExp(content, mods);\n } catch (e) {\n if (e instanceof SyntaxError) raise(start, e.message);\n raise(e);\n }\n return finishToken(_regexp, value);\n }\n function readInt(radix, len) {\n var start = tokPos, total = 0;\n for(var i = 0, e = len == null ? Infinity : len; i < e; ++i){\n var code = input.charCodeAt(tokPos), val;\n if (code >= 97) val = code - 97 + 10;\n else if (code >= 65) val = code - 65 + 10;\n else if (code >= 48 && code <= 57) val = code - 48;\n else val = Infinity;\n if (val >= radix) break;\n ++tokPos;\n total = total * radix + val;\n }\n if (tokPos === start || len != null && tokPos - start !== len) return null;\n return total;\n }\n function readHexNumber() {\n tokPos += 2;\n var val = readInt(16);\n if (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n return finishToken(_num, val);\n }\n function readNumber(startsWithDot) {\n var start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n if (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n if (input.charCodeAt(tokPos) === 46) {\n ++tokPos;\n readInt(10);\n isFloat = true;\n }\n var next = input.charCodeAt(tokPos);\n if (next === 69 || next === 101) {\n next = input.charCodeAt(++tokPos);\n if (next === 43 || next === 45) ++tokPos;\n if (readInt(10) === null) raise(start, \"Invalid number\");\n isFloat = true;\n }\n if (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n var str = input.slice(start, tokPos), val;\n if (isFloat) val = parseFloat(str);\n else if (!octal || str.length === 1) val = parseInt(str, 10);\n else if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n else val = parseInt(str, 8);\n return finishToken(_num, val);\n }\n function readString(quote) {\n tokPos++;\n var out = \"\";\n for(;;){\n if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n var ch = input.charCodeAt(tokPos);\n if (ch === quote) {\n ++tokPos;\n return finishToken(_string, out);\n }\n if (ch === 92) {\n ch = input.charCodeAt(++tokPos);\n var octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n if (octal) octal = octal[0];\n while(octal && parseInt(octal, 8) > 255)octal = octal.slice(0, -1);\n if (octal === \"0\") octal = null;\n ++tokPos;\n if (octal) {\n if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n out += String.fromCharCode(parseInt(octal, 8));\n tokPos += octal.length - 1;\n } else switch(ch){\n case 110:\n out += \"\\n\";\n break;\n case 114:\n out += \"\\r\";\n break;\n case 120:\n out += String.fromCharCode(readHexChar(2));\n break;\n case 117:\n out += String.fromCharCode(readHexChar(4));\n break;\n case 85:\n out += String.fromCharCode(readHexChar(8));\n break;\n case 116:\n out += \"\t\";\n break;\n case 98:\n out += \"\\b\";\n break;\n case 118:\n out += \"\\v\";\n break;\n case 102:\n out += \"\\f\";\n break;\n case 48:\n out += \"\\x00\";\n break;\n case 13:\n if (input.charCodeAt(tokPos) === 10) ++tokPos;\n case 10:\n if (options.locations) {\n tokLineStart = tokPos;\n ++tokCurLine;\n }\n break;\n default:\n out += String.fromCharCode(ch);\n break;\n }\n } else {\n if (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n out += String.fromCharCode(ch);\n ++tokPos;\n }\n }\n }\n function readHexChar(len) {\n var n = readInt(16, len);\n if (n === null) raise(tokStart, \"Bad character escape sequence\");\n return n;\n }\n var containsEsc;\n function readWord1() {\n containsEsc = false;\n var word, first = true, start = tokPos;\n for(;;){\n var ch = input.charCodeAt(tokPos);\n if (isIdentifierChar(ch)) {\n if (containsEsc) word += input.charAt(tokPos);\n ++tokPos;\n } else if (ch === 92) {\n if (!containsEsc) word = input.slice(start, tokPos);\n containsEsc = true;\n if (input.charCodeAt(++tokPos) != 117) raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n ++tokPos;\n var esc = readHexChar(4);\n var escStr = String.fromCharCode(esc);\n if (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n if (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc))) raise(tokPos - 4, \"Invalid Unicode escape\");\n word += escStr;\n } else break;\n first = false;\n }\n return containsEsc ? word : input.slice(start, tokPos);\n }\n function readWord() {\n var word = readWord1();\n var type = _name;\n if (!containsEsc && isKeyword(word)) type = keywordTypes[word];\n return finishToken(type, word);\n }\n function next() {\n lastStart = tokStart;\n lastEnd = tokEnd;\n lastEndLoc = tokEndLoc;\n readToken();\n }\n function setStrict(strct) {\n strict = strct;\n tokPos = tokStart;\n if (options.locations) while(tokPos < tokLineStart){\n tokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n --tokCurLine;\n }\n skipSpace();\n readToken();\n }\n function node_t() {\n this.type = null;\n this.start = tokStart;\n this.end = null;\n }\n function node_loc_t() {\n this.start = tokStartLoc;\n this.end = null;\n if (sourceFile !== null) this.source = sourceFile;\n }\n function startNode() {\n var node = new node_t();\n if (options.locations) node.loc = new node_loc_t();\n if (options.directSourceFile) node.sourceFile = options.directSourceFile;\n if (options.ranges) node.range = [\n tokStart,\n 0\n ];\n return node;\n }\n function startNodeFrom(other) {\n var node = new node_t();\n node.start = other.start;\n if (options.locations) {\n node.loc = new node_loc_t();\n node.loc.start = other.loc.start;\n }\n if (options.ranges) node.range = [\n other.range[0],\n 0\n ];\n return node;\n }\n function finishNode(node, type) {\n node.type = type;\n node.end = lastEnd;\n if (options.locations) node.loc.end = lastEndLoc;\n if (options.ranges) node.range[1] = lastEnd;\n return node;\n }\n function isUseStrict(stmt) {\n return options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" && stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n function eat(type) {\n if (tokType === type) {\n next();\n return true;\n }\n }\n function canInsertSemicolon() {\n return !options.strictSemicolons && (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n function semicolon() {\n if (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n function expect(type) {\n if (tokType === type) next();\n else unexpected();\n }\n function unexpected() {\n raise(tokStart, \"Unexpected token\");\n }\n function checkLVal(expr) {\n if (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\") raise(expr.start, \"Assigning to rvalue\");\n if (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name)) raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n function parseTopLevel(program) {\n lastStart = lastEnd = tokPos;\n if (options.locations) lastEndLoc = new line_loc_t;\n inFunction = strict = null;\n labels = [];\n readToken();\n var node = program || startNode(), first = true;\n if (!program) node.body = [];\n while(tokType !== _eof){\n var stmt = parseStatement();\n node.body.push(stmt);\n if (first && isUseStrict(stmt)) setStrict(true);\n first = false;\n }\n return finishNode(node, \"Program\");\n }\n var loopLabel = {\n kind: \"loop\"\n }, switchLabel = {\n kind: \"switch\"\n };\n function parseStatement() {\n if (tokType === _slash || tokType === _assign && tokVal == \"/=\") readToken(true);\n var starttype = tokType, node = startNode();\n switch(starttype){\n case _break:\n case _continue:\n next();\n var isBreak = starttype === _break;\n if (eat(_semi) || canInsertSemicolon()) node.label = null;\n else if (tokType !== _name) unexpected();\n else {\n node.label = parseIdent();\n semicolon();\n }\n for(var i = 0; i < labels.length; ++i){\n var lab = labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n case _debugger:\n next();\n semicolon();\n return finishNode(node, \"DebuggerStatement\");\n case _do:\n next();\n labels.push(loopLabel);\n node.body = parseStatement();\n labels.pop();\n expect(_while);\n node.test = parseParenExpression();\n semicolon();\n return finishNode(node, \"DoWhileStatement\");\n case _for:\n next();\n labels.push(loopLabel);\n expect(_parenL);\n if (tokType === _semi) return parseFor(node, null);\n if (tokType === _var) {\n var init = startNode();\n next();\n parseVar(init, true);\n finishNode(init, \"VariableDeclaration\");\n if (init.declarations.length === 1 && eat(_in)) return parseForIn(node, init);\n return parseFor(node, init);\n }\n var init = parseExpression(false, true);\n if (eat(_in)) {\n checkLVal(init);\n return parseForIn(node, init);\n }\n return parseFor(node, init);\n case _function:\n next();\n return parseFunction(node, true);\n case _if:\n next();\n node.test = parseParenExpression();\n node.consequent = parseStatement();\n node.alternate = eat(_else) ? parseStatement() : null;\n return finishNode(node, \"IfStatement\");\n case _return:\n if (!inFunction && !options.allowReturnOutsideFunction) raise(tokStart, \"'return' outside of function\");\n next();\n if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n else {\n node.argument = parseExpression();\n semicolon();\n }\n return finishNode(node, \"ReturnStatement\");\n case _switch:\n next();\n node.discriminant = parseParenExpression();\n node.cases = [];\n expect(_braceL);\n labels.push(switchLabel);\n for(var cur, sawDefault; tokType != _braceR;)if (tokType === _case || tokType === _default) {\n var isCase = tokType === _case;\n if (cur) finishNode(cur, \"SwitchCase\");\n node.cases.push(cur = startNode());\n cur.consequent = [];\n next();\n if (isCase) cur.test = parseExpression();\n else {\n if (sawDefault) raise(lastStart, \"Multiple default clauses\");\n sawDefault = true;\n cur.test = null;\n }\n expect(_colon);\n } else {\n if (!cur) unexpected();\n cur.consequent.push(parseStatement());\n }\n if (cur) finishNode(cur, \"SwitchCase\");\n next();\n labels.pop();\n return finishNode(node, \"SwitchStatement\");\n case _throw:\n next();\n if (newline.test(input.slice(lastEnd, tokStart))) raise(lastEnd, \"Illegal newline after throw\");\n node.argument = parseExpression();\n semicolon();\n return finishNode(node, \"ThrowStatement\");\n case _try:\n next();\n node.block = parseBlock();\n node.handler = null;\n if (tokType === _catch) {\n var clause = startNode();\n next();\n expect(_parenL);\n clause.param = parseIdent();\n if (strict && isStrictBadIdWord(clause.param.name)) raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n expect(_parenR);\n clause.guard = null;\n clause.body = parseBlock();\n node.handler = finishNode(clause, \"CatchClause\");\n }\n node.guardedHandlers = empty;\n node.finalizer = eat(_finally) ? parseBlock() : null;\n if (!node.handler && !node.finalizer) raise(node.start, \"Missing catch or finally clause\");\n return finishNode(node, \"TryStatement\");\n case _var:\n next();\n parseVar(node);\n semicolon();\n return finishNode(node, \"VariableDeclaration\");\n case _while:\n next();\n node.test = parseParenExpression();\n labels.push(loopLabel);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"WhileStatement\");\n case _with:\n if (strict) raise(tokStart, \"'with' in strict mode\");\n next();\n node.object = parseParenExpression();\n node.body = parseStatement();\n return finishNode(node, \"WithStatement\");\n case _braceL:\n return parseBlock();\n case _semi:\n next();\n return finishNode(node, \"EmptyStatement\");\n default:\n var maybeName = tokVal, expr = parseExpression();\n if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n for(var i = 0; i < labels.length; ++i)if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n var kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n labels.push({\n name: maybeName,\n kind: kind\n });\n node.body = parseStatement();\n labels.pop();\n node.label = expr;\n return finishNode(node, \"LabeledStatement\");\n } else {\n node.expression = expr;\n semicolon();\n return finishNode(node, \"ExpressionStatement\");\n }\n }\n }\n function parseParenExpression() {\n expect(_parenL);\n var val = parseExpression();\n expect(_parenR);\n return val;\n }\n function parseBlock(allowStrict) {\n var node = startNode(), first = true, strict = false, oldStrict;\n node.body = [];\n expect(_braceL);\n while(!eat(_braceR)){\n var stmt = parseStatement();\n node.body.push(stmt);\n if (first && allowStrict && isUseStrict(stmt)) {\n oldStrict = strict;\n setStrict(strict = true);\n }\n first = false;\n }\n if (strict && !oldStrict) setStrict(false);\n return finishNode(node, \"BlockStatement\");\n }\n function parseFor(node, init) {\n node.init = init;\n expect(_semi);\n node.test = tokType === _semi ? null : parseExpression();\n expect(_semi);\n node.update = tokType === _parenR ? null : parseExpression();\n expect(_parenR);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"ForStatement\");\n }\n function parseForIn(node, init) {\n node.left = init;\n node.right = parseExpression();\n expect(_parenR);\n node.body = parseStatement();\n labels.pop();\n return finishNode(node, \"ForInStatement\");\n }\n function parseVar(node, noIn) {\n node.declarations = [];\n node.kind = \"var\";\n for(;;){\n var decl = startNode();\n decl.id = parseIdent();\n if (strict && isStrictBadIdWord(decl.id.name)) raise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n if (!eat(_comma)) break;\n }\n return node;\n }\n function parseExpression(noComma, noIn) {\n var expr = parseMaybeAssign(noIn);\n if (!noComma && tokType === _comma) {\n var node = startNodeFrom(expr);\n node.expressions = [\n expr\n ];\n while(eat(_comma))node.expressions.push(parseMaybeAssign(noIn));\n return finishNode(node, \"SequenceExpression\");\n }\n return expr;\n }\n function parseMaybeAssign(noIn) {\n var left = parseMaybeConditional(noIn);\n if (tokType.isAssign) {\n var node = startNodeFrom(left);\n node.operator = tokVal;\n node.left = left;\n next();\n node.right = parseMaybeAssign(noIn);\n checkLVal(left);\n return finishNode(node, \"AssignmentExpression\");\n }\n return left;\n }\n function parseMaybeConditional(noIn) {\n var expr = parseExprOps(noIn);\n if (eat(_question)) {\n var node = startNodeFrom(expr);\n node.test = expr;\n node.consequent = parseExpression(true);\n expect(_colon);\n node.alternate = parseExpression(true, noIn);\n return finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n }\n function parseExprOps(noIn) {\n return parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n function parseExprOp(left, minPrec, noIn) {\n var prec = tokType.binop;\n if (prec != null && (!noIn || tokType !== _in)) {\n if (prec > minPrec) {\n var node = startNodeFrom(left);\n node.left = left;\n node.operator = tokVal;\n var op = tokType;\n next();\n node.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n var exprNode = finishNode(node, op === _logicalOR || op === _logicalAND ? \"LogicalExpression\" : \"BinaryExpression\");\n return parseExprOp(exprNode, minPrec, noIn);\n }\n }\n return left;\n }\n function parseMaybeUnary() {\n if (tokType.prefix) {\n var node = startNode(), update = tokType.isUpdate;\n node.operator = tokVal;\n node.prefix = true;\n tokRegexpAllowed = true;\n next();\n node.argument = parseMaybeUnary();\n if (update) checkLVal(node.argument);\n else if (strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") raise(node.start, \"Deleting local variable in strict mode\");\n return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n }\n var expr = parseExprSubscripts();\n while(tokType.postfix && !canInsertSemicolon()){\n var node = startNodeFrom(expr);\n node.operator = tokVal;\n node.prefix = false;\n node.argument = expr;\n checkLVal(expr);\n next();\n expr = finishNode(node, \"UpdateExpression\");\n }\n return expr;\n }\n function parseExprSubscripts() {\n return parseSubscripts(parseExprAtom());\n }\n function parseSubscripts(base, noCalls) {\n if (eat(_dot)) {\n var node = startNodeFrom(base);\n node.object = base;\n node.property = parseIdent(true);\n node.computed = false;\n return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n } else if (eat(_bracketL)) {\n var node = startNodeFrom(base);\n node.object = base;\n node.property = parseExpression();\n node.computed = true;\n expect(_bracketR);\n return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n } else if (!noCalls && eat(_parenL)) {\n var node = startNodeFrom(base);\n node.callee = base;\n node.arguments = parseExprList(_parenR, false);\n return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n } else return base;\n }\n function parseExprAtom() {\n switch(tokType){\n case _this:\n var node = startNode();\n next();\n return finishNode(node, \"ThisExpression\");\n case _name:\n return parseIdent();\n case _num:\n case _string:\n case _regexp:\n var node = startNode();\n node.value = tokVal;\n node.raw = input.slice(tokStart, tokEnd);\n next();\n return finishNode(node, \"Literal\");\n case _null:\n case _true:\n case _false:\n var node = startNode();\n node.value = tokType.atomValue;\n node.raw = tokType.keyword;\n next();\n return finishNode(node, \"Literal\");\n case _parenL:\n var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n next();\n var val = parseExpression();\n val.start = tokStart1;\n val.end = tokEnd;\n if (options.locations) {\n val.loc.start = tokStartLoc1;\n val.loc.end = tokEndLoc;\n }\n if (options.ranges) val.range = [\n tokStart1,\n tokEnd\n ];\n expect(_parenR);\n return val;\n case _bracketL:\n var node = startNode();\n next();\n node.elements = parseExprList(_bracketR, true, true);\n return finishNode(node, \"ArrayExpression\");\n case _braceL:\n return parseObj();\n case _function:\n var node = startNode();\n next();\n return parseFunction(node, false);\n case _new:\n return parseNew();\n default:\n unexpected();\n }\n }\n function parseNew() {\n var node = startNode();\n next();\n node.callee = parseSubscripts(parseExprAtom(), true);\n if (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n else node.arguments = empty;\n return finishNode(node, \"NewExpression\");\n }\n function parseObj() {\n var node = startNode(), first = true, sawGetSet = false;\n node.properties = [];\n next();\n while(!eat(_braceR)){\n if (!first) {\n expect(_comma);\n if (options.allowTrailingCommas && eat(_braceR)) break;\n } else first = false;\n var prop = {\n key: parsePropertyName()\n }, isGetSet = false, kind;\n if (eat(_colon)) {\n prop.value = parseExpression(true);\n kind = prop.kind = \"init\";\n } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n isGetSet = sawGetSet = true;\n kind = prop.kind = prop.key.name;\n prop.key = parsePropertyName();\n if (tokType !== _parenL) unexpected();\n prop.value = parseFunction(startNode(), false);\n } else unexpected();\n if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) for(var i = 0; i < node.properties.length; ++i){\n var other = node.properties[i];\n if (other.key.name === prop.key.name) {\n var conflict = kind == other.kind || isGetSet && other.kind === \"init\" || kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n if (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n if (conflict) raise(prop.key.start, \"Redefinition of property\");\n }\n }\n node.properties.push(prop);\n }\n return finishNode(node, \"ObjectExpression\");\n }\n function parsePropertyName() {\n if (tokType === _num || tokType === _string) return parseExprAtom();\n return parseIdent(true);\n }\n function parseFunction(node, isStatement) {\n if (tokType === _name) node.id = parseIdent();\n else if (isStatement) unexpected();\n else node.id = null;\n node.params = [];\n var first = true;\n expect(_parenL);\n while(!eat(_parenR)){\n if (!first) expect(_comma);\n else first = false;\n node.params.push(parseIdent());\n }\n var oldInFunc = inFunction, oldLabels = labels;\n inFunction = true;\n labels = [];\n node.body = parseBlock(true);\n inFunction = oldInFunc;\n labels = oldLabels;\n if (strict || node.body.body.length && isUseStrict(node.body.body[0])) for(var i = node.id ? -1 : 0; i < node.params.length; ++i){\n var id = i < 0 ? node.id : node.params[i];\n if (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name)) raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n if (i >= 0) {\n for(var j = 0; j < i; ++j)if (id.name === node.params[j].name) raise(id.start, \"Argument name clash in strict mode\");\n }\n }\n return finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n var elts = [], first = true;\n while(!eat(close)){\n if (!first) {\n expect(_comma);\n if (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n } else first = false;\n if (allowEmpty && tokType === _comma) elts.push(null);\n else elts.push(parseExpression(true));\n }\n return elts;\n }\n function parseIdent(liberal) {\n var node = startNode();\n if (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n if (tokType === _name) {\n if (!liberal && (options.forbidReserved && (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) || strict && isStrictReservedWord(tokVal)) && input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1) raise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n node.name = tokVal;\n } else if (liberal && tokType.keyword) node.name = tokType.keyword;\n else unexpected();\n tokRegexpAllowed = false;\n next();\n return finishNode(node, \"Identifier\");\n }\n });\n if (!acorn.version) acorn = null;\n }\n function parse(code, options) {\n return (global.acorn || acorn).parse(code, options);\n }\n var binaryOperators = {\n \"+\": \"__add\",\n \"-\": \"__subtract\",\n \"*\": \"__multiply\",\n \"/\": \"__divide\",\n \"%\": \"__modulo\",\n \"==\": \"__equals\",\n \"!=\": \"__equals\"\n };\n var unaryOperators = {\n \"-\": \"__negate\",\n \"+\": \"__self\"\n };\n var fields = Base.each([\n \"add\",\n \"subtract\",\n \"multiply\",\n \"divide\",\n \"modulo\",\n \"equals\",\n \"negate\"\n ], function(name) {\n this[\"__\" + name] = \"#\" + name;\n }, {\n __self: function() {\n return this;\n }\n });\n Point.inject(fields);\n Size.inject(fields);\n Color.inject(fields);\n function __$__(left, operator, right) {\n var handler = binaryOperators[operator];\n if (left && left[handler]) {\n var res = left[handler](right);\n return operator === \"!=\" ? !res : res;\n }\n switch(operator){\n case \"+\":\n return left + right;\n case \"-\":\n return left - right;\n case \"*\":\n return left * right;\n case \"/\":\n return left / right;\n case \"%\":\n return left % right;\n case \"==\":\n return left == right;\n case \"!=\":\n return left != right;\n }\n }\n function $__(operator, value) {\n var handler = unaryOperators[operator];\n if (value && value[handler]) return value[handler]();\n switch(operator){\n case \"+\":\n return +value;\n case \"-\":\n return -value;\n }\n }\n function compile(code, options) {\n if (!code) return \"\";\n options = options || {};\n var insertions = [];\n function getOffset(offset) {\n for(var i = 0, l = insertions.length; i < l; i++){\n var insertion = insertions[i];\n if (insertion[0] >= offset) break;\n offset += insertion[1];\n }\n return offset;\n }\n function getCode(node) {\n return code.substring(getOffset(node.range[0]), getOffset(node.range[1]));\n }\n function getBetween(left, right) {\n return code.substring(getOffset(left.range[1]), getOffset(right.range[0]));\n }\n function replaceCode(node, str) {\n var start = getOffset(node.range[0]), end = getOffset(node.range[1]), insert = 0;\n for(var i = insertions.length - 1; i >= 0; i--)if (start > insertions[i][0]) {\n insert = i + 1;\n break;\n }\n insertions.splice(insert, 0, [\n start,\n str.length - end + start\n ]);\n code = code.substring(0, start) + str + code.substring(end);\n }\n function handleOverloading(node, parent) {\n switch(node.type){\n case \"UnaryExpression\":\n if (node.operator in unaryOperators && node.argument.type !== \"Literal\") {\n var arg = getCode(node.argument);\n replaceCode(node, '$__(\"' + node.operator + '\", ' + arg + \")\");\n }\n break;\n case \"BinaryExpression\":\n if (node.operator in binaryOperators && node.left.type !== \"Literal\") {\n var left = getCode(node.left), right = getCode(node.right), between = getBetween(node.left, node.right), operator = node.operator;\n replaceCode(node, \"__$__(\" + left + \",\" + between.replace(new RegExp(\"\\\\\" + operator), '\"' + operator + '\"') + \", \" + right + \")\");\n }\n break;\n case \"UpdateExpression\":\n case \"AssignmentExpression\":\n var parentType = parent && parent.type;\n if (!(parentType === \"ForStatement\" || parentType === \"BinaryExpression\" && /^[=!<>]/.test(parent.operator) || parentType === \"MemberExpression\" && parent.computed)) {\n if (node.type === \"UpdateExpression\") {\n var arg = getCode(node.argument), exp = \"__$__(\" + arg + ', \"' + node.operator[0] + '\", 1)', str = arg + \" = \" + exp;\n if (node.prefix) str = \"(\" + str + \")\";\n else if (parentType === \"AssignmentExpression\" || parentType === \"VariableDeclarator\" || parentType === \"BinaryExpression\") {\n if (getCode(parent.left || parent.id) === arg) str = exp;\n str = arg + \"; \" + str;\n }\n replaceCode(node, str);\n } else if (/^.=$/.test(node.operator) && node.left.type !== \"Literal\") {\n var left = getCode(node.left), right = getCode(node.right), exp = left + \" = __$__(\" + left + ', \"' + node.operator[0] + '\", ' + right + \")\";\n replaceCode(node, /^\\(.*\\)$/.test(getCode(node)) ? \"(\" + exp + \")\" : exp);\n }\n }\n break;\n }\n }\n function handleExports(node) {\n switch(node.type){\n case \"ExportDefaultDeclaration\":\n replaceCode({\n range: [\n node.start,\n node.declaration.start\n ]\n }, \"module.exports = \");\n break;\n case \"ExportNamedDeclaration\":\n var declaration = node.declaration;\n var specifiers = node.specifiers;\n if (declaration) {\n var declarations = declaration.declarations;\n if (declarations) {\n declarations.forEach(function(dec) {\n replaceCode(dec, \"module.exports.\" + getCode(dec));\n });\n replaceCode({\n range: [\n node.start,\n declaration.start + declaration.kind.length\n ]\n }, \"\");\n }\n } else if (specifiers) {\n var exports = specifiers.map(function(specifier) {\n var name = getCode(specifier);\n return \"module.exports.\" + name + \" = \" + name + \"; \";\n }).join(\"\");\n if (exports) replaceCode(node, exports);\n }\n break;\n }\n }\n function walkAST(node, parent, paperFeatures) {\n if (node) {\n for(var key in node)if (key !== \"range\" && key !== \"loc\") {\n var value = node[key];\n if (Array.isArray(value)) for(var i = 0, l = value.length; i < l; i++)walkAST(value[i], node, paperFeatures);\n else if (value && typeof value === \"object\") walkAST(value, node, paperFeatures);\n }\n if (paperFeatures.operatorOverloading !== false) handleOverloading(node, parent);\n if (paperFeatures.moduleExports !== false) handleExports(node);\n }\n }\n function encodeVLQ(value) {\n var res = \"\", base64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n value = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n while(value || !res){\n var next = value & 31;\n value >>= 5;\n if (value) next |= 32;\n res += base64[next];\n }\n return res;\n }\n var url = options.url || \"\", sourceMaps = options.sourceMaps, paperFeatures = options.paperFeatures || {}, source = options.source || code, offset = options.offset || 0, agent = paper.agent, version = agent.versionNumber, offsetCode = false, lineBreaks = /\\r\\n|\\n|\\r/mg, map;\n if (sourceMaps && (agent.chrome && version >= 30 || agent.webkit && version >= 537.76 || agent.firefox && version >= 23 || agent.node)) {\n if (agent.node) offset -= 2;\n else if (window && url && !window.location.href.indexOf(url)) {\n var html = document.getElementsByTagName(\"html\")[0].innerHTML;\n offset = html.substr(0, html.indexOf(code) + 1).match(lineBreaks).length + 1;\n }\n offsetCode = offset > 0 && !(agent.chrome && version >= 36 || agent.safari && version >= 600 || agent.firefox && version >= 40 || agent.node);\n var mappings = [\n \"AA\" + encodeVLQ(offsetCode ? 0 : offset) + \"A\"\n ];\n mappings.length = (code.match(lineBreaks) || []).length + 1 + (offsetCode ? offset : 0);\n map = {\n version: 3,\n file: url,\n names: [],\n mappings: mappings.join(\";AACA\"),\n sourceRoot: \"\",\n sources: [\n url\n ],\n sourcesContent: [\n source\n ]\n };\n }\n if (paperFeatures.operatorOverloading !== false || paperFeatures.moduleExports !== false) walkAST(parse(code, {\n ranges: true,\n preserveParens: true,\n sourceType: \"module\"\n }), null, paperFeatures);\n if (map) {\n if (offsetCode) code = new Array(offset + 1).join(\"\\n\") + code;\n if (/^(inline|both)$/.test(sourceMaps)) code += \"\\n//# sourceMappingURL=data:application/json;base64,\" + self1.btoa(unescape(encodeURIComponent(JSON.stringify(map))));\n code += \"\\n//# sourceURL=\" + (url || \"paperscript\");\n }\n return {\n url: url,\n source: source,\n code: code,\n map: map\n };\n }\n function execute(code, scope, options) {\n paper = scope;\n var view = scope.getView(), tool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/.test(code) && !/\\bnew\\s+Tool\\b/.test(code) ? new Tool() : null, toolHandlers = tool ? tool._events : [], handlers = [\n \"onFrame\",\n \"onResize\"\n ].concat(toolHandlers), params = [], args = [], func, compiled = typeof code === \"object\" ? code : compile(code, options);\n code = compiled.code;\n function expose(scope, hidden) {\n for(var key in scope)if ((hidden || !/^_/.test(key)) && new RegExp(\"([\\\\b\\\\s\\\\W]|^)\" + key.replace(/\\$/g, \"\\\\$\") + \"\\\\b\").test(code)) {\n params.push(key);\n args.push(scope[key]);\n }\n }\n expose({\n __$__: __$__,\n $__: $__,\n paper: scope,\n tool: tool\n }, true);\n expose(scope);\n code = \"var module = { exports: {} }; \" + code;\n var exports = Base.each(handlers, function(key) {\n if (new RegExp(\"\\\\s+\" + key + \"\\\\b\").test(code)) {\n params.push(key);\n this.push(\"module.exports.\" + key + \" = \" + key + \";\");\n }\n }, []).join(\"\\n\");\n if (exports) code += \"\\n\" + exports;\n code += \"\\nreturn module.exports;\";\n var agent = paper.agent;\n if (document && (agent.chrome || agent.firefox && agent.versionNumber < 40)) {\n var script = document.createElement(\"script\"), head = document.head || document.getElementsByTagName(\"head\")[0];\n if (agent.firefox) code = \"\\n\" + code;\n script.appendChild(document.createTextNode(\"document.__paperscript__ = function(\" + params + \") {\" + code + \"\\n}\"));\n head.appendChild(script);\n func = document.__paperscript__;\n delete document.__paperscript__;\n head.removeChild(script);\n } else func = Function(params, code);\n var exports = func && func.apply(scope, args);\n var obj = exports || {};\n Base.each(toolHandlers, function(key) {\n var value = obj[key];\n if (value) tool[key] = value;\n });\n if (view) {\n if (obj.onResize) view.setOnResize(obj.onResize);\n view.emit(\"resize\", {\n size: view.size,\n delta: new Point()\n });\n if (obj.onFrame) view.setOnFrame(obj.onFrame);\n view.requestUpdate();\n }\n return exports;\n }\n function loadScript(script) {\n if (/^text\\/(?:x-|)paperscript$/.test(script.type) && PaperScope.getAttribute(script, \"ignore\") !== \"true\") {\n var canvasId = PaperScope.getAttribute(script, \"canvas\"), canvas = document.getElementById(canvasId), src = script.src || script.getAttribute(\"data-src\"), async = PaperScope.hasAttribute(script, \"async\"), scopeAttribute = \"data-paper-scope\";\n if (!canvas) throw new Error('Unable to find canvas with id \"' + canvasId + '\"');\n var scope = PaperScope.get(canvas.getAttribute(scopeAttribute)) || new PaperScope().setup(canvas);\n canvas.setAttribute(scopeAttribute, scope._id);\n if (src) Http.request({\n url: src,\n async: async,\n mimeType: \"text/plain\",\n onLoad: function(code) {\n execute(code, scope, src);\n }\n });\n else execute(script.innerHTML, scope, script.baseURI);\n script.setAttribute(\"data-paper-ignore\", \"true\");\n return scope;\n }\n }\n function loadAll() {\n Base.each(document && document.getElementsByTagName(\"script\"), loadScript);\n }\n function load(script) {\n return script ? loadScript(script) : loadAll();\n }\n if (window) {\n if (document.readyState === \"complete\") setTimeout(loadAll);\n else DomEvent.add(window, {\n load: loadAll\n });\n }\n return {\n compile: compile,\n execute: execute,\n load: load,\n parse: parse,\n calculateBinary: __$__,\n calculateUnary: $__\n };\n }).call(this);\n var paper = new (PaperScope.inject(Base.exports, {\n Base: Base,\n Numerical: Numerical,\n Key: Key,\n DomEvent: DomEvent,\n DomElement: DomElement,\n document: document,\n window: window,\n Symbol: SymbolDefinition,\n PlacedSymbol: SymbolItem\n }))();\n if (paper.agent.node) (parcelRequire(\"gFNhN\"))(paper);\n if (typeof define === \"function\" && define.amd) define(\"paper\", paper);\n else if (module) module.exports = paper;\n return paper;\n}).call(this, typeof self === \"object\" ? self : null);\n\n});\nparcelRegister(\"gFNhN\", function(module, exports) {\n\"use strict\";\n\n});\n\nparcelRegister(\"7bbl5\", function(module, exports) {\n\n$parcel$export(module.exports, \"isIdentifierStart\", function () { return $f0e98b2c23d58ac9$export$56b48cc5d7560ffb; });\n$parcel$export(module.exports, \"isIdentifierChar\", function () { return $f0e98b2c23d58ac9$export$332f4d7bee38db93; });\n$parcel$export(module.exports, \"TokenType\", function () { return $f0e98b2c23d58ac9$export$f435f793048e7a0f; });\n$parcel$export(module.exports, \"keywordTypes\", function () { return $f0e98b2c23d58ac9$export$d53f8326294b31d8; });\n$parcel$export(module.exports, \"tokTypes\", function () { return $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8; });\n$parcel$export(module.exports, \"lineBreak\", function () { return $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6; });\n$parcel$export(module.exports, \"lineBreakG\", function () { return $f0e98b2c23d58ac9$export$866e20207bbc41f2; });\n$parcel$export(module.exports, \"isNewLine\", function () { return $f0e98b2c23d58ac9$export$2c19a3e3b4008fff; });\n$parcel$export(module.exports, \"nonASCIIwhitespace\", function () { return $f0e98b2c23d58ac9$export$268622f0f1cbc82b; });\n$parcel$export(module.exports, \"Position\", function () { return $f0e98b2c23d58ac9$export$13807d9ee5a34a42; });\n$parcel$export(module.exports, \"SourceLocation\", function () { return $f0e98b2c23d58ac9$export$7387db7caf96fcdb; });\n$parcel$export(module.exports, \"getLineInfo\", function () { return $f0e98b2c23d58ac9$export$7af82191547c5ff7; });\n$parcel$export(module.exports, \"defaultOptions\", function () { return $f0e98b2c23d58ac9$export$ba43bf67f3d48107; });\n$parcel$export(module.exports, \"Parser\", function () { return $f0e98b2c23d58ac9$export$7acfa6ed01010e37; });\n$parcel$export(module.exports, \"TokContext\", function () { return $f0e98b2c23d58ac9$export$68e7b4c4d99215d9; });\n$parcel$export(module.exports, \"tokContexts\", function () { return $f0e98b2c23d58ac9$export$2b5f701edfbd6f00; });\n$parcel$export(module.exports, \"Node\", function () { return $f0e98b2c23d58ac9$export$85c928794f8d04d4; });\n$parcel$export(module.exports, \"Token\", function () { return $f0e98b2c23d58ac9$export$50792b0e93539fde; });\n$parcel$export(module.exports, \"version\", function () { return $f0e98b2c23d58ac9$export$83d89fbfd8236492; });\n$parcel$export(module.exports, \"parse\", function () { return $f0e98b2c23d58ac9$export$98e6a39c04603d36; });\n$parcel$export(module.exports, \"parseExpressionAt\", function () { return $f0e98b2c23d58ac9$export$61f24eb03dd7ce92; });\n$parcel$export(module.exports, \"tokenizer\", function () { return $f0e98b2c23d58ac9$export$5f8c09e3ae6f64e1; });\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$astralIdentifierCodes = [\n 509,\n 0,\n 227,\n 0,\n 150,\n 4,\n 294,\n 9,\n 1368,\n 2,\n 2,\n 1,\n 6,\n 3,\n 41,\n 2,\n 5,\n 0,\n 166,\n 1,\n 574,\n 3,\n 9,\n 9,\n 370,\n 1,\n 81,\n 2,\n 71,\n 10,\n 50,\n 3,\n 123,\n 2,\n 54,\n 14,\n 32,\n 10,\n 3,\n 1,\n 11,\n 3,\n 46,\n 10,\n 8,\n 0,\n 46,\n 9,\n 7,\n 2,\n 37,\n 13,\n 2,\n 9,\n 6,\n 1,\n 45,\n 0,\n 13,\n 2,\n 49,\n 13,\n 9,\n 3,\n 2,\n 11,\n 83,\n 11,\n 7,\n 0,\n 3,\n 0,\n 158,\n 11,\n 6,\n 9,\n 7,\n 3,\n 56,\n 1,\n 2,\n 6,\n 3,\n 1,\n 3,\n 2,\n 10,\n 0,\n 11,\n 1,\n 3,\n 6,\n 4,\n 4,\n 193,\n 17,\n 10,\n 9,\n 5,\n 0,\n 82,\n 19,\n 13,\n 9,\n 214,\n 6,\n 3,\n 8,\n 28,\n 1,\n 83,\n 16,\n 16,\n 9,\n 82,\n 12,\n 9,\n 9,\n 84,\n 14,\n 5,\n 9,\n 243,\n 14,\n 166,\n 9,\n 71,\n 5,\n 2,\n 1,\n 3,\n 3,\n 2,\n 0,\n 2,\n 1,\n 13,\n 9,\n 120,\n 6,\n 3,\n 6,\n 4,\n 0,\n 29,\n 9,\n 41,\n 6,\n 2,\n 3,\n 9,\n 0,\n 10,\n 10,\n 47,\n 15,\n 406,\n 7,\n 2,\n 7,\n 17,\n 9,\n 57,\n 21,\n 2,\n 13,\n 123,\n 5,\n 4,\n 0,\n 2,\n 1,\n 2,\n 6,\n 2,\n 0,\n 9,\n 9,\n 49,\n 4,\n 2,\n 1,\n 2,\n 4,\n 9,\n 9,\n 330,\n 3,\n 10,\n 1,\n 2,\n 0,\n 49,\n 6,\n 4,\n 4,\n 14,\n 9,\n 5351,\n 0,\n 7,\n 14,\n 13835,\n 9,\n 87,\n 9,\n 39,\n 4,\n 60,\n 6,\n 26,\n 9,\n 1014,\n 0,\n 2,\n 54,\n 8,\n 3,\n 82,\n 0,\n 12,\n 1,\n 19628,\n 1,\n 4706,\n 45,\n 3,\n 22,\n 543,\n 4,\n 4,\n 5,\n 9,\n 7,\n 3,\n 6,\n 31,\n 3,\n 149,\n 2,\n 1418,\n 49,\n 513,\n 54,\n 5,\n 49,\n 9,\n 0,\n 15,\n 0,\n 23,\n 4,\n 2,\n 14,\n 1361,\n 6,\n 2,\n 16,\n 3,\n 6,\n 2,\n 1,\n 2,\n 4,\n 101,\n 0,\n 161,\n 6,\n 10,\n 9,\n 357,\n 0,\n 62,\n 13,\n 499,\n 13,\n 983,\n 6,\n 110,\n 6,\n 6,\n 9,\n 4759,\n 9,\n 787719,\n 239\n];\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$astralIdentifierStartCodes = [\n 0,\n 11,\n 2,\n 25,\n 2,\n 18,\n 2,\n 1,\n 2,\n 14,\n 3,\n 13,\n 35,\n 122,\n 70,\n 52,\n 268,\n 28,\n 4,\n 48,\n 48,\n 31,\n 14,\n 29,\n 6,\n 37,\n 11,\n 29,\n 3,\n 35,\n 5,\n 7,\n 2,\n 4,\n 43,\n 157,\n 19,\n 35,\n 5,\n 35,\n 5,\n 39,\n 9,\n 51,\n 13,\n 10,\n 2,\n 14,\n 2,\n 6,\n 2,\n 1,\n 2,\n 10,\n 2,\n 14,\n 2,\n 6,\n 2,\n 1,\n 68,\n 310,\n 10,\n 21,\n 11,\n 7,\n 25,\n 5,\n 2,\n 41,\n 2,\n 8,\n 70,\n 5,\n 3,\n 0,\n 2,\n 43,\n 2,\n 1,\n 4,\n 0,\n 3,\n 22,\n 11,\n 22,\n 10,\n 30,\n 66,\n 18,\n 2,\n 1,\n 11,\n 21,\n 11,\n 25,\n 71,\n 55,\n 7,\n 1,\n 65,\n 0,\n 16,\n 3,\n 2,\n 2,\n 2,\n 28,\n 43,\n 28,\n 4,\n 28,\n 36,\n 7,\n 2,\n 27,\n 28,\n 53,\n 11,\n 21,\n 11,\n 18,\n 14,\n 17,\n 111,\n 72,\n 56,\n 50,\n 14,\n 50,\n 14,\n 35,\n 349,\n 41,\n 7,\n 1,\n 79,\n 28,\n 11,\n 0,\n 9,\n 21,\n 43,\n 17,\n 47,\n 20,\n 28,\n 22,\n 13,\n 52,\n 58,\n 1,\n 3,\n 0,\n 14,\n 44,\n 33,\n 24,\n 27,\n 35,\n 30,\n 0,\n 3,\n 0,\n 9,\n 34,\n 4,\n 0,\n 13,\n 47,\n 15,\n 3,\n 22,\n 0,\n 2,\n 0,\n 36,\n 17,\n 2,\n 24,\n 20,\n 1,\n 64,\n 6,\n 2,\n 0,\n 2,\n 3,\n 2,\n 14,\n 2,\n 9,\n 8,\n 46,\n 39,\n 7,\n 3,\n 1,\n 3,\n 21,\n 2,\n 6,\n 2,\n 1,\n 2,\n 4,\n 4,\n 0,\n 19,\n 0,\n 13,\n 4,\n 159,\n 52,\n 19,\n 3,\n 21,\n 2,\n 31,\n 47,\n 21,\n 1,\n 2,\n 0,\n 185,\n 46,\n 42,\n 3,\n 37,\n 47,\n 21,\n 0,\n 60,\n 42,\n 14,\n 0,\n 72,\n 26,\n 38,\n 6,\n 186,\n 43,\n 117,\n 63,\n 32,\n 7,\n 3,\n 0,\n 3,\n 7,\n 2,\n 1,\n 2,\n 23,\n 16,\n 0,\n 2,\n 0,\n 95,\n 7,\n 3,\n 38,\n 17,\n 0,\n 2,\n 0,\n 29,\n 0,\n 11,\n 39,\n 8,\n 0,\n 22,\n 0,\n 12,\n 45,\n 20,\n 0,\n 19,\n 72,\n 264,\n 8,\n 2,\n 36,\n 18,\n 0,\n 50,\n 29,\n 113,\n 6,\n 2,\n 1,\n 2,\n 37,\n 22,\n 0,\n 26,\n 5,\n 2,\n 1,\n 2,\n 31,\n 15,\n 0,\n 328,\n 18,\n 16,\n 0,\n 2,\n 12,\n 2,\n 33,\n 125,\n 0,\n 80,\n 921,\n 103,\n 110,\n 18,\n 195,\n 2637,\n 96,\n 16,\n 1071,\n 18,\n 5,\n 4026,\n 582,\n 8634,\n 568,\n 8,\n 30,\n 18,\n 78,\n 18,\n 29,\n 19,\n 47,\n 17,\n 3,\n 32,\n 20,\n 6,\n 18,\n 689,\n 63,\n 129,\n 74,\n 6,\n 0,\n 67,\n 12,\n 65,\n 1,\n 2,\n 0,\n 29,\n 6135,\n 9,\n 1237,\n 43,\n 8,\n 8936,\n 3,\n 2,\n 6,\n 2,\n 1,\n 2,\n 290,\n 16,\n 0,\n 30,\n 2,\n 3,\n 0,\n 15,\n 3,\n 9,\n 395,\n 2309,\n 106,\n 6,\n 12,\n 4,\n 8,\n 8,\n 9,\n 5991,\n 84,\n 2,\n 70,\n 2,\n 1,\n 3,\n 0,\n 3,\n 1,\n 3,\n 3,\n 2,\n 11,\n 2,\n 0,\n 2,\n 6,\n 2,\n 64,\n 2,\n 3,\n 3,\n 7,\n 2,\n 6,\n 2,\n 27,\n 2,\n 3,\n 2,\n 4,\n 2,\n 0,\n 4,\n 6,\n 2,\n 339,\n 3,\n 24,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 30,\n 2,\n 24,\n 2,\n 7,\n 1845,\n 30,\n 7,\n 5,\n 262,\n 61,\n 147,\n 44,\n 11,\n 6,\n 17,\n 0,\n 322,\n 29,\n 19,\n 43,\n 485,\n 27,\n 757,\n 6,\n 2,\n 3,\n 2,\n 1,\n 2,\n 14,\n 2,\n 196,\n 60,\n 67,\n 8,\n 0,\n 1205,\n 3,\n 2,\n 26,\n 2,\n 1,\n 2,\n 0,\n 3,\n 0,\n 2,\n 9,\n 2,\n 3,\n 2,\n 0,\n 2,\n 0,\n 7,\n 0,\n 5,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 2,\n 2,\n 1,\n 2,\n 0,\n 3,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 0,\n 2,\n 1,\n 2,\n 0,\n 3,\n 3,\n 2,\n 6,\n 2,\n 3,\n 2,\n 3,\n 2,\n 0,\n 2,\n 9,\n 2,\n 16,\n 6,\n 2,\n 2,\n 4,\n 2,\n 16,\n 4421,\n 42719,\n 33,\n 4153,\n 7,\n 221,\n 3,\n 5761,\n 15,\n 7472,\n 3104,\n 541,\n 1507,\n 4938,\n 6,\n 4191\n];\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifierChars = \"\\u200C\\u200D\\xb7\\u0300-\\u036F\\u0387\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u0669\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u06F0-\\u06F9\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07C0-\\u07C9\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096F\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09E6-\\u09EF\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A66-\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AE6-\\u0AEF\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B66-\\u0B6F\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0CE6-\\u0CEF\\u0CF3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D66-\\u0D6F\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0E50-\\u0E59\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECE\\u0ED0-\\u0ED9\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1040-\\u1049\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F-\\u109D\\u135D-\\u135F\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u180F-\\u1819\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u194F\\u19D0-\\u19DA\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BB0-\\u1BB9\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1C40-\\u1C49\\u1C50-\\u1C59\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u203F\\u2040\\u2054\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA620-\\uA629\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8D0-\\uA8D9\\uA8E0-\\uA8F1\\uA8FF-\\uA909\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9D0-\\uA9D9\\uA9E5\\uA9F0-\\uA9F9\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA50-\\uAA59\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF10-\\uFF19\\uFF3F\";\n// This file was generated. Do not modify manually!\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2118-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309B-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC\";\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n// Reserved word lists for various dialects of the language\nvar $f0e98b2c23d58ac9$var$reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n// And the keywords\nvar $f0e98b2c23d58ac9$var$ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\nvar $f0e98b2c23d58ac9$var$keywords$1 = {\n 5: $f0e98b2c23d58ac9$var$ecma5AndLessKeywords,\n \"5module\": $f0e98b2c23d58ac9$var$ecma5AndLessKeywords + \" export import\",\n 6: $f0e98b2c23d58ac9$var$ecma5AndLessKeywords + \" const class extends export import super\"\n};\nvar $f0e98b2c23d58ac9$var$keywordRelationalOperator = /^in(stanceof)?$/;\n// ## Character categories\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifierStart = new RegExp(\"[\" + $f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars + \"]\");\nvar $f0e98b2c23d58ac9$var$nonASCIIidentifier = new RegExp(\"[\" + $f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars + $f0e98b2c23d58ac9$var$nonASCIIidentifierChars + \"]\");\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction $f0e98b2c23d58ac9$var$isInAstralSet(code, set) {\n var pos = 0x10000;\n for(var i = 0; i < set.length; i += 2){\n pos += set[i];\n if (pos > code) return false;\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n// Test whether a given character code starts an identifier.\nfunction $f0e98b2c23d58ac9$export$56b48cc5d7560ffb(code, astral) {\n if (code < 65) return code === 36;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code <= 0xffff) return code >= 0xaa && $f0e98b2c23d58ac9$var$nonASCIIidentifierStart.test(String.fromCharCode(code));\n if (astral === false) return false;\n return $f0e98b2c23d58ac9$var$isInAstralSet(code, $f0e98b2c23d58ac9$var$astralIdentifierStartCodes);\n}\n// Test whether a given character is part of an identifier.\nfunction $f0e98b2c23d58ac9$export$332f4d7bee38db93(code, astral) {\n if (code < 48) return code === 36;\n if (code < 58) return true;\n if (code < 65) return false;\n if (code < 91) return true;\n if (code < 97) return code === 95;\n if (code < 123) return true;\n if (code <= 0xffff) return code >= 0xaa && $f0e98b2c23d58ac9$var$nonASCIIidentifier.test(String.fromCharCode(code));\n if (astral === false) return false;\n return $f0e98b2c23d58ac9$var$isInAstralSet(code, $f0e98b2c23d58ac9$var$astralIdentifierStartCodes) || $f0e98b2c23d58ac9$var$isInAstralSet(code, $f0e98b2c23d58ac9$var$astralIdentifierCodes);\n}\n// ## Token types\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\nvar $f0e98b2c23d58ac9$export$f435f793048e7a0f = function TokenType(label, conf) {\n if (conf === void 0) conf = {};\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\nfunction $f0e98b2c23d58ac9$var$binop(name, prec) {\n return new $f0e98b2c23d58ac9$export$f435f793048e7a0f(name, {\n beforeExpr: true,\n binop: prec\n });\n}\nvar $f0e98b2c23d58ac9$var$beforeExpr = {\n beforeExpr: true\n}, $f0e98b2c23d58ac9$var$startsExpr = {\n startsExpr: true\n};\n// Map keyword names to token types.\nvar $f0e98b2c23d58ac9$export$d53f8326294b31d8 = {};\n// Succinct definitions of keyword token types\nfunction $f0e98b2c23d58ac9$var$kw(name, options) {\n if (options === void 0) options = {};\n options.keyword = name;\n return $f0e98b2c23d58ac9$export$d53f8326294b31d8[name] = new $f0e98b2c23d58ac9$export$f435f793048e7a0f(name, options);\n}\nvar $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8 = {\n num: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"num\", $f0e98b2c23d58ac9$var$startsExpr),\n regexp: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"regexp\", $f0e98b2c23d58ac9$var$startsExpr),\n string: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"string\", $f0e98b2c23d58ac9$var$startsExpr),\n name: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"name\", $f0e98b2c23d58ac9$var$startsExpr),\n privateId: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"privateId\", $f0e98b2c23d58ac9$var$startsExpr),\n eof: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"eof\"),\n // Punctuation token types.\n bracketL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"[\", {\n beforeExpr: true,\n startsExpr: true\n }),\n bracketR: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"]\"),\n braceL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"{\", {\n beforeExpr: true,\n startsExpr: true\n }),\n braceR: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"}\"),\n parenL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"(\", {\n beforeExpr: true,\n startsExpr: true\n }),\n parenR: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\")\"),\n comma: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\",\", $f0e98b2c23d58ac9$var$beforeExpr),\n semi: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\";\", $f0e98b2c23d58ac9$var$beforeExpr),\n colon: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\":\", $f0e98b2c23d58ac9$var$beforeExpr),\n dot: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\".\"),\n question: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"?\", $f0e98b2c23d58ac9$var$beforeExpr),\n questionDot: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"?.\"),\n arrow: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"=>\", $f0e98b2c23d58ac9$var$beforeExpr),\n template: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"template\"),\n invalidTemplate: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"invalidTemplate\"),\n ellipsis: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"...\", $f0e98b2c23d58ac9$var$beforeExpr),\n backQuote: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"`\", $f0e98b2c23d58ac9$var$startsExpr),\n dollarBraceL: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"${\", {\n beforeExpr: true,\n startsExpr: true\n }),\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n eq: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"=\", {\n beforeExpr: true,\n isAssign: true\n }),\n assign: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"_=\", {\n beforeExpr: true,\n isAssign: true\n }),\n incDec: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"++/--\", {\n prefix: true,\n postfix: true,\n startsExpr: true\n }),\n prefix: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"!/~\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n logicalOR: $f0e98b2c23d58ac9$var$binop(\"||\", 1),\n logicalAND: $f0e98b2c23d58ac9$var$binop(\"&&\", 2),\n bitwiseOR: $f0e98b2c23d58ac9$var$binop(\"|\", 3),\n bitwiseXOR: $f0e98b2c23d58ac9$var$binop(\"^\", 4),\n bitwiseAND: $f0e98b2c23d58ac9$var$binop(\"&\", 5),\n equality: $f0e98b2c23d58ac9$var$binop(\"==/!=/===/!==\", 6),\n relational: $f0e98b2c23d58ac9$var$binop(\"/<=/>=\", 7),\n bitShift: $f0e98b2c23d58ac9$var$binop(\"<>/>>>\", 8),\n plusMin: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"+/-\", {\n beforeExpr: true,\n binop: 9,\n prefix: true,\n startsExpr: true\n }),\n modulo: $f0e98b2c23d58ac9$var$binop(\"%\", 10),\n star: $f0e98b2c23d58ac9$var$binop(\"*\", 10),\n slash: $f0e98b2c23d58ac9$var$binop(\"/\", 10),\n starstar: new $f0e98b2c23d58ac9$export$f435f793048e7a0f(\"**\", {\n beforeExpr: true\n }),\n coalesce: $f0e98b2c23d58ac9$var$binop(\"??\", 1),\n // Keyword token types.\n _break: $f0e98b2c23d58ac9$var$kw(\"break\"),\n _case: $f0e98b2c23d58ac9$var$kw(\"case\", $f0e98b2c23d58ac9$var$beforeExpr),\n _catch: $f0e98b2c23d58ac9$var$kw(\"catch\"),\n _continue: $f0e98b2c23d58ac9$var$kw(\"continue\"),\n _debugger: $f0e98b2c23d58ac9$var$kw(\"debugger\"),\n _default: $f0e98b2c23d58ac9$var$kw(\"default\", $f0e98b2c23d58ac9$var$beforeExpr),\n _do: $f0e98b2c23d58ac9$var$kw(\"do\", {\n isLoop: true,\n beforeExpr: true\n }),\n _else: $f0e98b2c23d58ac9$var$kw(\"else\", $f0e98b2c23d58ac9$var$beforeExpr),\n _finally: $f0e98b2c23d58ac9$var$kw(\"finally\"),\n _for: $f0e98b2c23d58ac9$var$kw(\"for\", {\n isLoop: true\n }),\n _function: $f0e98b2c23d58ac9$var$kw(\"function\", $f0e98b2c23d58ac9$var$startsExpr),\n _if: $f0e98b2c23d58ac9$var$kw(\"if\"),\n _return: $f0e98b2c23d58ac9$var$kw(\"return\", $f0e98b2c23d58ac9$var$beforeExpr),\n _switch: $f0e98b2c23d58ac9$var$kw(\"switch\"),\n _throw: $f0e98b2c23d58ac9$var$kw(\"throw\", $f0e98b2c23d58ac9$var$beforeExpr),\n _try: $f0e98b2c23d58ac9$var$kw(\"try\"),\n _var: $f0e98b2c23d58ac9$var$kw(\"var\"),\n _const: $f0e98b2c23d58ac9$var$kw(\"const\"),\n _while: $f0e98b2c23d58ac9$var$kw(\"while\", {\n isLoop: true\n }),\n _with: $f0e98b2c23d58ac9$var$kw(\"with\"),\n _new: $f0e98b2c23d58ac9$var$kw(\"new\", {\n beforeExpr: true,\n startsExpr: true\n }),\n _this: $f0e98b2c23d58ac9$var$kw(\"this\", $f0e98b2c23d58ac9$var$startsExpr),\n _super: $f0e98b2c23d58ac9$var$kw(\"super\", $f0e98b2c23d58ac9$var$startsExpr),\n _class: $f0e98b2c23d58ac9$var$kw(\"class\", $f0e98b2c23d58ac9$var$startsExpr),\n _extends: $f0e98b2c23d58ac9$var$kw(\"extends\", $f0e98b2c23d58ac9$var$beforeExpr),\n _export: $f0e98b2c23d58ac9$var$kw(\"export\"),\n _import: $f0e98b2c23d58ac9$var$kw(\"import\", $f0e98b2c23d58ac9$var$startsExpr),\n _null: $f0e98b2c23d58ac9$var$kw(\"null\", $f0e98b2c23d58ac9$var$startsExpr),\n _true: $f0e98b2c23d58ac9$var$kw(\"true\", $f0e98b2c23d58ac9$var$startsExpr),\n _false: $f0e98b2c23d58ac9$var$kw(\"false\", $f0e98b2c23d58ac9$var$startsExpr),\n _in: $f0e98b2c23d58ac9$var$kw(\"in\", {\n beforeExpr: true,\n binop: 7\n }),\n _instanceof: $f0e98b2c23d58ac9$var$kw(\"instanceof\", {\n beforeExpr: true,\n binop: 7\n }),\n _typeof: $f0e98b2c23d58ac9$var$kw(\"typeof\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n _void: $f0e98b2c23d58ac9$var$kw(\"void\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n }),\n _delete: $f0e98b2c23d58ac9$var$kw(\"delete\", {\n beforeExpr: true,\n prefix: true,\n startsExpr: true\n })\n};\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\nvar $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6 = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar $f0e98b2c23d58ac9$export$866e20207bbc41f2 = new RegExp($f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.source, \"g\");\nfunction $f0e98b2c23d58ac9$export$2c19a3e3b4008fff(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029;\n}\nfunction $f0e98b2c23d58ac9$var$nextLineBreak(code, from, end) {\n if (end === void 0) end = code.length;\n for(var i = from; i < end; i++){\n var next = code.charCodeAt(i);\n if ($f0e98b2c23d58ac9$export$2c19a3e3b4008fff(next)) return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1;\n }\n return -1;\n}\nvar $f0e98b2c23d58ac9$export$268622f0f1cbc82b = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\nvar $f0e98b2c23d58ac9$var$skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\nvar $f0e98b2c23d58ac9$var$ref = Object.prototype;\nvar $f0e98b2c23d58ac9$var$hasOwnProperty = $f0e98b2c23d58ac9$var$ref.hasOwnProperty;\nvar $f0e98b2c23d58ac9$var$toString = $f0e98b2c23d58ac9$var$ref.toString;\nvar $f0e98b2c23d58ac9$var$hasOwn = Object.hasOwn || function(obj, propName) {\n return $f0e98b2c23d58ac9$var$hasOwnProperty.call(obj, propName);\n};\nvar $f0e98b2c23d58ac9$var$isArray = Array.isArray || function(obj) {\n return $f0e98b2c23d58ac9$var$toString.call(obj) === \"[object Array]\";\n};\nfunction $f0e98b2c23d58ac9$var$wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\");\n}\nfunction $f0e98b2c23d58ac9$var$codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) return String.fromCharCode(code);\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00);\n}\nvar $f0e98b2c23d58ac9$var$loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\nvar $f0e98b2c23d58ac9$export$13807d9ee5a34a42 = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n$f0e98b2c23d58ac9$export$13807d9ee5a34a42.prototype.offset = function offset(n) {\n return new $f0e98b2c23d58ac9$export$13807d9ee5a34a42(this.line, this.column + n);\n};\nvar $f0e98b2c23d58ac9$export$7387db7caf96fcdb = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) this.source = p.sourceFile;\n};\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\nfunction $f0e98b2c23d58ac9$export$7af82191547c5ff7(input, offset) {\n for(var line = 1, cur = 0;;){\n var nextBreak = $f0e98b2c23d58ac9$var$nextLineBreak(input, cur, offset);\n if (nextBreak < 0) return new $f0e98b2c23d58ac9$export$13807d9ee5a34a42(line, offset - cur);\n ++line;\n cur = nextBreak;\n }\n}\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\nvar $f0e98b2c23d58ac9$export$ba43bf67f3d48107 = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n// Interpret and default an options object\nvar $f0e98b2c23d58ac9$var$warnedAboutEcmaVersion = false;\nfunction $f0e98b2c23d58ac9$var$getOptions(opts) {\n var options = {};\n for(var opt in $f0e98b2c23d58ac9$export$ba43bf67f3d48107)options[opt] = opts && $f0e98b2c23d58ac9$var$hasOwn(opts, opt) ? opts[opt] : $f0e98b2c23d58ac9$export$ba43bf67f3d48107[opt];\n if (options.ecmaVersion === \"latest\") options.ecmaVersion = 1e8;\n else if (options.ecmaVersion == null) {\n if (!$f0e98b2c23d58ac9$var$warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n $f0e98b2c23d58ac9$var$warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) options.ecmaVersion -= 2009;\n if (options.allowReserved == null) options.allowReserved = options.ecmaVersion < 5;\n if (!opts || opts.allowHashBang == null) options.allowHashBang = options.ecmaVersion >= 14;\n if ($f0e98b2c23d58ac9$var$isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function(token) {\n return tokens.push(token);\n };\n }\n if ($f0e98b2c23d58ac9$var$isArray(options.onComment)) options.onComment = $f0e98b2c23d58ac9$var$pushComment(options, options.onComment);\n return options;\n}\nfunction $f0e98b2c23d58ac9$var$pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations) comment.loc = new $f0e98b2c23d58ac9$export$7387db7caf96fcdb(this, startLoc, endLoc);\n if (options.ranges) comment.range = [\n start,\n end\n ];\n array.push(comment);\n };\n}\n// Each scope gets a bitset that may contain these flags\nvar $f0e98b2c23d58ac9$var$SCOPE_TOP = 1, $f0e98b2c23d58ac9$var$SCOPE_FUNCTION = 2, $f0e98b2c23d58ac9$var$SCOPE_ASYNC = 4, $f0e98b2c23d58ac9$var$SCOPE_GENERATOR = 8, $f0e98b2c23d58ac9$var$SCOPE_ARROW = 16, $f0e98b2c23d58ac9$var$SCOPE_SIMPLE_CATCH = 32, $f0e98b2c23d58ac9$var$SCOPE_SUPER = 64, $f0e98b2c23d58ac9$var$SCOPE_DIRECT_SUPER = 128, $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK = 256, $f0e98b2c23d58ac9$var$SCOPE_VAR = $f0e98b2c23d58ac9$var$SCOPE_TOP | $f0e98b2c23d58ac9$var$SCOPE_FUNCTION | $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK;\nfunction $f0e98b2c23d58ac9$var$functionFlags(async, generator) {\n return $f0e98b2c23d58ac9$var$SCOPE_FUNCTION | (async ? $f0e98b2c23d58ac9$var$SCOPE_ASYNC : 0) | (generator ? $f0e98b2c23d58ac9$var$SCOPE_GENERATOR : 0);\n}\n// Used in checkLVal* and declareName to determine the type of a binding\nvar $f0e98b2c23d58ac9$var$BIND_NONE = 0, $f0e98b2c23d58ac9$var$BIND_VAR = 1, $f0e98b2c23d58ac9$var$BIND_LEXICAL = 2, $f0e98b2c23d58ac9$var$BIND_FUNCTION = 3, $f0e98b2c23d58ac9$var$BIND_SIMPLE_CATCH = 4, $f0e98b2c23d58ac9$var$BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\nvar $f0e98b2c23d58ac9$export$7acfa6ed01010e37 = function Parser(options, input, startPos) {\n this.options = options = $f0e98b2c23d58ac9$var$getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = $f0e98b2c23d58ac9$var$reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") reserved += \" await\";\n }\n this.reservedWords = $f0e98b2c23d58ac9$var$wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + $f0e98b2c23d58ac9$var$reservedWords.strict;\n this.reservedWordsStrict = $f0e98b2c23d58ac9$var$wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = $f0e98b2c23d58ac9$var$wordsRegexp(reservedStrict + \" \" + $f0e98b2c23d58ac9$var$reservedWords.strictBind);\n this.input = String(input);\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n // Set up token state\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split($f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n // Properties of the current token:\n // Its type\n this.type = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\") this.skipLineComment(2);\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope($f0e98b2c23d58ac9$var$SCOPE_TOP);\n // For RegExp validation\n this.regexpState = null;\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\nvar $f0e98b2c23d58ac9$var$prototypeAccessors = {\n inFunction: {\n configurable: true\n },\n inGenerator: {\n configurable: true\n },\n inAsync: {\n configurable: true\n },\n canAwait: {\n configurable: true\n },\n allowSuper: {\n configurable: true\n },\n allowDirectSuper: {\n configurable: true\n },\n treatFunctionsAsVar: {\n configurable: true\n },\n allowNewDotTarget: {\n configurable: true\n },\n inClassStaticBlock: {\n configurable: true\n }\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype.parse = function parse() {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node);\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inFunction.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_FUNCTION) > 0;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inGenerator.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inAsync.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.canAwait.get = function() {\n for(var i = this.scopeStack.length - 1; i >= 0; i--){\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK) return false;\n if (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_FUNCTION) return (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_ASYNC) > 0;\n }\n return this.inModule && this.options.ecmaVersion >= 13 || this.options.allowAwaitOutsideFunction;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.allowSuper.get = function() {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & $f0e98b2c23d58ac9$var$SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.allowDirectSuper.get = function() {\n return (this.currentThisScope().flags & $f0e98b2c23d58ac9$var$SCOPE_DIRECT_SUPER) > 0;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.treatFunctionsAsVar.get = function() {\n return this.treatFunctionsAsVarInScope(this.currentScope());\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.allowNewDotTarget.get = function() {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & ($f0e98b2c23d58ac9$var$SCOPE_FUNCTION | $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit;\n};\n$f0e98b2c23d58ac9$var$prototypeAccessors.inClassStaticBlock.get = function() {\n return (this.currentVarScope().flags & $f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK) > 0;\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.extend = function extend() {\n var plugins = [], len = arguments.length;\n while(len--)plugins[len] = arguments[len];\n var cls = this;\n for(var i = 0; i < plugins.length; i++)cls = plugins[i](cls);\n return cls;\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.parse = function parse(input, options) {\n return new this(options, input).parse();\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.parseExpressionAt = function parseExpressionAt(input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression();\n};\n$f0e98b2c23d58ac9$export$7acfa6ed01010e37.tokenizer = function tokenizer(input, options) {\n return new this(options, input);\n};\nObject.defineProperties($f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype, $f0e98b2c23d58ac9$var$prototypeAccessors);\nvar $f0e98b2c23d58ac9$var$pp$9 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// ## Parser utilities\nvar $f0e98b2c23d58ac9$var$literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\n$f0e98b2c23d58ac9$var$pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) return false;\n for(;;){\n // Try to find string literal.\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = start;\n start += $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input)[0].length;\n var match = $f0e98b2c23d58ac9$var$literal.exec(this.input.slice(start));\n if (!match) return false;\n if ((match[1] || match[2]) === \"use strict\") {\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" || $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(spaceAfter[0]) && !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\");\n }\n start += match[0].length;\n // Skip semicolon, if any.\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = start;\n start += $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\") start++;\n }\n};\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n$f0e98b2c23d58ac9$var$pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true;\n } else return false;\n};\n// Tests whether parsed token is a contextual keyword.\n$f0e98b2c23d58ac9$var$pp$9.isContextual = function(name) {\n return this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && this.value === name && !this.containsEsc;\n};\n// Consumes contextual keyword if possible.\n$f0e98b2c23d58ac9$var$pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) return false;\n this.next();\n return true;\n};\n// Asserts that following token is given contextual keyword.\n$f0e98b2c23d58ac9$var$pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) this.unexpected();\n};\n// Test whether a semicolon can be inserted at the current position.\n$f0e98b2c23d58ac9$var$pp$9.canInsertSemicolon = function() {\n return this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR || $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n};\n$f0e98b2c23d58ac9$var$pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon) this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc);\n return true;\n }\n};\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n$f0e98b2c23d58ac9$var$pp$9.semicolon = function() {\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) && !this.insertSemicolon()) this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma) this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc);\n if (!notNext) this.next();\n return true;\n }\n};\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n$f0e98b2c23d58ac9$var$pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n// Raise an unexpected token error.\n$f0e98b2c23d58ac9$var$pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\nvar $f0e98b2c23d58ac9$var$DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign = this.trailingComma = this.parenthesizedAssign = this.parenthesizedBind = this.doubleProto = -1;\n};\n$f0e98b2c23d58ac9$var$pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) return;\n if (refDestructuringErrors.trailingComma > -1) this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\");\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\");\n};\n$f0e98b2c23d58ac9$var$pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) return false;\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) return shorthandAssign >= 0 || doubleProto >= 0;\n if (shorthandAssign >= 0) this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\");\n if (doubleProto >= 0) this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\");\n};\n$f0e98b2c23d58ac9$var$pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos)) this.raise(this.yieldPos, \"Yield expression cannot be a default value\");\n if (this.awaitPos) this.raise(this.awaitPos, \"Await expression cannot be a default value\");\n};\n$f0e98b2c23d58ac9$var$pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\") return this.isSimpleAssignTarget(expr.expression);\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\";\n};\nvar $f0e98b2c23d58ac9$var$pp$8 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// ### Statement parsing\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n$f0e98b2c23d58ac9$var$pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) node.body = [];\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof){\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule) for(var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1){\n var name = list[i];\n this.raiseRecoverable(this.undefinedExports[name].start, \"Export '\" + name + \"' is not defined\");\n }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\");\n};\nvar $f0e98b2c23d58ac9$var$loopLabel = {\n kind: \"loop\"\n}, $f0e98b2c23d58ac9$var$switchLabel = {\n kind: \"switch\"\n};\n$f0e98b2c23d58ac9$var$pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) return false;\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) return true;\n // '[', '/'\n if (context) return false;\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) return true;\n // '{', astral\n if ($f0e98b2c23d58ac9$export$56b48cc5d7560ffb(nextCh, true)) {\n var pos = next + 1;\n while($f0e98b2c23d58ac9$export$332f4d7bee38db93(nextCh = this.input.charCodeAt(pos), true))++pos;\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) return true;\n var ident = this.input.slice(next, pos);\n if (!$f0e98b2c23d58ac9$var$keywordRelationalOperator.test(ident)) return true;\n }\n return false;\n};\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\n$f0e98b2c23d58ac9$var$pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\")) return false;\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !$f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.pos, next)) && this.input.slice(next, next + 8) === \"function\" && (next + 8 === this.input.length || !($f0e98b2c23d58ac9$export$332f4d7bee38db93(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00));\n};\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n$f0e98b2c23d58ac9$var$pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n if (this.isLet(context)) {\n starttype = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var;\n kind = \"let\";\n }\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n switch(starttype){\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._break:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._continue:\n return this.parseBreakContinueStatement(node, starttype.keyword);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._debugger:\n return this.parseDebuggerStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._do:\n return this.parseDoStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._for:\n return this.parseForStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if (context && (this.strict || context !== \"if\" && context !== \"label\") && this.options.ecmaVersion >= 6) this.unexpected();\n return this.parseFunctionStatement(node, false, !context);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class:\n if (context) this.unexpected();\n return this.parseClass(node, true);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._if:\n return this.parseIfStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._return:\n return this.parseReturnStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._switch:\n return this.parseSwitchStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._throw:\n return this.parseThrowStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._try:\n return this.parseTryStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._const:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") this.unexpected();\n return this.parseVarStatement(node, kind);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._while:\n return this.parseWhileStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._with:\n return this.parseWithStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL:\n return this.parseBlock(true, node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi:\n return this.parseEmptyStatement(node);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._export:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import:\n if (this.options.ecmaVersion > 10 && starttype === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import) {\n $f0e98b2c23d58ac9$var$skipWhiteSpace.lastIndex = this.pos;\n var skip = $f0e98b2c23d58ac9$var$skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) return this.parseExpressionStatement(node, this.parseExpression());\n }\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel) this.raise(this.start, \"'import' and 'export' may only appear at the top level\");\n if (!this.inModule) this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\");\n }\n return starttype === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import ? this.parseImport(node) : this.parseExport(node, exports);\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) this.unexpected();\n this.next();\n return this.parseFunctionStatement(node, true, !context);\n }\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && expr.type === \"Identifier\" && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon)) return this.parseLabeledStatement(node, maybeName, expr, context);\n else return this.parseExpressionStatement(node, expr);\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) || this.insertSemicolon()) node.label = null;\n else if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) this.unexpected();\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for(; i < this.labels.length; ++i){\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n if (node.label && isBreak) break;\n }\n }\n if (i === this.labels.length) this.raise(node.start, \"Unsyntactic \" + keyword);\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push($f0e98b2c23d58ac9$var$loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6) this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi);\n else this.semicolon();\n return this.finishNode(node, \"DoWhileStatement\");\n};\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n$f0e98b2c23d58ac9$var$pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\") ? this.lastTokStart : -1;\n this.labels.push($f0e98b2c23d58ac9$var$loopLabel);\n this.enterScope(0);\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, null);\n }\n var isLet = this.isLet();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\")) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else node.await = awaitAt > -1;\n }\n return this.parseForIn(node, init$1);\n }\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, init$1);\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in) {\n if (awaitAt > -1) this.unexpected(awaitAt);\n } else node.await = awaitAt > -1;\n }\n if (startsWithLet && isForOf) this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\");\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init);\n } else this.checkExpressionErrors(refDestructuringErrors, true);\n if (awaitAt > -1) this.unexpected(awaitAt);\n return this.parseFor(node, init);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, $f0e98b2c23d58ac9$var$FUNC_STATEMENT | (declarationPosition ? 0 : $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT), false, isAsync);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction) this.raise(this.start, \"'return' outside of function\");\n this.next();\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi) || this.insertSemicolon()) node.argument = null;\n else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n return this.finishNode(node, \"ReturnStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n this.labels.push($f0e98b2c23d58ac9$var$switchLabel);\n this.enterScope(0);\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n var cur;\n for(var sawDefault = false; this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR;)if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._case || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._default) {\n var isCase = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._case;\n if (cur) this.finishNode(cur, \"SwitchCase\");\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) cur.test = this.parseExpression();\n else {\n if (sawDefault) this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\");\n sawDefault = true;\n cur.test = null;\n }\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon);\n } else {\n if (!cur) this.unexpected();\n cur.consequent.push(this.parseStatement(null));\n }\n this.exitScope();\n if (cur) this.finishNode(cur, \"SwitchCase\");\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseThrowStatement = function(node) {\n this.next();\n if ($f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start))) this.raise(this.lastTokEnd, \"Illegal newline after throw\");\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\");\n};\n// Reused empty array added for node fields that are always empty.\nvar $f0e98b2c23d58ac9$var$empty$1 = [];\n$f0e98b2c23d58ac9$var$pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? $f0e98b2c23d58ac9$var$SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? $f0e98b2c23d58ac9$var$BIND_SIMPLE_CATCH : $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n return param;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL)) clause.param = this.parseCatchClauseParam();\n else {\n if (this.options.ecmaVersion < 10) this.unexpected();\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer) this.raise(node.start, \"Missing catch or finally clause\");\n return this.finishNode(node, \"TryStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push($f0e98b2c23d58ac9$var$loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseWithStatement = function(node) {\n if (this.strict) this.raise(this.start, \"'with' in strict mode\");\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for(var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1){\n var label = list[i$1];\n if (label.name === maybeName) this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n }\n var kind = this.type.isLoop ? \"loop\" : this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._switch ? \"switch\" : null;\n for(var i = this.labels.length - 1; i >= 0; i--){\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else break;\n }\n this.labels.push({\n name: maybeName,\n kind: kind,\n statementStart: this.start\n });\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\");\n};\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n$f0e98b2c23d58ac9$var$pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if (createNewLexicalScope === void 0) createNewLexicalScope = true;\n if (node === void 0) node = this.startNode();\n node.body = [];\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n if (createNewLexicalScope) this.enterScope(0);\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR){\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) this.strict = false;\n this.next();\n if (createNewLexicalScope) this.exitScope();\n return this.finishNode(node, \"BlockStatement\");\n};\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n$f0e98b2c23d58ac9$var$pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi);\n node.test = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi ? null : this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi);\n node.update = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR ? null : this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\");\n};\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n$f0e98b2c23d58ac9$var$pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in;\n this.next();\n if (init.type === \"VariableDeclaration\" && init.declarations[0].init != null && (!isForIn || this.options.ecmaVersion < 8 || this.strict || init.kind !== \"var\" || init.declarations[0].id.type !== \"Identifier\")) this.raise(init.start, (isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\");\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\");\n};\n// Parse a list of variable declarations.\n$f0e98b2c23d58ac9$var$pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for(;;){\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq)) decl.init = this.parseMaybeAssign(isFor);\n else if (!allowMissingInitializer && kind === \"const\" && !(this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) this.unexpected();\n else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in || this.isContextual(\"of\")))) this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n else decl.init = null;\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma)) break;\n }\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? $f0e98b2c23d58ac9$var$BIND_VAR : $f0e98b2c23d58ac9$var$BIND_LEXICAL, false);\n};\nvar $f0e98b2c23d58ac9$var$FUNC_STATEMENT = 1, $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT = 2, $f0e98b2c23d58ac9$var$FUNC_NULLABLE_ID = 4;\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n$f0e98b2c23d58ac9$var$pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star && statement & $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT) this.unexpected();\n node.generator = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n }\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n if (statement & $f0e98b2c23d58ac9$var$FUNC_STATEMENT) {\n node.id = statement & $f0e98b2c23d58ac9$var$FUNC_NULLABLE_ID && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name ? null : this.parseIdent();\n if (node.id && !(statement & $f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT)) this.checkLValSimple(node.id, this.strict || node.generator || node.async ? this.treatFunctionsAsVar ? $f0e98b2c23d58ac9$var$BIND_VAR : $f0e98b2c23d58ac9$var$BIND_LEXICAL : $f0e98b2c23d58ac9$var$BIND_FUNCTION);\n }\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope($f0e98b2c23d58ac9$var$functionFlags(node.async, node.generator));\n if (!(statement & $f0e98b2c23d58ac9$var$FUNC_STATEMENT)) node.id = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name ? this.parseIdent() : null;\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, statement & $f0e98b2c23d58ac9$var$FUNC_STATEMENT ? \"FunctionDeclaration\" : \"FunctionExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseFunctionParams = function(node) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n node.params = this.parseBindingList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n$f0e98b2c23d58ac9$var$pp$8.parseClass = function(node, isStatement) {\n this.next();\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR){\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\");\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && $f0e98b2c23d58ac9$var$isPrivateNameConflicted(privateNameMap, element)) this.raiseRecoverable(element.key.start, \"Identifier '#\" + element.key.name + \"' has already been declared\");\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi)) return null;\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL)) {\n this.parseClassStaticBlock(node);\n return node;\n }\n if (this.isClassElementNameStart() || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) isStatic = true;\n else keyName = \"static\";\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) && !this.canInsertSemicolon()) isAsync = true;\n else keyName = \"async\";\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star)) isGenerator = true;\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) kind = lastValue;\n else keyName = lastValue;\n }\n }\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else this.parseClassElementName(node);\n // Parse element value\n if (ecmaVersion < 13 || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && $f0e98b2c23d58ac9$var$checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") this.raise(node.key.start, \"Constructor can't have get/set modifier\");\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else this.parseClassField(node);\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$8.isClassElementNameStart = function() {\n return this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL || this.type.keyword;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassElementName = function(element) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId) {\n if (this.value === \"constructor\") this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else this.parsePropertyName(element);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) this.raise(key.start, \"Constructor can't be a generator\");\n if (isAsync) this.raise(key.start, \"Constructor can't be an async method\");\n } else if (method.static && $f0e98b2c23d58ac9$var$checkKeyName(method, \"prototype\")) this.raise(key.start, \"Classes may not have a static property named prototype\");\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0) this.raiseRecoverable(value.start, \"getter should have no params\");\n if (method.kind === \"set\" && value.params.length !== 1) this.raiseRecoverable(value.start, \"setter should have exactly one param\");\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\") this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\");\n return this.finishNode(method, \"MethodDefinition\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassField = function(field) {\n if ($f0e98b2c23d58ac9$var$checkKeyName(field, \"constructor\")) this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n else if (field.static && $f0e98b2c23d58ac9$var$checkKeyName(field, \"prototype\")) this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else field.value = null;\n this.semicolon();\n return this.finishNode(field, \"PropertyDefinition\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope($f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK | $f0e98b2c23d58ac9$var$SCOPE_SUPER);\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR){\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n return this.finishNode(node, \"StaticBlock\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassId = function(node, isStatement) {\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) {\n node.id = this.parseIdent();\n if (isStatement) this.checkLValSimple(node.id, $f0e98b2c23d58ac9$var$BIND_LEXICAL, false);\n } else {\n if (isStatement === true) this.unexpected();\n node.id = null;\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n$f0e98b2c23d58ac9$var$pp$8.enterClassBody = function() {\n var element = {\n declared: Object.create(null),\n used: []\n };\n this.privateNameStack.push(element);\n return element.declared;\n};\n$f0e98b2c23d58ac9$var$pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) return;\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for(var i = 0; i < used.length; ++i){\n var id = used[i];\n if (!$f0e98b2c23d58ac9$var$hasOwn(declared, id.name)) {\n if (parent) parent.used.push(id);\n else this.raiseRecoverable(id.start, \"Private field '#\" + id.name + \"' must be declared in an enclosing class\");\n }\n }\n};\nfunction $f0e98b2c23d58ac9$var$isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) next = (element.static ? \"s\" : \"i\") + element.kind;\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (curr === \"iget\" && next === \"iset\" || curr === \"iset\" && next === \"iget\" || curr === \"sget\" && next === \"sset\" || curr === \"sset\" && next === \"sget\") {\n privateNameMap[name] = \"true\";\n return false;\n } else if (!curr) {\n privateNameMap[name] = next;\n return false;\n } else return true;\n}\nfunction $f0e98b2c23d58ac9$var$checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (key.type === \"Identifier\" && key.name === name || key.type === \"Literal\" && key.value === name);\n}\n// Parses module export declaration.\n$f0e98b2c23d58ac9$var$pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else node.exported = null;\n }\n this.expectContextual(\"from\");\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) this.unexpected();\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star)) return this.parseExportAllDeclaration(node, exports);\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._default)) {\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\");\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\") this.checkVariableExport(exports, node.declaration.declarations);\n else this.checkExport(exports, node.declaration.id, node.declaration.id.start);\n node.specifiers = [];\n node.source = null;\n } else {\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) this.unexpected();\n node.source = this.parseExprAtom();\n } else {\n for(var i = 0, list = node.specifiers; i < list.length; i += 1){\n // check for keywords used as local names\n var spec = list[i];\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n if (spec.local.type === \"Literal\") this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null);\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) this.next();\n return this.parseFunction(fNode, $f0e98b2c23d58ac9$var$FUNC_STATEMENT | $f0e98b2c23d58ac9$var$FUNC_NULLABLE_ID, false, isAsync);\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\");\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration;\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.checkExport = function(exports, name, pos) {\n if (!exports) return;\n if (typeof name !== \"string\") name = name.type === \"Identifier\" ? name.name : name.value;\n if ($f0e98b2c23d58ac9$var$hasOwn(exports, name)) this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\");\n exports[name] = true;\n};\n$f0e98b2c23d58ac9$var$pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\") this.checkExport(exports, pat, pat.start);\n else if (type === \"ObjectPattern\") for(var i = 0, list = pat.properties; i < list.length; i += 1){\n var prop = list[i];\n this.checkPatternExport(exports, prop);\n }\n else if (type === \"ArrayPattern\") for(var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1){\n var elt = list$1[i$1];\n if (elt) this.checkPatternExport(exports, elt);\n }\n else if (type === \"Property\") this.checkPatternExport(exports, pat.value);\n else if (type === \"AssignmentPattern\") this.checkPatternExport(exports, pat.left);\n else if (type === \"RestElement\") this.checkPatternExport(exports, pat.argument);\n else if (type === \"ParenthesizedExpression\") this.checkPatternExport(exports, pat.expression);\n};\n$f0e98b2c23d58ac9$var$pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) return;\n for(var i = 0, list = decls; i < list.length; i += 1){\n var decl = list[i];\n this.checkPatternExport(exports, decl.id);\n }\n};\n$f0e98b2c23d58ac9$var$pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" || this.type.keyword === \"const\" || this.type.keyword === \"class\" || this.type.keyword === \"function\" || this.isLet() || this.isAsyncFunction();\n};\n// Parses a comma-separated list of module exports.\n$f0e98b2c23d58ac9$var$pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(exports, node.exported, node.exported.start);\n return this.finishNode(node, \"ExportSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n while(!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes;\n};\n// Parses import declaration.\n$f0e98b2c23d58ac9$var$pp$8.parseImport = function(node) {\n this.next();\n // import '...'\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) {\n node.specifiers = $f0e98b2c23d58ac9$var$empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\");\n};\n// Parses a comma-separated list of module imports.\n$f0e98b2c23d58ac9$var$pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n if (this.eatContextual(\"as\")) node.local = this.parseIdent();\n else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, $f0e98b2c23d58ac9$var$BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\");\n};\n$f0e98b2c23d58ac9$var$pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma)) return nodes;\n }\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes;\n }\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL);\n while(!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n nodes.push(this.parseImportSpecifier());\n }\n return nodes;\n};\n$f0e98b2c23d58ac9$var$pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if ($f0e98b2c23d58ac9$var$loneSurrogate.test(stringLiteral.value)) this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n return stringLiteral;\n }\n return this.parseIdent(true);\n};\n// Set `ExpressionStatement#directive` property for directive prologues.\n$f0e98b2c23d58ac9$var$pp$8.adaptDirectivePrologue = function(statements) {\n for(var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i)statements[i].directive = statements[i].expression.raw.slice(1, -1);\n};\n$f0e98b2c23d58ac9$var$pp$8.isDirectiveCandidate = function(statement) {\n return this.options.ecmaVersion >= 5 && statement.type === \"ExpressionStatement\" && statement.expression.type === \"Literal\" && typeof statement.expression.value === \"string\" && // Reject parenthesized strings.\n (this.input[statement.start] === '\"' || this.input[statement.start] === \"'\");\n};\nvar $f0e98b2c23d58ac9$var$pp$7 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// Convert existing expression atom to assignable pattern\n// if possible.\n$f0e98b2c23d58ac9$var$pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) switch(node.type){\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\") this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\");\n break;\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break;\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n for(var i = 0, list = node.properties; i < list.length; i += 1){\n var prop = list[i];\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (prop.type === \"RestElement\" && (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")) this.raise(prop.argument.start, \"Unexpected token\");\n }\n break;\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") this.raise(node.key.start, \"Object pattern can't contain getter or setter\");\n this.toAssignable(node.value, isBinding);\n break;\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n this.toAssignableList(node.elements, isBinding);\n break;\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\") this.raise(node.argument.start, \"Rest elements cannot have a default value\");\n break;\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\");\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break;\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break;\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break;\n case \"MemberExpression\":\n if (!isBinding) break;\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n else if (refDestructuringErrors) this.checkPatternErrors(refDestructuringErrors, true);\n return node;\n};\n// Convert list of expression atoms to binding list.\n$f0e98b2c23d58ac9$var$pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for(var i = 0; i < end; i++){\n var elt = exprList[i];\n if (elt) this.toAssignable(elt, isBinding);\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\") this.unexpected(last.argument.start);\n }\n return exprList;\n};\n// Parses spread element.\n$f0e98b2c23d58ac9$var$pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\");\n};\n$f0e98b2c23d58ac9$var$pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) this.unexpected();\n node.argument = this.parseBindingAtom();\n return this.finishNode(node, \"RestElement\");\n};\n// Parses lvalue (assignable) atom.\n$f0e98b2c23d58ac9$var$pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) switch(this.type){\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL:\n return this.parseObj(true);\n }\n return this.parseIdent();\n};\n$f0e98b2c23d58ac9$var$pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while(!this.eat(close)){\n if (first) first = false;\n else this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (allowEmpty && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) elts.push(null);\n else if (allowTrailingComma && this.afterTrailingComma(close)) break;\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n this.expect(close);\n break;\n } else elts.push(this.parseAssignableListItem(allowModifiers));\n }\n return elts;\n};\n$f0e98b2c23d58ac9$var$pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem;\n};\n$f0e98b2c23d58ac9$var$pp$7.parseBindingListItem = function(param) {\n return param;\n};\n// Parses assignment pattern around given atom if possible.\n$f0e98b2c23d58ac9$var$pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq)) return left;\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\");\n};\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n$f0e98b2c23d58ac9$var$pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $f0e98b2c23d58ac9$var$BIND_NONE;\n var isBind = bindingType !== $f0e98b2c23d58ac9$var$BIND_NONE;\n switch(expr.type){\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name)) this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\");\n if (isBind) {\n if (bindingType === $f0e98b2c23d58ac9$var$BIND_LEXICAL && expr.name === \"let\") this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\");\n if (checkClashes) {\n if ($f0e98b2c23d58ac9$var$hasOwn(checkClashes, expr.name)) this.raiseRecoverable(expr.start, \"Argument name clash\");\n checkClashes[expr.name] = true;\n }\n if (bindingType !== $f0e98b2c23d58ac9$var$BIND_OUTSIDE) this.declareName(expr.name, bindingType, expr.start);\n }\n break;\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break;\n case \"MemberExpression\":\n if (isBind) this.raiseRecoverable(expr.start, \"Binding member expression\");\n break;\n case \"ParenthesizedExpression\":\n if (isBind) this.raiseRecoverable(expr.start, \"Binding parenthesized expression\");\n return this.checkLValSimple(expr.expression, bindingType, checkClashes);\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n$f0e98b2c23d58ac9$var$pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $f0e98b2c23d58ac9$var$BIND_NONE;\n switch(expr.type){\n case \"ObjectPattern\":\n for(var i = 0, list = expr.properties; i < list.length; i += 1){\n var prop = list[i];\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break;\n case \"ArrayPattern\":\n for(var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1){\n var elem = list$1[i$1];\n if (elem) this.checkLValInnerPattern(elem, bindingType, checkClashes);\n }\n break;\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n$f0e98b2c23d58ac9$var$pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if (bindingType === void 0) bindingType = $f0e98b2c23d58ac9$var$BIND_NONE;\n switch(expr.type){\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break;\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break;\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break;\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\nvar $f0e98b2c23d58ac9$export$68e7b4c4d99215d9 = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\nvar $f0e98b2c23d58ac9$export$2b5f701edfbd6f00 = {\n b_stat: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"{\", false),\n b_expr: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"{\", true),\n b_tmpl: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"${\", false),\n p_stat: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"(\", false),\n p_expr: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"(\", true),\n q_tmpl: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"`\", true, true, function(p) {\n return p.tryReadTemplateToken();\n }),\n f_stat: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", false),\n f_expr: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", true),\n f_expr_gen: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", true, false, null, true),\n f_gen: new $f0e98b2c23d58ac9$export$68e7b4c4d99215d9(\"function\", false, false, null, true)\n};\nvar $f0e98b2c23d58ac9$var$pp$6 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n$f0e98b2c23d58ac9$var$pp$6.initialContext = function() {\n return [\n $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat\n ];\n};\n$f0e98b2c23d58ac9$var$pp$6.curContext = function() {\n return this.context[this.context.length - 1];\n};\n$f0e98b2c23d58ac9$var$pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr || parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_stat) return true;\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon && (parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat || parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_expr)) return !parent.isExpr;\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._return || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && this.exprAllowed) return $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._else || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow) return true;\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL) return parent === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat;\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._var || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._const || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) return false;\n return !this.exprAllowed;\n};\n$f0e98b2c23d58ac9$var$pp$6.inGeneratorContext = function() {\n for(var i = this.context.length - 1; i >= 1; i--){\n var context = this.context[i];\n if (context.token === \"function\") return context.generator;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot) this.exprAllowed = false;\n else if (update = type.updateContext) update.call(this, prevType);\n else this.exprAllowed = type.beforeExpr;\n};\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n$f0e98b2c23d58ac9$var$pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) this.context[this.context.length - 1] = tokenCtx;\n};\n// Token-specific context update code\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR.updateContext = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return;\n }\n var out = this.context.pop();\n if (out === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat && this.curContext().token === \"function\") out = this.context.pop();\n this.exprAllowed = !out.isExpr;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat : $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_expr);\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dollarBraceL.updateContext = function() {\n this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_tmpl);\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL.updateContext = function(prevType) {\n var statementParens = prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._if || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._for || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._with || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._while;\n this.context.push(statementParens ? $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.p_stat : $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.p_expr);\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.incDec.updateContext = function() {\n// tokExprAllowed stays unchanged\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function.updateContext = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._else && !(prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi && this.curContext() !== $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.p_stat) && !(prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._return && $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start))) && !((prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon || prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL) && this.curContext() === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_stat)) this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr);\n else this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_stat);\n this.exprAllowed = false;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote.updateContext = function() {\n if (this.curContext() === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.q_tmpl) this.context.pop();\n else this.context.push($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.q_tmpl);\n this.exprAllowed = false;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star.updateContext = function(prevType) {\n if (prevType === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function) {\n var index = this.context.length - 1;\n if (this.context[index] === $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr) this.context[index] = $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr_gen;\n else this.context[index] = $f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_gen;\n }\n this.exprAllowed = true;\n};\n$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot) {\n if (this.value === \"of\" && !this.exprAllowed || this.value === \"yield\" && this.inGeneratorContext()) allowed = true;\n }\n this.exprAllowed = allowed;\n};\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\nvar $f0e98b2c23d58ac9$var$pp$5 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n$f0e98b2c23d58ac9$var$pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\") return;\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand)) return;\n var key = prop.key;\n var name;\n switch(key.type){\n case \"Identifier\":\n name = key.name;\n break;\n case \"Literal\":\n name = String(key.value);\n break;\n default:\n return;\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) refDestructuringErrors.doubleProto = key.start;\n } else this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n propHash.proto = true;\n }\n return;\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") redefinition = this.strict && other.init || other.get || other.set;\n else redefinition = other.init || other[kind];\n if (redefinition) this.raiseRecoverable(key.start, \"Redefinition of property\");\n } else other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n other[kind] = true;\n};\n// ### Expression parsing\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n$f0e98b2c23d58ac9$var$pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [\n expr\n ];\n while(this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma))node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors));\n return this.finishNode(node, \"SequenceExpression\");\n }\n return expr;\n};\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n$f0e98b2c23d58ac9$var$pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) return this.parseYield(forInit);\n else this.exprAllowed = false;\n }\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors;\n ownDestructuringErrors = true;\n }\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) left = afterLeftParse.call(this, left, startPos, startLoc);\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq) left = this.toAssignable(left, false, refDestructuringErrors);\n if (!ownDestructuringErrors) refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n if (refDestructuringErrors.shorthandAssign >= left.start) refDestructuringErrors.shorthandAssign = -1;\n // reset because shorthand default was used correctly\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq) this.checkLValPattern(left);\n else this.checkLValSimple(left);\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) refDestructuringErrors.doubleProto = oldDoubleProto;\n return this.finishNode(node, \"AssignmentExpression\");\n } else if (ownDestructuringErrors) this.checkExpressionErrors(refDestructuringErrors, true);\n if (oldParenAssign > -1) refDestructuringErrors.parenthesizedAssign = oldParenAssign;\n if (oldTrailingComma > -1) refDestructuringErrors.trailingComma = oldTrailingComma;\n return left;\n};\n// Parse a ternary conditional (`?:`) operator.\n$f0e98b2c23d58ac9$var$pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\");\n }\n return expr;\n};\n// Start the precedence parser.\n$f0e98b2c23d58ac9$var$pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit);\n};\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n$f0e98b2c23d58ac9$var$pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in)) {\n if (prec > minPrec) {\n var logical = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalOR || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND;\n var coalesce = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.coalesce;\n if (coalesce) // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND.binop;\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if (logical && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.coalesce || coalesce && (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalOR || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND)) this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit);\n }\n }\n return left;\n};\n$f0e98b2c23d58ac9$var$pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") this.raise(right.start, \"Private identifier can only be left side of binary expression\");\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\");\n};\n// Parse unary operators, both prefix and postfix.\n$f0e98b2c23d58ac9$var$pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) this.checkLValSimple(node.argument);\n else if (this.strict && node.operator === \"delete\" && node.argument.type === \"Identifier\") this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\");\n else if (node.operator === \"delete\" && $f0e98b2c23d58ac9$var$isPrivateFieldAccess(node.argument)) this.raiseRecoverable(node.start, \"Private fields can not be deleted\");\n else sawUnary = true;\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) this.unexpected();\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._in) this.unexpected();\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) return expr;\n while(this.type.postfix && !this.canInsertSemicolon()){\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n if (!incDec && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.starstar)) {\n if (sawUnary) this.unexpected(this.lastTokStart);\n else return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false);\n } else return expr;\n};\nfunction $f0e98b2c23d58ac9$var$isPrivateFieldAccess(node) {\n return node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" || node.type === \"ChainExpression\" && $f0e98b2c23d58ac9$var$isPrivateFieldAccess(node.expression);\n}\n// Parse call, dot, and `[]`-subscript expressions.\n$f0e98b2c23d58ac9$var$pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\") return expr;\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) refDestructuringErrors.parenthesizedAssign = -1;\n if (refDestructuringErrors.parenthesizedBind >= result.start) refDestructuringErrors.parenthesizedBind = -1;\n if (refDestructuringErrors.trailingComma >= result.start) refDestructuringErrors.trailingComma = -1;\n }\n return result;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" && this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && this.potentialArrowAt === base.start;\n var optionalChained = false;\n while(true){\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n if (element.optional) optionalChained = true;\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element;\n }\n base = element;\n }\n};\n$f0e98b2c23d58ac9$var$pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow);\n};\n$f0e98b2c23d58ac9$var$pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit);\n};\n$f0e98b2c23d58ac9$var$pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.questionDot);\n if (noCalls && optional) this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\");\n var computed = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL);\n if (computed || optional && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote || this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR);\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId && base.type !== \"Super\") node.property = this.parsePrivateIdent();\n else node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n node.computed = !!computed;\n if (optionalSupported) node.optional = optional;\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL)) {\n var refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0) this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\");\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit);\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) node$1.optional = optional;\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote) {\n if (optional || optionalChained) this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({\n isTagged: true\n });\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base;\n};\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n$f0e98b2c23d58ac9$var$pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.slash) this.readRegexp();\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch(this.type){\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._super:\n if (!this.allowSuper) this.raise(this.start, \"'super' keyword outside a method\");\n node = this.startNode();\n this.next();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL && !this.allowDirectSuper) this.raise(node.start, \"super() call outside constructor of a subclass\");\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL) this.unexpected();\n return this.finishNode(node, \"Super\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function)) {\n this.overrideContext($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit);\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow)) return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [\n id\n ], false, forInit);\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name && !containsEsc && (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow)) this.unexpected();\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [\n id\n ], true, forInit);\n }\n }\n return id;\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {\n pattern: value.pattern,\n flags: value.flags\n };\n return node;\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string:\n return this.parseLiteral(this.value);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._null:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._true:\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._false:\n node = this.startNode();\n node.value = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._null ? null : this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr)) refDestructuringErrors.parenthesizedAssign = start;\n if (refDestructuringErrors.parenthesizedBind < 0) refDestructuringErrors.parenthesizedBind = start;\n }\n return expr;\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\");\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL:\n this.overrideContext($f0e98b2c23d58ac9$export$2b5f701edfbd6f00.b_expr);\n return this.parseObj(false, refDestructuringErrors);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._class:\n return this.parseClass(this.startNode(), false);\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._new:\n return this.parseNew();\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote:\n return this.parseTemplate();\n case $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8._import:\n if (this.options.ecmaVersion >= 11) return this.parseExprImport(forNew);\n else return this.unexpected();\n default:\n return this.parseExprAtomDefault();\n }\n};\n$f0e98b2c23d58ac9$var$pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword import\");\n var meta = this.parseIdent(true);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL && !forNew) return this.parseDynamicImport(node);\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot) {\n node.meta = meta;\n return this.parseImportMeta(node);\n } else this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n // Verify ending.\n if (!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR)) {\n var errorPos = this.start;\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR)) this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n else this.unexpected(errorPos);\n }\n return this.finishNode(node, \"ImportExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"meta\") this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\");\n if (containsEsc) this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\");\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere) this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\");\n return this.finishNode(node, \"MetaProperty\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\");\n this.next();\n return this.finishNode(node, \"Literal\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenExpression = function() {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n var val = this.parseExpression();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n return val;\n};\n$f0e98b2c23d58ac9$var$pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon();\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new $f0e98b2c23d58ac9$var$DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while(this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR){\n first ? first = false : this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (allowTrailingComma && this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, true)) {\n lastIsComma = true;\n break;\n } else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n break;\n } else exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR);\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit);\n }\n if (!exprList.length || lastIsComma) this.unexpected(this.lastTokStart);\n if (spreadStart) this.unexpected(spreadStart);\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else val = exprList[0];\n } else val = this.parseParenExpression();\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\");\n } else return val;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenItem = function(item) {\n return item;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit);\n};\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\nvar $f0e98b2c23d58ac9$var$empty = [];\n$f0e98b2c23d58ac9$var$pp$5.parseNew = function() {\n if (this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword new\");\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\") this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\");\n if (containsEsc) this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\");\n if (!this.allowNewDotTarget) this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\");\n return this.finishNode(node, \"MetaProperty\");\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL)) node.arguments = this.parseExprList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, this.options.ecmaVersion >= 8, false);\n else node.arguments = $f0e98b2c23d58ac9$var$empty;\n return this.finishNode(node, \"NewExpression\");\n};\n// Parse template expression.\n$f0e98b2c23d58ac9$var$pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n var elem = this.startNode();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.invalidTemplate) {\n if (!isTagged) this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n this.next();\n elem.tail = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.backQuote;\n return this.finishNode(elem, \"TemplateElement\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseTemplate = function(ref) {\n if (ref === void 0) ref = {};\n var isTagged = ref.isTagged;\n if (isTagged === void 0) isTagged = false;\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({\n isTagged: isTagged\n });\n node.quasis = [\n curElt\n ];\n while(!curElt.tail){\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof) this.raise(this.pos, \"Unterminated template literal\");\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({\n isTagged: isTagged\n }));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\");\n};\n$f0e98b2c23d58ac9$var$pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" && (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL || this.type.keyword || this.options.ecmaVersion >= 9 && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star) && !$f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.start));\n};\n// Parse an object literal or binding pattern.\n$f0e98b2c23d58ac9$var$pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while(!this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR)) break;\n } else first = false;\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) this.checkPropClash(prop, propHash, refDestructuringErrors);\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n return this.finishNode(prop, \"RestElement\");\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) refDestructuringErrors.trailingComma = this.start;\n // Finish\n return this.finishNode(prop, \"SpreadElement\");\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern) isGenerator = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n this.parsePropertyName(prop);\n } else isAsync = false;\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\") this.raiseRecoverable(start, \"getter should have no params\");\n else this.raiseRecoverable(start, \"setter should have exactly one param\");\n } else if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\") this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon) this.unexpected();\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL) {\n if (isPattern) this.unexpected();\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc && this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" && (prop.key.name === \"get\" || prop.key.name === \"set\") && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceR && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq) {\n if (isGenerator || isAsync) this.unexpected();\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) this.unexpected();\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos) this.awaitIdentPos = startPos;\n prop.kind = \"init\";\n if (isPattern) prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0) refDestructuringErrors.shorthandAssign = this.start;\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else prop.value = this.copyNode(prop.key);\n prop.shorthand = true;\n } else this.unexpected();\n};\n$f0e98b2c23d58ac9$var$pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bracketR);\n return prop.key;\n } else prop.computed = false;\n }\n return prop.key = this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.num || this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n};\n// Initialize empty function node.\n$f0e98b2c23d58ac9$var$pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) node.generator = node.expression = false;\n if (this.options.ecmaVersion >= 8) node.async = false;\n};\n// Parse object or class method.\n$f0e98b2c23d58ac9$var$pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6) node.generator = isGenerator;\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope($f0e98b2c23d58ac9$var$functionFlags(isAsync, node.generator) | $f0e98b2c23d58ac9$var$SCOPE_SUPER | (allowDirectSuper ? $f0e98b2c23d58ac9$var$SCOPE_DIRECT_SUPER : 0));\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenL);\n node.params = this.parseBindingList($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\");\n};\n// Parse arrow function expression with given parameters.\n$f0e98b2c23d58ac9$var$pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.enterScope($f0e98b2c23d58ac9$var$functionFlags(isAsync, false) | $f0e98b2c23d58ac9$var$SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) node.async = !!isAsync;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\");\n};\n// Parse function body and check parameters.\n$f0e98b2c23d58ac9$var$pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.braceL;\n var oldStrict = this.strict, useStrict = false;\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple) this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\");\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) this.strict = true;\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) this.checkLValSimple(node.id, $f0e98b2c23d58ac9$var$BIND_OUTSIDE);\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n$f0e98b2c23d58ac9$var$pp$5.isSimpleParamList = function(params) {\n for(var i = 0, list = params; i < list.length; i += 1){\n var param = list[i];\n if (param.type !== \"Identifier\") return false;\n }\n return true;\n};\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n$f0e98b2c23d58ac9$var$pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for(var i = 0, list = node.params; i < list.length; i += 1){\n var param = list[i];\n this.checkLValInnerPattern(param, $f0e98b2c23d58ac9$var$BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n$f0e98b2c23d58ac9$var$pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while(!this.eat(close)){\n if (!first) {\n this.expect($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) break;\n } else first = false;\n var elt = void 0;\n if (allowEmpty && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma) elt = null;\n else if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.comma && refDestructuringErrors.trailingComma < 0) refDestructuringErrors.trailingComma = this.start;\n } else elt = this.parseMaybeAssign(false, refDestructuringErrors);\n elts.push(elt);\n }\n return elts;\n};\n$f0e98b2c23d58ac9$var$pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n if (this.inGenerator && name === \"yield\") this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\");\n if (this.inAsync && name === \"await\") this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\");\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\") this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\");\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\")) this.raise(start, \"Cannot use \" + name + \" in class static initialization block\");\n if (this.keywords.test(name)) this.raise(start, \"Unexpected keyword '\" + name + \"'\");\n if (this.options.ecmaVersion < 6 && this.input.slice(start, end).indexOf(\"\\\\\") !== -1) return;\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\") this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\");\n this.raiseRecoverable(start, \"The keyword '\" + name + \"' is reserved\");\n }\n};\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n$f0e98b2c23d58ac9$var$pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos) this.awaitIdentPos = node.start;\n }\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.name) node.name = this.value;\n else if (this.type.keyword) {\n node.name = this.type.keyword;\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") && (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) this.context.pop();\n } else this.unexpected();\n return node;\n};\n$f0e98b2c23d58ac9$var$pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.privateId) node.name = this.value;\n else this.unexpected();\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) this.raise(node.start, \"Private field '#\" + node.name + \"' must be declared in an enclosing class\");\n else this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n return node;\n};\n// Parses yield expression inside generator.\n$f0e98b2c23d58ac9$var$pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) this.yieldPos = this.start;\n var node = this.startNode();\n this.next();\n if (this.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.semi || this.canInsertSemicolon() || this.type !== $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star && !this.type.startsExpr) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\");\n};\n$f0e98b2c23d58ac9$var$pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) this.awaitPos = this.start;\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\");\n};\nvar $f0e98b2c23d58ac9$var$pp$4 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n$f0e98b2c23d58ac9$var$pp$4.raise = function(pos, message) {\n var loc = $f0e98b2c23d58ac9$export$7af82191547c5ff7(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos;\n err.loc = loc;\n err.raisedAt = this.pos;\n throw err;\n};\n$f0e98b2c23d58ac9$var$pp$4.raiseRecoverable = $f0e98b2c23d58ac9$var$pp$4.raise;\n$f0e98b2c23d58ac9$var$pp$4.curPosition = function() {\n if (this.options.locations) return new $f0e98b2c23d58ac9$export$13807d9ee5a34a42(this.curLine, this.pos - this.lineStart);\n};\nvar $f0e98b2c23d58ac9$var$pp$3 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\nvar $f0e98b2c23d58ac9$var$Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n$f0e98b2c23d58ac9$var$pp$3.enterScope = function(flags) {\n this.scopeStack.push(new $f0e98b2c23d58ac9$var$Scope(flags));\n};\n$f0e98b2c23d58ac9$var$pp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\n$f0e98b2c23d58ac9$var$pp$3.treatFunctionsAsVarInScope = function(scope) {\n return scope.flags & $f0e98b2c23d58ac9$var$SCOPE_FUNCTION || !this.inModule && scope.flags & $f0e98b2c23d58ac9$var$SCOPE_TOP;\n};\n$f0e98b2c23d58ac9$var$pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === $f0e98b2c23d58ac9$var$BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && scope.flags & $f0e98b2c23d58ac9$var$SCOPE_TOP) delete this.undefinedExports[name];\n } else if (bindingType === $f0e98b2c23d58ac9$var$BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === $f0e98b2c23d58ac9$var$BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar) redeclared = scope$2.lexical.indexOf(name) > -1;\n else redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1;\n scope$2.functions.push(name);\n } else for(var i = this.scopeStack.length - 1; i >= 0; --i){\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !(scope$3.flags & $f0e98b2c23d58ac9$var$SCOPE_SIMPLE_CATCH && scope$3.lexical[0] === name) || !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break;\n }\n scope$3.var.push(name);\n if (this.inModule && scope$3.flags & $f0e98b2c23d58ac9$var$SCOPE_TOP) delete this.undefinedExports[name];\n if (scope$3.flags & $f0e98b2c23d58ac9$var$SCOPE_VAR) break;\n }\n if (redeclared) this.raiseRecoverable(pos, \"Identifier '\" + name + \"' has already been declared\");\n};\n$f0e98b2c23d58ac9$var$pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 && this.scopeStack[0].var.indexOf(id.name) === -1) this.undefinedExports[id.name] = id;\n};\n$f0e98b2c23d58ac9$var$pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1];\n};\n$f0e98b2c23d58ac9$var$pp$3.currentVarScope = function() {\n for(var i = this.scopeStack.length - 1;; i--){\n var scope = this.scopeStack[i];\n if (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_VAR) return scope;\n }\n};\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n$f0e98b2c23d58ac9$var$pp$3.currentThisScope = function() {\n for(var i = this.scopeStack.length - 1;; i--){\n var scope = this.scopeStack[i];\n if (scope.flags & $f0e98b2c23d58ac9$var$SCOPE_VAR && !(scope.flags & $f0e98b2c23d58ac9$var$SCOPE_ARROW)) return scope;\n }\n};\nvar $f0e98b2c23d58ac9$export$85c928794f8d04d4 = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations) this.loc = new $f0e98b2c23d58ac9$export$7387db7caf96fcdb(parser, loc);\n if (parser.options.directSourceFile) this.sourceFile = parser.options.directSourceFile;\n if (parser.options.ranges) this.range = [\n pos,\n 0\n ];\n};\n// Start an AST node, attaching a start offset.\nvar $f0e98b2c23d58ac9$var$pp$2 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n$f0e98b2c23d58ac9$var$pp$2.startNode = function() {\n return new $f0e98b2c23d58ac9$export$85c928794f8d04d4(this, this.start, this.startLoc);\n};\n$f0e98b2c23d58ac9$var$pp$2.startNodeAt = function(pos, loc) {\n return new $f0e98b2c23d58ac9$export$85c928794f8d04d4(this, pos, loc);\n};\n// Finish an AST node, adding `type` and `end` properties.\nfunction $f0e98b2c23d58ac9$var$finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations) node.loc.end = loc;\n if (this.options.ranges) node.range[1] = pos;\n return node;\n}\n$f0e98b2c23d58ac9$var$pp$2.finishNode = function(node, type) {\n return $f0e98b2c23d58ac9$var$finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc);\n};\n// Finish node at given position\n$f0e98b2c23d58ac9$var$pp$2.finishNodeAt = function(node, type, pos, loc) {\n return $f0e98b2c23d58ac9$var$finishNodeAt.call(this, node, type, pos, loc);\n};\n$f0e98b2c23d58ac9$var$pp$2.copyNode = function(node) {\n var newNode = new $f0e98b2c23d58ac9$export$85c928794f8d04d4(this, node.start, this.startLoc);\n for(var prop in node)newNode[prop] = node[prop];\n return newNode;\n};\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n// #table-binary-unicode-properties\nvar $f0e98b2c23d58ac9$var$ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar $f0e98b2c23d58ac9$var$ecma10BinaryProperties = $f0e98b2c23d58ac9$var$ecma9BinaryProperties + \" Extended_Pictographic\";\nvar $f0e98b2c23d58ac9$var$ecma11BinaryProperties = $f0e98b2c23d58ac9$var$ecma10BinaryProperties;\nvar $f0e98b2c23d58ac9$var$ecma12BinaryProperties = $f0e98b2c23d58ac9$var$ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar $f0e98b2c23d58ac9$var$ecma13BinaryProperties = $f0e98b2c23d58ac9$var$ecma12BinaryProperties;\nvar $f0e98b2c23d58ac9$var$ecma14BinaryProperties = $f0e98b2c23d58ac9$var$ecma13BinaryProperties;\nvar $f0e98b2c23d58ac9$var$unicodeBinaryProperties = {\n 9: $f0e98b2c23d58ac9$var$ecma9BinaryProperties,\n 10: $f0e98b2c23d58ac9$var$ecma10BinaryProperties,\n 11: $f0e98b2c23d58ac9$var$ecma11BinaryProperties,\n 12: $f0e98b2c23d58ac9$var$ecma12BinaryProperties,\n 13: $f0e98b2c23d58ac9$var$ecma13BinaryProperties,\n 14: $f0e98b2c23d58ac9$var$ecma14BinaryProperties\n};\n// #table-binary-unicode-properties-of-strings\nvar $f0e98b2c23d58ac9$var$ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\nvar $f0e98b2c23d58ac9$var$unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: $f0e98b2c23d58ac9$var$ecma14BinaryPropertiesOfStrings\n};\n// #table-unicode-general-category-values\nvar $f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n// #table-unicode-script-values\nvar $f0e98b2c23d58ac9$var$ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar $f0e98b2c23d58ac9$var$ecma10ScriptValues = $f0e98b2c23d58ac9$var$ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar $f0e98b2c23d58ac9$var$ecma11ScriptValues = $f0e98b2c23d58ac9$var$ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar $f0e98b2c23d58ac9$var$ecma12ScriptValues = $f0e98b2c23d58ac9$var$ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar $f0e98b2c23d58ac9$var$ecma13ScriptValues = $f0e98b2c23d58ac9$var$ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar $f0e98b2c23d58ac9$var$ecma14ScriptValues = $f0e98b2c23d58ac9$var$ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\nvar $f0e98b2c23d58ac9$var$unicodeScriptValues = {\n 9: $f0e98b2c23d58ac9$var$ecma9ScriptValues,\n 10: $f0e98b2c23d58ac9$var$ecma10ScriptValues,\n 11: $f0e98b2c23d58ac9$var$ecma11ScriptValues,\n 12: $f0e98b2c23d58ac9$var$ecma12ScriptValues,\n 13: $f0e98b2c23d58ac9$var$ecma13ScriptValues,\n 14: $f0e98b2c23d58ac9$var$ecma14ScriptValues\n};\nvar $f0e98b2c23d58ac9$var$data = {};\nfunction $f0e98b2c23d58ac9$var$buildUnicodeData(ecmaVersion) {\n var d = $f0e98b2c23d58ac9$var$data[ecmaVersion] = {\n binary: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeBinaryProperties[ecmaVersion] + \" \" + $f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues),\n binaryOfStrings: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues),\n Script: $f0e98b2c23d58ac9$var$wordsRegexp($f0e98b2c23d58ac9$var$unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\nfor(var $f0e98b2c23d58ac9$var$i = 0, $f0e98b2c23d58ac9$var$list = [\n 9,\n 10,\n 11,\n 12,\n 13,\n 14\n]; $f0e98b2c23d58ac9$var$i < $f0e98b2c23d58ac9$var$list.length; $f0e98b2c23d58ac9$var$i += 1){\n var $f0e98b2c23d58ac9$var$ecmaVersion = $f0e98b2c23d58ac9$var$list[$f0e98b2c23d58ac9$var$i];\n $f0e98b2c23d58ac9$var$buildUnicodeData($f0e98b2c23d58ac9$var$ecmaVersion);\n}\nvar $f0e98b2c23d58ac9$var$pp$1 = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\nvar $f0e98b2c23d58ac9$var$RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = $f0e98b2c23d58ac9$var$data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.reset = function reset(start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.raise = function raise(message) {\n this.parser.raiseRecoverable(this.start, \"Invalid regular expression: /\" + this.source + \"/: \" + message);\n};\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.at = function at(i, forceU) {\n if (forceU === void 0) forceU = false;\n var s = this.source;\n var l = s.length;\n if (i >= l) return -1;\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) return c;\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c;\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.nextIndex = function nextIndex(i, forceU) {\n if (forceU === void 0) forceU = false;\n var s = this.source;\n var l = s.length;\n if (i >= l) return l;\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l || (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) return i + 1;\n return i + 2;\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.current = function current(forceU) {\n if (forceU === void 0) forceU = false;\n return this.at(this.pos, forceU);\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.lookahead = function lookahead(forceU) {\n if (forceU === void 0) forceU = false;\n return this.at(this.nextIndex(this.pos, forceU), forceU);\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.advance = function advance(forceU) {\n if (forceU === void 0) forceU = false;\n this.pos = this.nextIndex(this.pos, forceU);\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.eat = function eat(ch, forceU) {\n if (forceU === void 0) forceU = false;\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$RegExpValidationState.prototype.eatChars = function eatChars(chs, forceU) {\n if (forceU === void 0) forceU = false;\n var pos = this.pos;\n for(var i = 0, list = chs; i < list.length; i += 1){\n var ch = list[i];\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) return false;\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true;\n};\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */ $f0e98b2c23d58ac9$var$pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n var u = false;\n var v = false;\n for(var i = 0; i < flags.length; i++){\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) this.raise(state.start, \"Invalid regular expression flag\");\n if (flags.indexOf(flag, i + 1) > -1) this.raise(state.start, \"Duplicate regular expression flag\");\n if (flag === \"u\") u = true;\n if (flag === \"v\") v = true;\n }\n if (this.options.ecmaVersion >= 15 && u && v) this.raise(state.start, \"Invalid regular expression flag\");\n};\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */ $f0e98b2c23d58ac9$var$pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n$f0e98b2c23d58ac9$var$pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n this.regexp_disjunction(state);\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */ )) state.raise(\"Unmatched ')'\");\n if (state.eat(0x5D /* ] */ ) || state.eat(0x7D /* } */ )) state.raise(\"Lone quantifier brackets\");\n }\n if (state.maxBackReference > state.numCapturingParens) state.raise(\"Invalid escape\");\n for(var i = 0, list = state.backReferenceNames; i < list.length; i += 1){\n var name = list[i];\n if (state.groupNames.indexOf(name) === -1) state.raise(\"Invalid named capture referenced\");\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n$f0e98b2c23d58ac9$var$pp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while(state.eat(0x7C /* | */ ))this.regexp_alternative(state);\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) state.raise(\"Nothing to repeat\");\n if (state.eat(0x7B /* { */ )) state.raise(\"Lone quantifier brackets\");\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n$f0e98b2c23d58ac9$var$pp$1.regexp_alternative = function(state) {\n while(state.pos < state.source.length && this.regexp_eatTerm(state));\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) // Make the same message as V8.\n {\n if (state.switchU) state.raise(\"Invalid quantifier\");\n }\n return true;\n }\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n // ^, $\n if (state.eat(0x5E /* ^ */ ) || state.eat(0x24 /* $ */ )) return true;\n // \\b \\B\n if (state.eat(0x5C /* \\ */ )) {\n if (state.eat(0x42 /* B */ ) || state.eat(0x62 /* b */ )) return true;\n state.pos = start;\n }\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */ ) && state.eat(0x3F /* ? */ )) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) lookbehind = state.eat(0x3C /* < */ );\n if (state.eat(0x3D /* = */ ) || state.eat(0x21 /* ! */ )) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */ )) state.raise(\"Unterminated group\");\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true;\n }\n }\n state.pos = start;\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatQuantifier = function(state, noError) {\n if (noError === void 0) noError = false;\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */ );\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return state.eat(0x2A /* * */ ) || state.eat(0x2B /* + */ ) || state.eat(0x3F /* ? */ ) || this.regexp_eatBracedQuantifier(state, noError);\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */ )) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */ ) && this.regexp_eatDecimalDigits(state)) max = state.lastIntValue;\n if (state.eat(0x7D /* } */ )) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) state.raise(\"numbers out of order in {} quantifier\");\n return true;\n }\n }\n if (state.switchU && !noError) state.raise(\"Incomplete quantifier\");\n state.pos = start;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatAtom = function(state) {\n return this.regexp_eatPatternCharacters(state) || state.eat(0x2E /* . */ ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state);\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatAtomEscape(state)) return true;\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */ )) {\n if (state.eat(0x3F /* ? */ ) && state.eat(0x3A /* : */ )) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */ )) return true;\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */ )) {\n if (this.options.ecmaVersion >= 9) this.regexp_groupSpecifier(state);\n else if (state.current() === 0x3F /* ? */ ) state.raise(\"Invalid group\");\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */ )) {\n state.numCapturingParens += 1;\n return true;\n }\n state.raise(\"Unterminated group\");\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatExtendedAtom = function(state) {\n return state.eat(0x2E /* . */ ) || this.regexp_eatReverseSolidusAtomEscape(state) || this.regexp_eatCharacterClass(state) || this.regexp_eatUncapturingGroup(state) || this.regexp_eatCapturingGroup(state) || this.regexp_eatInvalidBracedQuantifier(state) || this.regexp_eatExtendedPatternCharacter(state);\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) state.raise(\"Nothing to repeat\");\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isSyntaxCharacter(ch) {\n return ch === 0x24 /* $ */ || ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ || ch === 0x2E /* . */ || ch === 0x3F /* ? */ || ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ || ch >= 0x7B /* { */ && ch <= 0x7D /* } */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while((ch = state.current()) !== -1 && !$f0e98b2c23d58ac9$var$isSyntaxCharacter(ch))state.advance();\n return state.pos !== start;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (ch !== -1 && ch !== 0x24 /* $ */ && !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ) && ch !== 0x2E /* . */ && ch !== 0x3F /* ? */ && ch !== 0x5B /* [ */ && ch !== 0x5E /* ^ */ && ch !== 0x7C /* | */ ) {\n state.advance();\n return true;\n }\n return false;\n};\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\n$f0e98b2c23d58ac9$var$pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */ )) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) state.raise(\"Duplicate capture group name\");\n state.groupNames.push(state.lastStringValue);\n return;\n }\n state.raise(\"Invalid group\");\n }\n};\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */ )) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */ )) return true;\n state.raise(\"Invalid capture group name\");\n }\n return false;\n};\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(state.lastIntValue);\n while(this.regexp_eatRegExpIdentifierPart(state))state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(state.lastIntValue);\n return true;\n }\n return false;\n};\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) ch = state.lastIntValue;\n if ($f0e98b2c23d58ac9$var$isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true;\n }\n state.pos = start;\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isRegExpIdentifierStart(ch) {\n return $f0e98b2c23d58ac9$export$56b48cc5d7560ffb(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ ;\n}\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) ch = state.lastIntValue;\n if ($f0e98b2c23d58ac9$var$isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true;\n }\n state.pos = start;\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isRegExpIdentifierPart(ch) {\n return $f0e98b2c23d58ac9$export$332f4d7bee38db93(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatAtomEscape = function(state) {\n if (this.regexp_eatBackReference(state) || this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state) || state.switchN && this.regexp_eatKGroupName(state)) return true;\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */ ) state.raise(\"Invalid unicode escape\");\n state.raise(\"Invalid escape\");\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) state.maxBackReference = n;\n return true;\n }\n if (n <= state.numCapturingParens) return true;\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */ )) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true;\n }\n state.raise(\"Invalid named reference\");\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCharacterEscape = function(state) {\n return this.regexp_eatControlEscape(state) || this.regexp_eatCControlLetter(state) || this.regexp_eatZero(state) || this.regexp_eatHexEscapeSequence(state) || this.regexp_eatRegExpUnicodeEscapeSequence(state, false) || !state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state) || this.regexp_eatIdentityEscape(state);\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */ )) {\n if (this.regexp_eatControlLetter(state)) return true;\n state.pos = start;\n }\n return false;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !$f0e98b2c23d58ac9$var$isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */ ) {\n state.lastIntValue = 0x09; /* \\t */ \n state.advance();\n return true;\n }\n if (ch === 0x6E /* n */ ) {\n state.lastIntValue = 0x0A; /* \\n */ \n state.advance();\n return true;\n }\n if (ch === 0x76 /* v */ ) {\n state.lastIntValue = 0x0B; /* \\v */ \n state.advance();\n return true;\n }\n if (ch === 0x66 /* f */ ) {\n state.lastIntValue = 0x0C; /* \\f */ \n state.advance();\n return true;\n }\n if (ch === 0x72 /* r */ ) {\n state.lastIntValue = 0x0D; /* \\r */ \n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true;\n }\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isControlLetter(ch) {\n return ch >= 0x41 /* A */ && ch <= 0x5A /* Z */ || ch >= 0x61 /* a */ && ch <= 0x7A /* z */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if (forceU === void 0) forceU = false;\n var start = state.pos;\n var switchU = forceU || state.switchU;\n if (state.eat(0x75 /* u */ )) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */ ) && state.eat(0x75 /* u */ ) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true;\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true;\n }\n if (switchU && state.eat(0x7B /* { */ ) && this.regexp_eatHexDigits(state) && state.eat(0x7D /* } */ ) && $f0e98b2c23d58ac9$var$isValidUnicode(state.lastIntValue)) return true;\n if (switchU) state.raise(\"Invalid unicode escape\");\n state.pos = start;\n }\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) return true;\n if (state.eat(0x2F /* / */ )) {\n state.lastIntValue = 0x2F; /* / */ \n return true;\n }\n return false;\n }\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */ )) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */ ) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */ );\n state.advance();\n }while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ );\n return true;\n }\n return false;\n};\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar $f0e98b2c23d58ac9$var$CharSetNone = 0; // Nothing parsed\nvar $f0e98b2c23d58ac9$var$CharSetOk = 1; // Construct parsed, cannot contain strings\nvar $f0e98b2c23d58ac9$var$CharSetString = 2; // Construct parsed, can contain strings\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return $f0e98b2c23d58ac9$var$CharSetOk;\n }\n var negate = false;\n if (state.switchU && this.options.ecmaVersion >= 9 && ((negate = ch === 0x50 /* P */ ) || ch === 0x70 /* p */ )) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (state.eat(0x7B /* { */ ) && (result = this.regexp_eatUnicodePropertyValueExpression(state)) && state.eat(0x7D /* } */ )) {\n if (negate && result === $f0e98b2c23d58ac9$var$CharSetString) state.raise(\"Invalid property name\");\n return result;\n }\n state.raise(\"Invalid property name\");\n }\n return $f0e98b2c23d58ac9$var$CharSetNone;\n};\nfunction $f0e98b2c23d58ac9$var$isCharacterClassEscape(ch) {\n return ch === 0x64 /* d */ || ch === 0x44 /* D */ || ch === 0x73 /* s */ || ch === 0x53 /* S */ || ch === 0x77 /* w */ || ch === 0x57 /* W */ ;\n}\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */ )) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return $f0e98b2c23d58ac9$var$CharSetOk;\n }\n }\n state.pos = start;\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);\n }\n return $f0e98b2c23d58ac9$var$CharSetNone;\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!$f0e98b2c23d58ac9$var$hasOwn(state.unicodeProperties.nonBinary, name)) state.raise(\"Invalid property name\");\n if (!state.unicodeProperties.nonBinary[name].test(value)) state.raise(\"Invalid property value\");\n};\n$f0e98b2c23d58ac9$var$pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) return $f0e98b2c23d58ac9$var$CharSetOk;\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) return $f0e98b2c23d58ac9$var$CharSetString;\n state.raise(\"Invalid property name\");\n};\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while($f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter(ch = state.current())){\n state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\";\n};\nfunction $f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter(ch) {\n return $f0e98b2c23d58ac9$var$isControlLetter(ch) || ch === 0x5F /* _ */ ;\n}\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while($f0e98b2c23d58ac9$var$isUnicodePropertyValueCharacter(ch = state.current())){\n state.lastStringValue += $f0e98b2c23d58ac9$var$codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\";\n};\nfunction $f0e98b2c23d58ac9$var$isUnicodePropertyValueCharacter(ch) {\n return $f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter(ch) || $f0e98b2c23d58ac9$var$isDecimalDigit(ch);\n}\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state);\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */ )) {\n var negate = state.eat(0x5E /* ^ */ );\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */ )) state.raise(\"Unterminated character class\");\n if (negate && result === $f0e98b2c23d58ac9$var$CharSetString) state.raise(\"Negated character class may contain strings\");\n return true;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n$f0e98b2c23d58ac9$var$pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */ ) return $f0e98b2c23d58ac9$var$CharSetOk;\n if (state.switchV) return this.regexp_classSetExpression(state);\n this.regexp_nonEmptyClassRanges(state);\n return $f0e98b2c23d58ac9$var$CharSetOk;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n$f0e98b2c23d58ac9$var$pp$1.regexp_nonEmptyClassRanges = function(state) {\n while(this.regexp_eatClassAtom(state)){\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */ ) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) state.raise(\"Invalid character class\");\n if (left !== -1 && right !== -1 && left > right) state.raise(\"Range out of order in character class\");\n }\n }\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatClassEscape(state)) return true;\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || $f0e98b2c23d58ac9$var$isOctalDigit(ch$1)) state.raise(\"Invalid class escape\");\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n var ch = state.current();\n if (ch !== 0x5D /* ] */ ) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x62 /* b */ )) {\n state.lastIntValue = 0x08; /* */ \n return true;\n }\n if (state.switchU && state.eat(0x2D /* - */ )) {\n state.lastIntValue = 0x2D; /* - */ \n return true;\n }\n if (!state.switchU && state.eat(0x63 /* c */ )) {\n if (this.regexp_eatClassControlLetter(state)) return true;\n state.pos = start;\n }\n return this.regexp_eatCharacterClassEscape(state) || this.regexp_eatCharacterEscape(state);\n};\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\n$f0e98b2c23d58ac9$var$pp$1.regexp_classSetExpression = function(state) {\n var result = $f0e98b2c23d58ac9$var$CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ;\n else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetString;\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while(state.eatChars([\n 0x26,\n 0x26\n ])){\n if (state.current() !== 0x26 /* & */ && (subResult = this.regexp_eatClassSetOperand(state))) {\n if (subResult !== $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetOk;\n continue;\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) return result;\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while(state.eatChars([\n 0x2D,\n 0x2D\n ])){\n if (this.regexp_eatClassSetOperand(state)) continue;\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) return result;\n } else state.raise(\"Invalid character in character class\");\n // https://tc39.es/ecma262/#prod-ClassUnion\n for(;;){\n if (this.regexp_eatClassSetRange(state)) continue;\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) return result;\n if (subResult === $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetString;\n }\n};\n// https://tc39.es/ecma262/#prod-ClassSetRange\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */ ) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) state.raise(\"Range out of order in character class\");\n return true;\n }\n state.pos = start;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassSetOperand\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) return $f0e98b2c23d58ac9$var$CharSetOk;\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state);\n};\n// https://tc39.es/ecma262/#prod-NestedClass\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */ )) {\n var negate = state.eat(0x5E /* ^ */ );\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */ )) {\n if (negate && result === $f0e98b2c23d58ac9$var$CharSetString) state.raise(\"Negated character class may contain strings\");\n return result;\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */ )) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) return result$1;\n state.pos = start;\n }\n return null;\n};\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([\n 0x5C,\n 0x71\n ])) {\n if (state.eat(0x7B /* { */ )) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */ )) return result;\n } else // Make the same message as V8.\n state.raise(\"Invalid escape\");\n state.pos = start;\n }\n return null;\n};\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n$f0e98b2c23d58ac9$var$pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while(state.eat(0x7C /* | */ ))if (this.regexp_classString(state) === $f0e98b2c23d58ac9$var$CharSetString) result = $f0e98b2c23d58ac9$var$CharSetString;\n return result;\n};\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\n$f0e98b2c23d58ac9$var$pp$1.regexp_classString = function(state) {\n var count = 0;\n while(this.regexp_eatClassSetCharacter(state))count++;\n return count === 1 ? $f0e98b2c23d58ac9$var$CharSetOk : $f0e98b2c23d58ac9$var$CharSetString;\n};\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */ )) {\n if (this.regexp_eatCharacterEscape(state) || this.regexp_eatClassSetReservedPunctuator(state)) return true;\n if (state.eat(0x62 /* b */ )) {\n state.lastIntValue = 0x08; /* */ \n return true;\n }\n state.pos = start;\n return false;\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && $f0e98b2c23d58ac9$var$isClassSetReservedDoublePunctuatorCharacter(ch)) return false;\n if ($f0e98b2c23d58ac9$var$isClassSetSyntaxCharacter(ch)) return false;\n state.advance();\n state.lastIntValue = ch;\n return true;\n};\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction $f0e98b2c23d58ac9$var$isClassSetReservedDoublePunctuatorCharacter(ch) {\n return ch === 0x21 /* ! */ || ch >= 0x23 /* # */ && ch <= 0x26 /* & */ || ch >= 0x2A /* * */ && ch <= 0x2C /* , */ || ch === 0x2E /* . */ || ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ || ch === 0x5E /* ^ */ || ch === 0x60 /* ` */ || ch === 0x7E /* ~ */ ;\n}\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction $f0e98b2c23d58ac9$var$isClassSetSyntaxCharacter(ch) {\n return ch === 0x28 /* ( */ || ch === 0x29 /* ) */ || ch === 0x2D /* - */ || ch === 0x2F /* / */ || ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ || ch >= 0x7B /* { */ && ch <= 0x7D /* } */ ;\n}\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true;\n }\n return false;\n};\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction $f0e98b2c23d58ac9$var$isClassSetReservedPunctuator(ch) {\n return ch === 0x21 /* ! */ || ch === 0x23 /* # */ || ch === 0x25 /* % */ || ch === 0x26 /* & */ || ch === 0x2C /* , */ || ch === 0x2D /* - */ || ch >= 0x3A /* : */ && ch <= 0x3E /* > */ || ch === 0x40 /* @ */ || ch === 0x60 /* ` */ || ch === 0x7E /* ~ */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isDecimalDigit(ch) || ch === 0x5F /* _ */ ) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */ )) {\n if (this.regexp_eatFixedHexDigits(state, 2)) return true;\n if (state.switchU) state.raise(\"Invalid escape\");\n state.pos = start;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while($f0e98b2c23d58ac9$var$isDecimalDigit(ch = state.current())){\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */ );\n state.advance();\n }\n return state.pos !== start;\n};\nfunction $f0e98b2c23d58ac9$var$isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while($f0e98b2c23d58ac9$var$isHexDigit(ch = state.current())){\n state.lastIntValue = 16 * state.lastIntValue + $f0e98b2c23d58ac9$var$hexToInt(ch);\n state.advance();\n }\n return state.pos !== start;\n};\nfunction $f0e98b2c23d58ac9$var$isHexDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */ || ch >= 0x41 /* A */ && ch <= 0x46 /* F */ || ch >= 0x61 /* a */ && ch <= 0x66 /* f */ ;\n}\nfunction $f0e98b2c23d58ac9$var$hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */ ) return 10 + (ch - 0x41 /* A */ );\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */ ) return 10 + (ch - 0x61 /* a */ );\n return ch - 0x30 /* 0 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n else state.lastIntValue = n1 * 8 + n2;\n } else state.lastIntValue = n1;\n return true;\n }\n return false;\n};\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if ($f0e98b2c23d58ac9$var$isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */ \n state.advance();\n return true;\n }\n state.lastIntValue = 0;\n return false;\n};\nfunction $f0e98b2c23d58ac9$var$isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */ ;\n}\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n$f0e98b2c23d58ac9$var$pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for(var i = 0; i < length; ++i){\n var ch = state.current();\n if (!$f0e98b2c23d58ac9$var$isHexDigit(ch)) {\n state.pos = start;\n return false;\n }\n state.lastIntValue = 16 * state.lastIntValue + $f0e98b2c23d58ac9$var$hexToInt(ch);\n state.advance();\n }\n return true;\n};\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\nvar $f0e98b2c23d58ac9$export$50792b0e93539fde = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations) this.loc = new $f0e98b2c23d58ac9$export$7387db7caf96fcdb(p, p.startLoc, p.endLoc);\n if (p.options.ranges) this.range = [\n p.start,\n p.end\n ];\n};\n// ## Tokenizer\nvar $f0e98b2c23d58ac9$var$pp = $f0e98b2c23d58ac9$export$7acfa6ed01010e37.prototype;\n// Move to the next token\n$f0e98b2c23d58ac9$var$pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc) this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword);\n if (this.options.onToken) this.options.onToken(new $f0e98b2c23d58ac9$export$50792b0e93539fde(this));\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n$f0e98b2c23d58ac9$var$pp.getToken = function() {\n this.next();\n return new $f0e98b2c23d58ac9$export$50792b0e93539fde(this);\n};\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\") $f0e98b2c23d58ac9$var$pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n return {\n next: function() {\n var token = this$1$1.getToken();\n return {\n done: token.type === $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof,\n value: token\n };\n }\n };\n};\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n// Read a single token, updating the parser object's token-related\n// properties.\n$f0e98b2c23d58ac9$var$pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) this.skipSpace();\n this.start = this.pos;\n if (this.options.locations) this.startLoc = this.curPosition();\n if (this.pos >= this.input.length) return this.finishToken($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.eof);\n if (curContext.override) return curContext.override(this);\n else this.readToken(this.fullCharCodeAtPos());\n};\n$f0e98b2c23d58ac9$var$pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if ($f0e98b2c23d58ac9$export$56b48cc5d7560ffb(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */ ) return this.readWord();\n return this.getTokenFromCode(code);\n};\n$f0e98b2c23d58ac9$var$pp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) return code;\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00;\n};\n$f0e98b2c23d58ac9$var$pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) this.raise(this.pos - 2, \"Unterminated comment\");\n this.pos = end + 2;\n if (this.options.locations) for(var nextBreak = void 0, pos = start; (nextBreak = $f0e98b2c23d58ac9$var$nextLineBreak(this.input, pos, this.pos)) > -1;){\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n if (this.options.onComment) this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos, startLoc, this.curPosition());\n};\n$f0e98b2c23d58ac9$var$pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while(this.pos < this.input.length && !$f0e98b2c23d58ac9$export$2c19a3e3b4008fff(ch))ch = this.input.charCodeAt(++this.pos);\n if (this.options.onComment) this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos, startLoc, this.curPosition());\n};\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n$f0e98b2c23d58ac9$var$pp.skipSpace = function() {\n loop: while(this.pos < this.input.length){\n var ch = this.input.charCodeAt(this.pos);\n switch(ch){\n case 32:\n case 160:\n ++this.pos;\n break;\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) ++this.pos;\n case 10:\n case 8232:\n case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break;\n case 47:\n switch(this.input.charCodeAt(this.pos + 1)){\n case 42:\n this.skipBlockComment();\n break;\n case 47:\n this.skipLineComment(2);\n break;\n default:\n break loop;\n }\n break;\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && $f0e98b2c23d58ac9$export$268622f0f1cbc82b.test(String.fromCharCode(ch))) ++this.pos;\n else break loop;\n }\n }\n};\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n$f0e98b2c23d58ac9$var$pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) this.endLoc = this.curPosition();\n var prevType = this.type;\n this.type = type;\n this.value = val;\n this.updateContext(prevType);\n};\n// ### Token reading\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\n$f0e98b2c23d58ac9$var$pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) return this.readNumber(true);\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) {\n this.pos += 3;\n return this.finishToken($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.ellipsis);\n } else {\n ++this.pos;\n return this.finishToken($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.dot);\n }\n};\n$f0e98b2c23d58ac9$var$pp.readToken_slash = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) {\n ++this.pos;\n return this.readRegexp();\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.slash, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_mult_modulo_exp = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.star : $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.modulo;\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp(tokentype, size);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_pipe_amp = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 3);\n }\n return this.finishOp(code === 124 ? $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalOR : $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.logicalAND, 2);\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp(code === 124 ? $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitwiseOR : $f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitwiseAND, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_caret = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitwiseXOR, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_plus_min = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 && (this.lastTokEnd === 0 || $f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken();\n }\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.incDec, 2);\n }\n if (next === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, 2);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.plusMin, 1);\n};\n$f0e98b2c23d58ac9$var$pp.readToken_lt_gt = function(code) {\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.assign, size + 1);\n return this.finishOp($f0e98b2c23d58ac9$export$b54c7ea7aabba5c8.bitShift, size);\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 && this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n // operators --> modify existing Colors\n // interpolators\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n // scale\n chroma.scales = scales;\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n var chroma_js = chroma;\n return chroma_js;\n});\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nconst $c5a0b96abcd6dbcd$var$location = window.location;\nconst $c5a0b96abcd6dbcd$export$281ad3752a540efe = new URLSearchParams($c5a0b96abcd6dbcd$var$location.search);\nconst $c5a0b96abcd6dbcd$export$128fa18b7194ef = new URL($c5a0b96abcd6dbcd$var$location);\nconst $c5a0b96abcd6dbcd$export$1bb10639a2cd4297 = $9c36b6a340cabfc4$export$185802fd694ee1f5({\n objectHash: $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a\n});\nfunction $c5a0b96abcd6dbcd$export$d2cf6cd1dc7067d3(className, ...elements) {\n elements.forEach((element)=>element.classList.add(className));\n}\nfunction $c5a0b96abcd6dbcd$export$1a23559e655dacdd(original, degrees) {\n const result = original + degrees;\n if (result < 0) return 360 + result;\n else if (result > 360) return result - 360;\n return result;\n}\nfunction $c5a0b96abcd6dbcd$export$bac4c4504d574f(direction, amount) {\n return (direction + amount + 6) % 6;\n}\nfunction $c5a0b96abcd6dbcd$export$afb15ede80c42aab(string) {\n const binString = window.atob($c5a0b96abcd6dbcd$var$base64unescape(string));\n // noinspection JSCheckFunctionSignatures\n return new TextDecoder().decode((0, $b8ea597934691048$export$2e2bcd8739ae039).inflate(Uint8Array.from(binString, (c)=>c.codePointAt(0))));\n}\nwindow.base64decode = $c5a0b96abcd6dbcd$export$afb15ede80c42aab;\nfunction $c5a0b96abcd6dbcd$export$4e633de97d65d1c8(string) {\n return $c5a0b96abcd6dbcd$var$base64escape(window.btoa(String.fromCodePoint(...(0, $b8ea597934691048$export$2e2bcd8739ae039).deflate(new TextEncoder().encode(string)))));\n}\nwindow.base64encode = $c5a0b96abcd6dbcd$export$4e633de97d65d1c8;\nfunction $c5a0b96abcd6dbcd$var$base64escape(string) {\n // https://en.wikipedia.org/wiki/Base64#URL_applications\n return string.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction $c5a0b96abcd6dbcd$var$base64unescape(string) {\n return (string + \"===\".slice((string.length + 3) % 4)).replace(/-/g, \"+\").replace(/_/g, \"/\");\n}\nfunction $c5a0b96abcd6dbcd$export$9a00dee1beb8f576(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nfunction $c5a0b96abcd6dbcd$export$6e5538615c060df7(...args) {\n return args.findLast((arg)=>arg !== undefined);\n}\nfunction $c5a0b96abcd6dbcd$export$61fc7d43ac8f84b0(func, delay = 500) {\n let timeout;\n return (...args)=>{\n clearTimeout(timeout);\n timeout = setTimeout(()=>{\n func(...args);\n }, delay);\n };\n}\nfunction $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a(x, y) {\n return typeof x === \"object\" && typeof y === \"object\" ? Object.keys(x).length === Object.keys(y).length && Object.keys(x).every((key)=>{\n const xv = x[key];\n const yv = y[key];\n return Object.hasOwn(y, key) && (typeof xv?.equals === \"function\" ? xv.equals(yv) : $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a(xv, yv));\n }) : x === y;\n}\nfunction $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1(event, detail = null) {\n document.dispatchEvent(new CustomEvent(event, {\n detail: detail\n }));\n}\nfunction $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07(pointA, pointB, maxDiff = 0) {\n return pointA && pointB && pointA.round().subtract(pointB.round()).length <= maxDiff;\n}\nfunction $c5a0b96abcd6dbcd$export$836ff99bad0a09da(triangle) {\n const segments = triangle.segments;\n const vertex = segments[0].point;\n const opposite = segments[1].point.subtract(segments[1].point.subtract(segments[2].point).divide(2));\n return vertex.add(opposite.subtract(vertex).multiply(2 / 3));\n}\nfunction $c5a0b96abcd6dbcd$export$3cb91a81090b9eee(color) {\n const span = document.createElement(\"span\");\n span.classList.add(\"beam\");\n span.style.backgroundColor = color;\n span.title = color;\n return span;\n}\nfunction $c5a0b96abcd6dbcd$export$6d3741128bd5bb7d(colors) {\n if (!colors.length) return [];\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(colors).hex();\n const elements = [];\n if (colors.some((other)=>other !== color)) {\n const maxColorIndex = colors.length - 1;\n colors.forEach((color, index)=>{\n elements.push($c5a0b96abcd6dbcd$export$3cb91a81090b9eee(color));\n if (index < maxColorIndex) {\n const plus = document.createElement(\"span\");\n plus.classList.add(\"text\");\n plus.textContent = \"+\";\n elements.push(plus);\n }\n });\n const equals = document.createElement(\"span\");\n equals.classList.add(\"text\");\n equals.textContent = \"=\";\n elements.push(equals);\n }\n elements.push($c5a0b96abcd6dbcd$export$3cb91a81090b9eee(color));\n return elements;\n}\nfunction $c5a0b96abcd6dbcd$export$79376507b09a66f(point) {\n return (a, b)=>a.subtract(point).length - b.subtract(point).length;\n}\nfunction $c5a0b96abcd6dbcd$export$f6292fcace2a1886(name, title) {\n const span = document.createElement(\"span\");\n span.classList.add(\"icon\", \"material-symbols-outlined\");\n span.textContent = name;\n span.title = title ?? $c5a0b96abcd6dbcd$export$9a00dee1beb8f576(name);\n return span;\n}\nfunction $c5a0b96abcd6dbcd$export$78da85ac75754159(pointA, pointB, length = (length)=>length / 2) {\n const vector = pointA.subtract(pointB);\n vector.length = typeof length === \"function\" ? length(vector.length) : length;\n return pointA.subtract(vector);\n}\nfunction $c5a0b96abcd6dbcd$export$bd58da2e19cd17da(point, length, direction) {\n const vector = new (0, $hFpCu.Point)(0, 0);\n vector.length = length;\n vector.angle = $c5a0b96abcd6dbcd$export$c43d7a950587702b(direction) * 60;\n return point.add(vector);\n}\nfunction $c5a0b96abcd6dbcd$export$35d6177dfa7903b5(direction) {\n return direction + (direction >= 3 ? -3 : 3);\n}\nfunction $c5a0b96abcd6dbcd$export$c43d7a950587702b(direction, toPaperJs = true) {\n direction = direction + (toPaperJs ? -1 : 1) * 2;\n if (direction < 0) return direction + 6;\n else if (direction > 5) return direction - 6;\n return direction;\n}\nfunction $c5a0b96abcd6dbcd$export$1690e12b840569b9(line, point) {\n const [a, b] = line;\n const c = point;\n return Math.sign((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));\n}\nfunction $c5a0b96abcd6dbcd$export$17a5d53cd2e4de6c(beamDirection, reflectorDirection) {\n // Have to convert to PaperJS directions on the way in\n const beamAngle = $c5a0b96abcd6dbcd$export$c43d7a950587702b(beamDirection, true) * 60;\n const reflectorAngle = reflectorDirection * 30;\n const reflectedBeamAngle = (reflectorAngle - beamAngle) * 2;\n // And convert back to our normal directions on the way out\n return $c5a0b96abcd6dbcd$export$c43d7a950587702b($c5a0b96abcd6dbcd$export$1a23559e655dacdd(beamAngle, reflectedBeamAngle) / 60 % 6, false);\n}\nfunction $c5a0b96abcd6dbcd$export$43941667eccc070(text) {\n const span = document.createElement(\"span\");\n span.classList.add(\"text\");\n span.textContent = text.toString();\n return span;\n}\nfunction $c5a0b96abcd6dbcd$export$8793edee2d425525(value) {\n if (value) return value;\n}\nfunction $c5a0b96abcd6dbcd$export$c2255604a80b4506(className, ...elements) {\n elements.forEach((element)=>element.classList.remove(className));\n}\nfunction $c5a0b96abcd6dbcd$export$abb49451cc8201c(direction, amount) {\n return $c5a0b96abcd6dbcd$export$bac4c4504d574f(direction, amount * -1);\n}\nfunction $c5a0b96abcd6dbcd$export$abf0e2545164275f(array, key) {\n const values = array.map((value)=>value[key]);\n return array.filter((value, index)=>!values.includes(value[key], index + 1));\n}\n\n\nconst $77e640c1aaab669f$var$console = window.console = window.console || {\n debug: function() {}\n};\nconst $77e640c1aaab669f$var$consoleDebug = $77e640c1aaab669f$var$console.debug;\nfunction $77e640c1aaab669f$export$1c9f709888824e05(debug) {\n $77e640c1aaab669f$var$console.debug = debug ? $77e640c1aaab669f$var$consoleDebug : function() {};\n}\n// Silence debug logging by default\n$77e640c1aaab669f$export$1c9f709888824e05((0, $c5a0b96abcd6dbcd$export$281ad3752a540efe).has(\"debug\") ?? false);\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nclass $1024ef6a63be0e18$export$2e382909194b1aab {\n constructor(r, c){\n this.coordinates = [\n r,\n c\n ];\n this.r = r;\n this.c = c;\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static toAxialCoordinates(offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2;\n return new (0, $3f2d62ea7d5da3d6$export$c56d3ccff2456440)(q, offset.r);\n }\n}\n\n\nclass $3f2d62ea7d5da3d6$export$c56d3ccff2456440 {\n constructor(q, r, s){\n if (!s) s = -q - r;\n this.coordinates = [\n q,\n r,\n s\n ];\n this.q = q;\n this.r = r;\n this.s = s;\n }\n add(other) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.add(this, other);\n }\n equals(other) {\n return this.q === other.q && this.r === other.r && this.s === other.s;\n }\n isNeighbor(other) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.isNeighbor(this, other);\n }\n neighbor(direction) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.neighbor(this, direction);\n }\n toString() {\n return this.coordinates.join(\",\");\n }\n static add(a, b) {\n return new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(a.q + b.q, a.r + b.r);\n }\n static direction(direction) {\n if (direction === 0) direction = 6;\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.directions[6 - direction];\n }\n static directions = [\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(1, 0),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(1, -1),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(0, -1),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(-1, 0),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(-1, 1),\n new $3f2d62ea7d5da3d6$export$c56d3ccff2456440(0, 1)\n ];\n static isNeighbor(a, b) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.directions.map((direction)=>$3f2d62ea7d5da3d6$export$c56d3ccff2456440.add(a, direction)).some((neighbor)=>neighbor.equals(b));\n }\n static neighbor(start, direction) {\n return $3f2d62ea7d5da3d6$export$c56d3ccff2456440.add(start, $3f2d62ea7d5da3d6$export$c56d3ccff2456440.direction(direction));\n }\n static toOffsetCoordinates(axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2;\n return new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(c, axial.r);\n }\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nclass $92f12ea2067f7a87$export$654f18991713c8c4 {\n #state = {};\n constructor(state){\n this.setState(state);\n }\n getState() {\n return structuredClone(this.#state);\n }\n setState(state) {\n this.#state = structuredClone(state);\n }\n updateState(updater, dispatchEvent = true) {\n updater(this.#state);\n if (dispatchEvent) (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($92f12ea2067f7a87$export$654f18991713c8c4.Events.Update, {\n object: this\n });\n return this.getState();\n }\n static Events = Object.freeze({\n Update: \"state-update\"\n });\n}\n\n\nclass $7f0d958f0726b89e$export$6d08773d2e66f8f2 extends (0, $92f12ea2067f7a87$export$654f18991713c8c4) {\n center;\n data;\n group;\n id = $7f0d958f0726b89e$export$6d08773d2e66f8f2.uniqueId++;\n // Whether the item can be clicked on\n locked;\n parent;\n sortOrder = 100;\n type;\n constructor(parent, state, configuration){\n super(state);\n this.type = state?.type || configuration?.type;\n this.data = Object.assign({\n id: this.id,\n type: this.type\n }, configuration?.data || {});\n this.locked = configuration?.locked !== false;\n if (parent) this.center = parent.center;\n this.parent = parent;\n this.group = new (0, $hFpCu.Group)({\n data: this.data,\n locked: this.locked\n });\n }\n equals(otherItem) {\n return otherItem instanceof $7f0d958f0726b89e$export$6d08773d2e66f8f2 && this.id === otherItem.id;\n }\n getColorElements() {\n return [];\n }\n getCompoundPath() {\n return new (0, $hFpCu.CompoundPath)({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({\n insert: false\n }).children.filter((child)=>child.data.collidable !== false)\n });\n }\n getIndex() {\n return this.group.index;\n }\n getLayer() {\n return this.group.parent;\n }\n onTap() {}\n onCollision({ collisionStep: collisionStep }) {\n return collisionStep;\n }\n onDeselected() {}\n onInitialization() {}\n onSelected() {}\n remove() {\n this.group.remove();\n }\n toString() {\n return `[${this.type}:${this.id}]`;\n }\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"beam\",\n \"collision\",\n \"filter\",\n \"mask\",\n \"portal\",\n \"reflector\",\n \"terminus\",\n \"tile\",\n \"wall\"\n ].map((type)=>[\n type,\n (0, $c5a0b96abcd6dbcd$export$9a00dee1beb8f576)(type)\n ])));\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0;\n}\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\nclass $7cd91973a7925acd$export$b20b719ec758a20f {\n #events = [];\n #options = {\n element: document\n };\n constructor(options = {}){\n this.#options = Object.assign(this.#options, options);\n }\n add(events, options = {}) {\n this.#events = this.#events.concat(events.map((event)=>{\n event = Object.assign({}, this.#options, options, event);\n if (!event.type) throw new Error(\"Event type is required\");\n if (event.context) event.handler = event.handler.bind(event.context);\n event.element.addEventListener(event.type, event.handler, event.options);\n return event;\n }));\n }\n remove() {\n this.#events.forEach((event)=>event.element.removeEventListener(event.type, event.handler));\n this.#events = [];\n }\n}\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nclass $40d8a77a984c51a9$export$94affb487e701bf2 {\n #cache = {};\n #hasKeys;\n #keys;\n constructor(keys = []){\n this.#keys = keys;\n this.#hasKeys = keys.length !== 0;\n keys.forEach((key)=>{\n this.#cache[key] = new $40d8a77a984c51a9$export$94affb487e701bf2();\n });\n }\n set(key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) throw new Error(`Invalid key: ${key}`);\n this.#cache[key] = item;\n }\n get(key) {\n return key === undefined ? this.#cache : this.#cache[key];\n }\n keys(key) {\n return Object.keys(this.#get(key));\n }\n length(key) {\n return this.keys(key).length;\n }\n unset(key) {\n delete this.#cache[key];\n }\n values(key) {\n return Object.values(this.#get(key));\n }\n #get(key) {\n const value = this.get(key);\n return value instanceof $40d8a77a984c51a9$export$94affb487e701bf2 ? value.get() : value;\n }\n}\n\n\n\nclass $b8e3951689bc8f9e$export$b0d759d807f751d4 {\n #bounds;\n #cache = new (0, $40d8a77a984c51a9$export$94affb487e701bf2)(Object.values($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys));\n #element;\n #eventListener = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #offset;\n constructor(element){\n this.#bounds = element.getBoundingClientRect();\n this.#element = element;\n this.#offset = new (0, $hFpCu.Point)(this.#bounds.left, this.#bounds.top);\n this.#eventListener.add([\n {\n type: \"pointercancel\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointermove\",\n handler: this.onPointerMove\n },\n {\n type: \"pointerout\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n },\n {\n type: \"wheel\",\n handler: this.onMouseWheel,\n options: {\n passive: false\n }\n }\n ], {\n element: element\n });\n }\n onMouseWheel(event) {\n event.preventDefault();\n this.#zoom(new (0, $hFpCu.Point)(event.offsetX, event.offsetY), event.deltaY, 1.05);\n }\n onPan(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewToProject($b8e3951689bc8f9e$export$b0d759d807f751d4.point(event));\n const pan = this.#getGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pan);\n if (!pan) {\n this.#setGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pan, {\n from: point\n });\n return;\n }\n const center = pan.from.subtract(point).add((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center);\n // Allow a little wiggle room to prevent panning on tap\n if ((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains(\"grab\")) document.body.classList.add(\"grab\");\n // Center on the cursor\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center = center;\n }\n }\n onPinch(events) {\n const pointer0 = events[0];\n const pointer1 = events[1];\n const point0 = $b8e3951689bc8f9e$export$b0d759d807f751d4.point(pointer0);\n const point1 = $b8e3951689bc8f9e$export$b0d759d807f751d4.point(pointer1);\n const distance = point0.getDistance(point1);\n const pinch = this.#getGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pinch);\n if (!pinch) {\n this.#setGesture($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pinch, {\n distance: distance\n });\n return;\n }\n const center = point0.add(point1).divide(2).subtract(this.#offset);\n const scale = distance / pinch.distance;\n const delta = (pinch.distance - distance) * scale;\n this.#zoom(center, delta, 1.01);\n pinch.distance = distance;\n }\n onPointerDown(event) {\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).set(event.pointerId, event);\n }\n onPointerMove(event) {\n const down = this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) // Ignore events until there is a pointer down event\n return;\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = $b8e3951689bc8f9e$export$b0d759d807f751d4.point(event).subtract($b8e3951689bc8f9e$export$b0d759d807f751d4.point(down)).length;\n if (diff > 1) {\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).set(event.pointerId, event);\n const events = this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).values();\n if (events.length === 2) this.onPinch(events);\n else this.onPan(event);\n }\n }\n onPointerUp(event) {\n const down = this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).get(event.pointerId);\n if (!down) return;\n if (this.#cache.length($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down) === 1 && !this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).get(event.pointerId)) this.onTap(down);\n document.body.classList.remove(\"grab\");\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Down).unset(event.pointerId);\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move).unset(event.pointerId);\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).unset($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pan);\n if (this.#cache.length($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Move) < 2) this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).unset($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Pinch);\n }\n onTap(event) {\n const point = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewToProject($b8e3951689bc8f9e$export$b0d759d807f751d4.point(event).subtract(this.#offset));\n this.#element.dispatchEvent(new CustomEvent($b8e3951689bc8f9e$export$b0d759d807f751d4.GestureKeys.Tap, {\n detail: {\n event: event,\n point: point\n }\n }));\n }\n #getGesture(key) {\n return this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).get(key);\n }\n #setGesture(key, value) {\n this.#cache.get($b8e3951689bc8f9e$export$b0d759d807f751d4.CacheKeys.Gesture).set(key, value);\n }\n #zoom(point, delta, factor) {\n const zoom = Math.max(Math.min(delta < 0 ? (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom * factor : (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom / factor, $b8e3951689bc8f9e$export$b0d759d807f751d4.maxZoom), $b8e3951689bc8f9e$export$b0d759d807f751d4.minZoom);\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewToProject(point);\n const touchOffset = touchPoint.subtract((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center);\n // Adjust center towards cursor location\n const zoomOffset = touchPoint.subtract(touchOffset.multiply((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom / zoom)).subtract((0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center);\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.zoom = zoom;\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center.add(zoomOffset);\n }\n static point(event) {\n return new (0, $hFpCu.Point)(event.clientX, event.clientY);\n }\n static CacheKeys = Object.freeze({\n Down: \"down\",\n Move: \"move\",\n Gesture: \"gesture\"\n });\n static GestureKeys = Object.freeze({\n Pan: \"pan\",\n Pinch: \"pinch\",\n Tap: \"tap\"\n });\n static maxZoom = 2;\n static minZoom = 0.5;\n static vibratePattern = 25;\n}\n\n\nconst $1f24870028eeabcc$var$modifiersImmutable = document.getElementById(\"modifiers-immutable\");\nconst $1f24870028eeabcc$var$modifiersMutable = document.getElementById(\"modifiers-mutable\");\nconst $1f24870028eeabcc$var$navigator = window.navigator;\nlet $1f24870028eeabcc$var$uniqueId = 0;\nclass $1f24870028eeabcc$export$5acd5e6efc9671b7 extends (0, $92f12ea2067f7a87$export$654f18991713c8c4) {\n #container;\n #down = false;\n #eventListener = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #mask;\n #selectionTime = 500;\n #timeoutId;\n configuration;\n element;\n disabled = false;\n id = $1f24870028eeabcc$var$uniqueId++;\n immutable = false;\n name;\n selected = false;\n tile;\n title;\n type;\n constructor(tile, state){\n super(state);\n this.tile = tile;\n this.type = state.type;\n }\n /**\n * Attach the modifier to the DOM and add listeners.\n */ attach() {\n const li = this.#container = document.createElement(\"li\");\n li.classList.add([\n \"modifier\",\n this.type.toLowerCase()\n ].join(\"-\"));\n if (this.immutable) this.disabled = true;\n const span = this.element = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\", \"fill\");\n li.append(span);\n this.update();\n this.#eventListener.add([\n {\n type: \"deselected\",\n handler: this.onDeselected\n },\n {\n type: \"pointerdown\",\n handler: this.onPointerDown\n },\n {\n type: \"pointerleave\",\n handler: this.onPointerUp\n },\n {\n type: \"pointerup\",\n handler: this.onPointerUp\n }\n ], {\n element: li\n });\n this.immutable ? $1f24870028eeabcc$var$modifiersImmutable.append(li) : $1f24870028eeabcc$var$modifiersMutable.append(li);\n }\n /**\n * Remove listeners and the modifier from the DOM.\n */ detach() {\n if (!this.#container) return;\n $1f24870028eeabcc$export$5acd5e6efc9671b7.deselect();\n this.#eventListener.remove();\n this.#container.remove();\n this.selected = false;\n this.element = undefined;\n this.#container = undefined;\n }\n dispatchEvent(event, detail) {\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)(event, Object.assign({}, detail || {}, {\n modifier: this,\n tile: this.tile\n }));\n }\n equals(other) {\n return other instanceof $1f24870028eeabcc$export$5acd5e6efc9671b7 && this.id === other.id;\n }\n move(tile) {\n this.remove();\n tile.addModifier(this);\n this.tile = tile;\n }\n moveFilter(tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier)=>modifier.type === $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.immutable);\n }\n onDeselected() {\n this.update({\n selected: false\n });\n this.tile.afterModify();\n this.dispatchEvent($1f24870028eeabcc$export$5acd5e6efc9671b7.Events.Deselected);\n }\n onPointerDown(event) {\n if (event.button !== 0) // Support toggle on non-primary pointer button\n this.onToggle(event);\n else {\n this.#down = true;\n if (!this.#mask && !this.tile.modifiers.some((modifier)=>[\n $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.immutable,\n $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.lock\n ].includes(modifier.type))) this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime);\n }\n }\n onPointerUp(event) {\n clearTimeout(this.#timeoutId);\n if (this.#down && !this.disabled && !this.selected) switch(event.type){\n case \"pointerleave\":\n // Support swiping up on pointer device\n this.onToggle(event);\n break;\n case \"pointerup\":\n this.onTap(event);\n break;\n }\n this.#down = false;\n }\n onSelected() {\n $1f24870028eeabcc$export$5acd5e6efc9671b7.deselect();\n $1f24870028eeabcc$var$navigator.vibrate((0, $b8e3951689bc8f9e$export$b0d759d807f751d4).vibratePattern);\n this.update({\n selected: true\n });\n const mask = this.#mask = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onMask: ()=>this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n });\n this.dispatchEvent((0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n onTap() {\n this.selected = false;\n }\n onToggle() {\n $1f24870028eeabcc$var$navigator.vibrate((0, $b8e3951689bc8f9e$export$b0d759d807f751d4).vibratePattern);\n }\n remove() {\n this.detach();\n this.tile.removeModifier(this);\n this.tile = null;\n }\n toString() {\n return [\n this.name,\n this.id\n ].join(\":\");\n }\n update(options) {\n options = Object.assign({\n disabled: this.disabled,\n selected: this.selected,\n name: this.name,\n title: this.title\n }, options || {});\n if (!this.immutable) this.disabled = options.disabled;\n this.name = options.name;\n this.title = options.title;\n this.selected = options.selected;\n if (this.#container) {\n this.#container.classList.toggle(\"disabled\", this.disabled);\n this.#container.classList.toggle(\"selected\", this.selected);\n this.element.textContent = this.name;\n this.element.title = this.title;\n }\n }\n #maskOnTap(puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile;\n this.move(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent($1f24870028eeabcc$export$5acd5e6efc9671b7.Events.Moved, {\n fromTile: fromTile\n });\n } else {\n $1f24870028eeabcc$export$5acd5e6efc9671b7.deselect();\n puzzle.unmask();\n }\n this.#mask = undefined;\n this.update({\n selected: false\n });\n }\n #moveFilter(tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile);\n }\n static deselect() {\n const selectedModifier = document.querySelector(\".modifiers .selected\");\n if (selectedModifier) selectedModifier.dispatchEvent(new CustomEvent(\"deselected\"));\n }\n static immutable(modifier) {\n return modifier.type === $1f24870028eeabcc$export$5acd5e6efc9671b7.Types.immutable;\n }\n static Events = Object.freeze({\n Deselected: \"modifier-deselected\",\n Invoked: \"modifier-invoked\",\n Moved: \"modifier-moved\"\n });\n static Types = Object.freeze(Object.fromEntries([\n \"immutable\",\n \"lock\",\n \"move\",\n \"rotate\",\n \"swap\",\n \"toggle\"\n ].map((type)=>[\n type,\n (0, $c5a0b96abcd6dbcd$export$9a00dee1beb8f576)(type)\n ])));\n}\n\n\n\n\n\nclass $f00c5e8e3b24f55c$export$e49a5ad3dd6df925 extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n #mask;\n name = \"drag_pan\";\n title = \"Move\";\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter($f00c5e8e3b24f55c$export$e49a5ad3dd6df925.movable);\n if (this.#mask || !items.length) return;\n const mask = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: ()=>this.tile.beforeModify(),\n onUnmask: ()=>this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n });\n this.#mask = mask;\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)((0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Events.Mask, {\n mask: mask\n });\n }\n moveFilter(tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.movable);\n }\n moveItems(tile) {\n const items = this.tile.items.filter($f00c5e8e3b24f55c$export$e49a5ad3dd6df925.movable);\n items.forEach((item)=>item.move(tile));\n return {\n moved: [\n $f00c5e8e3b24f55c$export$e49a5ad3dd6df925.data(this.tile, tile, items)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).immutable) || tile.items.filter((item)=>item.type !== (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam).length > 0 && !(tile === this.tile);\n }\n #maskOnTap(puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile);\n puzzle.updateState();\n puzzle.updateSelectedTile(tile);\n puzzle.unmask();\n this.dispatchEvent((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked, data);\n } else puzzle.unmask();\n this.#mask = undefined;\n }\n static data(fromTile, toTile, items) {\n return {\n fromTile: fromTile,\n toTile: toTile,\n items: items\n };\n }\n static movable(item) {\n return item.movable;\n }\n}\nconst $f00c5e8e3b24f55c$export$1288a4f7eae890b0 = (SuperClass)=>class MovableItem extends SuperClass {\n movable;\n constructor(parent, configuration){\n super(...arguments);\n this.movable = configuration.movable !== false;\n }\n move(tile) {\n this.parent.removeItem(this);\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center);\n this.group.position = this.group.position.subtract(vector);\n // Update tile reference\n this.parent = tile;\n this.parent.addItem(this);\n this.center = this.parent.center;\n this.onMove();\n }\n onMove() {}\n };\n\n\n\n\n\nclass $268becbe2ffcc8a3$export$fd55ce593607084a {\n color;\n colors;\n connected;\n direction;\n done;\n insertAbove;\n onAdd;\n onRemove;\n point;\n pathIndex;\n segmentIndex;\n state;\n tile;\n constructor(index, tile, colors, direction, point, pathIndex, segmentIndex, connected, insertAbove, done, state, onAdd, onRemove){\n if (state && !(state instanceof $268becbe2ffcc8a3$export$81262d6ca0162a3)) throw new Error(\"Step.state must be instance of StepState\");\n this.colors = colors ? Array.isArray(colors) ? Array.from(colors) : [\n colors\n ] : [];\n if (this.colors.length) this.color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(this.colors).hex();\n this.connected = connected ?? true;\n this.direction = direction;\n this.done = done ?? false;\n this.index = index;\n this.insertAbove = insertAbove;\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.onRemove = onRemove ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.point = point;\n this.pathIndex = pathIndex;\n this.segmentIndex = segmentIndex;\n this.state = state ?? new $268becbe2ffcc8a3$export$81262d6ca0162a3();\n this.tile = tile;\n }\n copy(settings) {\n return new $268becbe2ffcc8a3$export$fd55ce593607084a(settings.index ?? this.index, settings.tile ?? this.tile, settings.colors ?? settings.color ?? this.colors, settings.direction ?? this.direction, settings.point ?? this.point, settings.pathIndex ?? this.pathIndex, settings.segmentIndex ?? this.segmentIndex, settings.connected ?? this.connected, settings.insertAbove ?? this.insertAbove, settings.done ?? this.done, settings.state ?? new $268becbe2ffcc8a3$export$81262d6ca0162a3(this.state), settings.onAdd ?? this.onAdd, settings.onRemove ?? this.onRemove);\n }\n equals(step) {\n return (0, $c5a0b96abcd6dbcd$export$9cb4719e2e525b7a)(this, step);\n }\n}\nclass $268becbe2ffcc8a3$export$81262d6ca0162a3 {\n #cache = {};\n constructor(){\n const settings = Object.assign({}, ...arguments);\n Object.keys(settings).forEach((key)=>{\n this[key] = settings[key];\n });\n }\n copy(...settings) {\n return new $268becbe2ffcc8a3$export$81262d6ca0162a3(...[\n this\n ].concat(settings));\n }\n get(Class) {\n return this.#keys(Class).map((key)=>this[key]).find((value)=>value);\n }\n has(Class) {\n return this.#keys(Class).some((key)=>this[key]);\n }\n #keys(Class) {\n return this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, []));\n }\n static Collision = class StepCollision {\n collision;\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor(collision){\n this.collision = collision;\n }\n };\n static Filter = class StepFilter {\n filter = {};\n };\n static MergeInto = class StepMergeInto {\n mergeInto;\n constructor(beam){\n this.mergeInto = {\n beam: beam\n };\n }\n };\n static MergeWith = class StepMergeWith {\n mergeWith;\n constructor(mergeWith){\n this.mergeWith = mergeWith;\n }\n };\n static Portal = class StepPortal {\n portal;\n constructor(entryPortal, exitPortal){\n this.portal = {\n entryPortal: entryPortal,\n exitPortal: exitPortal\n };\n }\n };\n static Reflector = class StepReflector {\n reflector;\n constructor(item){\n this.reflector = {\n item: item\n };\n }\n };\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection;\n constructor(terminus, opening){\n this.terminusConnection = {\n terminus: terminus,\n opening: opening\n };\n }\n };\n}\n\n\nclass $903d7b3eecd4d3a8$export$ec91da630f36d5ea extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2)) {\n constructor(tile, { color: color }){\n super(...arguments);\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(Array.isArray(color) ? color : [\n color\n ]).hex();\n const fillColor = new (0, $hFpCu.Color)(color);\n fillColor.alpha = 0.25;\n // TODO: update to something else? prism?\n const item = new (0, $hFpCu.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor: fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n getColorElements() {\n return [\n (0, $c5a0b96abcd6dbcd$export$3cb91a81090b9eee)(this.color)\n ];\n }\n onCollision({ currentStep: currentStep, nextStep: nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(currentStep.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Filter) ? {\n colors: nextStep.colors.concat([\n this.color\n ])\n } : {\n state: new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3)({\n insertAbove: this\n }, new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Filter())\n });\n }\n}\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\nclass $f48c890393349af7$export$152db69a76b6b79e extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n clockwise;\n title = \"Rotate\";\n constructor(tile, state, configuration = {}){\n super(...arguments);\n this.clockwise = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(true, state.clockwise, configuration.clockwise);\n this.name = $f48c890393349af7$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"];\n }\n moveFilter(tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.rotatable);\n }\n onTap(event) {\n super.onTap(event);\n const items = this.tile.items.filter((item)=>item.rotatable);\n items.forEach((item)=>item.rotate(this.clockwise));\n this.dispatchEvent((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n onToggle() {\n super.onToggle();\n this.clockwise = !this.clockwise;\n this.updateState((state)=>{\n state.clockwise = this.clockwise;\n });\n this.update({\n name: $f48c890393349af7$export$152db69a76b6b79e.Names[this.clockwise ? \"right\" : \"left\"]\n });\n }\n static Names = Object.freeze({\n left: \"rotate_left\",\n right: \"rotate_right \"\n });\n}\nconst $f48c890393349af7$export$781de49a9284d537 = (SuperClass)=>class RotatableItem extends SuperClass {\n direction;\n rotatable;\n rotation = 0;\n rotationDegrees;\n constructor(parent, state, configuration = {}){\n super(...arguments);\n this.direction = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(state.direction, configuration.direction);\n this.rotatable = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(true, state.rotatable, configuration.rotatable);\n this.rotationDegrees = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(60, state.rotationDegrees, configuration.rotationDegrees);\n this.rotation = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(0, state.rotation, configuration.rotation) % this.getMaxRotation();\n }\n // Get the direction of an item with rotation factored in\n getDirection(direction) {\n direction = direction ?? this.direction;\n return direction === undefined ? direction : (0, $c5a0b96abcd6dbcd$export$bac4c4504d574f)(direction, this.rotation);\n }\n getMaxRotation() {\n return 360 / this.rotationDegrees;\n }\n onInitialization() {\n super.onInitialization();\n this.rotateGroup(this.rotation);\n if (this.direction !== undefined) // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction);\n }\n rotateGroup(rotation) {\n if (this.rotatable) this.group.rotate(rotation * this.rotationDegrees, this.center);\n }\n rotate(clockwise) {\n const rotation = clockwise === false ? -1 : 1;\n this.rotation = (rotation + this.rotation) % this.getMaxRotation();\n this.updateState((state)=>{\n state.rotation = this.rotation;\n });\n this.rotateGroup(rotation);\n }\n };\n\n\n\n\n\nclass $d430de8cd820c3cd$export$602eac185826482c extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2))) {\n #directions = {};\n constructor(tile, state){\n // Only allow rotation if direction is defined\n super(tile, state, {\n rotatable: state.direction !== undefined\n });\n this.direction = state.direction;\n const height = tile.parameters.circumradius / 3;\n const width = tile.parameters.circumradius / 5;\n const style = {\n fillColor: \"black\",\n strokeColor: \"white\",\n strokeWidth: 2\n };\n const children = [];\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new (0, $hFpCu.Path).Ellipse({\n center: tile.center,\n radius: [\n width,\n height\n ],\n style: style\n });\n children.push(ellipse);\n const ring = new (0, $hFpCu.Path).Ellipse({\n center: tile.center,\n radius: [\n width - style.strokeWidth * 2,\n height - style.strokeWidth * 2\n ],\n style: style\n });\n children.push(ring);\n if (this.rotatable) {\n const pointer = new (0, $hFpCu.Path)({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new (0, $hFpCu.Point)(0, height)),\n tile.center.subtract(new (0, $hFpCu.Point)(0, height)),\n tile.center.subtract(new (0, $hFpCu.Point)(width * 2.5, 0))\n ],\n style: {\n fillColor: \"black\"\n }\n }).subtract(ellipse);\n children.unshift(pointer);\n }\n this.group.addChildren(children);\n if (this.rotatable) // Properly align items with hexagonal rotation\n this.rotateGroup(1);\n }\n get(direction) {\n return this.#directions[direction];\n }\n onCollision({ beam: beam, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const portalState = currentStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal);\n if (!portalState) {\n const stepIndex = nextStep.index;\n const entryDirection = (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(nextStep.direction);\n const existing = (0, $c5a0b96abcd6dbcd$export$6e5538615c060df7)(this.get(entryDirection), {\n stepIndex: stepIndex\n });\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(this.toString(), \"ignoring beam trying to enter through a direction which is already occupied:\", entryDirection);\n return;\n }\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: ()=>this.update(entryDirection, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>this.update(entryDirection),\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal(this))\n });\n } else if (portalState.exitPortal === this) // Handle exit collision\n return nextStep.copy({\n insertAbove: this\n });\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [\n this.id,\n nextStep.index\n ].join(\":\");\n const destinationId = beam.getState().moves?.[stateId];\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item)=>item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.portal && !item.equals(this) && // Portal must not already have a beam occupying the desired direction\n !item.get($d430de8cd820c3cd$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, item)) && (destinationId === undefined || item.id === destinationId) && // Entry portals without defined direction can exit from any other portal.\n (this.getDirection() === undefined || // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined || // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()));\n if (destinations.length === 0) {\n console.debug(this.toString(), \"no valid destinations found\");\n // This will cause the beam to stop\n return currentStep;\n }\n if (destinations.length === 1) // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState);\n else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal)=>portal.parent);\n const mask = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Mask({\n beam: beam,\n id: stateId,\n onMask: ()=>currentStep.tile.beforeModify(),\n onTap: (puzzle, tile)=>{\n const destination = destinations.find((portal)=>portal.parent === tile);\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState));\n beam.updateState((state)=>{\n if (!state.moves) state.moves = {};\n // Store this decision in beam state\n state.moves[stateId] = destination.id;\n });\n puzzle.unmask();\n }\n },\n onUnmask: ()=>currentStep.tile.afterModify(),\n tileFilter: (tile)=>{\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile)=>destinationTile === tile));\n }\n });\n puzzle.updateSelectedTile(currentStep.tile);\n puzzle.mask(mask);\n // This will cause the beam to stop\n return currentStep;\n }\n }\n update(direction, data) {\n this.#directions[direction] = data;\n }\n #getStep(beam, portal, nextStep, portalState) {\n const direction = $d430de8cd820c3cd$export$602eac185826482c.getExitDirection(nextStep, portalState.entryPortal, portal);\n const stepIndex = nextStep.index;\n return nextStep.copy({\n connected: false,\n direction: direction,\n insertAbove: portal,\n onAdd: ()=>portal.update(direction, {\n stepIndex: stepIndex\n }),\n onRemove: ()=>portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n });\n }\n static getExitDirection(step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction;\n }\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\nclass $6756284c9622095f$export$bea8ebba691c5813 extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n on;\n title = \"Toggle\";\n constructor(tile, { on: on }){\n super(...arguments);\n this.on = on || false;\n this.tile.items.forEach((item)=>{\n item.toggled = this.on;\n });\n }\n attach() {\n this.name = $6756284c9622095f$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"];\n super.attach();\n }\n moveFilter(tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item)=>item.toggleable);\n }\n onTap(event) {\n super.onTap(event);\n this.on = !this.on;\n const items = this.tile.items.filter((item)=>item.toggleable);\n items.forEach((item)=>item.toggle(this.on));\n this.update({\n name: $6756284c9622095f$export$bea8ebba691c5813.Names[this.on ? \"on\" : \"off\"]\n });\n this.dispatchEvent((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked, {\n items: items\n });\n }\n static Names = Object.freeze({\n on: \"toggle_on\",\n off: \"toggle_off \"\n });\n}\nconst $6756284c9622095f$export$cdb1ce8c4b8a5afe = (SuperClass)=>class ToggleableItem extends SuperClass {\n toggleable;\n toggled;\n constructor(parent, configuration){\n super(...arguments);\n this.toggleable = configuration.toggleable !== false;\n }\n onToggle() {}\n toggle(toggled) {\n this.toggled = toggled;\n this.onToggle();\n }\n };\n\n\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\n\nclass $ff7d3b28e31d2a30$export$88c9f72b40fcdd85 {\n constructor(index, points, beam, item){\n const items = [\n beam\n ];\n if (item !== undefined) items.push(item);\n this.beam = beam;\n this.index = index;\n // The item that was collided with\n this.item = item;\n this.itemIds = items.map((item)=>item.id);\n this.items = items;\n // The first collision point\n this.point = points[0];\n this.points = points;\n // Check if the collision is with self\n this.withSelf = beam.equals(item);\n }\n copy(settings) {\n return new $ff7d3b28e31d2a30$export$88c9f72b40fcdd85(settings.index ?? this.index, settings.points ?? this.points, settings.beam ?? this.beam, settings.item ?? this.item);\n }\n equals(other) {\n return other && other.point.equals(this.point) && other.items.every((item)=>this.has(item));\n }\n has(item) {\n return this.itemIds.includes(item.id);\n }\n mirror() {\n return this.copy({\n beam: this.item,\n item: this.beam\n });\n }\n}\nclass $ff7d3b28e31d2a30$export$20aab196240bbdf2 {\n constructor(beam, step, stepIndex){\n this.beams = [\n beam\n ].concat(step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeWith)?.beams || []);\n this.colors = step.colors.concat(beam.getColors());\n this.stepIndex = stepIndex;\n }\n}\n\n\n\nclass $eb2b229f23b512af$export$693b33588b3dd9d8 extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n done = false;\n path = [];\n sortOrder = 3;\n #cache = new (0, $40d8a77a984c51a9$export$94affb487e701bf2)(Object.values($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys));\n #direction;\n #path;\n #stepIndex = -1;\n #steps = [];\n constructor(terminus, state, configuration){\n super(...arguments);\n this.group = null;\n this.#direction = configuration.direction;\n this.#path = {\n closed: false,\n data: {\n id: this.id,\n type: this.type\n },\n locked: true,\n strokeJoin: \"round\",\n strokeCap: \"round\",\n strokeWidth: terminus.radius / 12\n };\n }\n addStep(step) {\n const lastStepIndex = this.getLastStepIndex();\n // Can't be done if adding a new step\n this.done = false;\n this.#path.strokeColor = step.color;\n if (this.path.length === 0) {\n const path = new (0, $hFpCu.Path)(this.#path);\n this.path.push(path);\n this.getLayer().insertChild(0, path);\n }\n const currentPath = this.path[this.path.length - 1];\n const previousStep = this.#steps[lastStepIndex];\n // Handles cases that require adding a new path item\n if (!step.connected || previousStep && (step.color !== previousStep.color || step.insertAbove !== previousStep.insertAbove)) {\n console.debug(this.toString(), \"adding new path item for step:\", step, \"previous step:\", previousStep);\n const path = new (0, $hFpCu.Path)(this.#path);\n const points = [\n step.point\n ];\n // If the next step is connected, we will link it with the previous step\n if (step.connected) points.unshift(previousStep.point);\n path.add(...points);\n this.path.push(path);\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path);\n // Reset the segmentIndex\n step.segmentIndex = 0;\n } else {\n currentPath.add(step.point);\n step.segmentIndex = currentPath.segments.length - 1;\n }\n step.pathIndex = this.path.length - 1;\n this.#steps.push(step);\n step.index = this.#stepIndex = this.#steps.length - 1;\n if (!step.tile.items.some((item)=>item.equals(this))) // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this);\n step.onAdd(step);\n console.debug(this.toString(), \"added step\", step);\n this.#onUpdate(this.#stepIndex);\n return step;\n }\n getCollision() {\n return this.getStep()?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision);\n }\n getColor() {\n return this.getStep()?.color || this.getOpening().color;\n }\n getColors() {\n return Array.from(this.getStep()?.colors || this.getOpening().colors);\n }\n getColorElements(tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step)=>step.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeWith));\n return step ? (0, $c5a0b96abcd6dbcd$export$6d3741128bd5bb7d)(step.color) : [];\n }\n getCompoundPath() {\n return new (0, $hFpCu.CompoundPath)({\n children: this.path.map((item)=>item.clone({\n insert: false\n }))\n });\n }\n getIndex() {\n return this.path[this.path.length - 1].index;\n }\n getLastStepIndex() {\n return this.length() - 1;\n }\n getLayer() {\n return this.parent.getLayer();\n }\n getMergeWith(beam) {\n return this.#cache.get($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys.MergeWith).get(beam.id);\n }\n getOpening() {\n return this.parent.getOpening(this.#direction);\n }\n getState() {\n return this.parent.getState().openings[this.#direction];\n }\n getStep(stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()];\n }\n getSteps(tile) {\n return tile ? this.#steps.filter((step)=>step.tile === tile) : this.#steps;\n }\n isComplete() {\n return this.isOn() && this.done;\n }\n isConnected() {\n const step = this.getStep();\n return step?.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection) || // Consider beams which have merged into connected beams to also be connected\n step?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto)?.beam.isConnected();\n }\n isOn() {\n const opening = this.getOpening();\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected;\n }\n isPending() {\n return this.isOn() && !this.done;\n }\n length() {\n return this.#steps.length;\n }\n onBeamUpdated(event) {\n const beam = event.detail.beam;\n if (beam.isPending()) // Wait for beam to finish before evaluating\n return;\n const beamLastStep = beam.getStep();\n if (this.isComplete()) {\n const lastStep = this.getStep();\n // Check for invalid collisions\n const collision = lastStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision);\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision))) {\n console.debug(this.toString(), \"re-evaluating collision with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(lastStep.index - 1, 0);\n return;\n }\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto);\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), \"re-evaluating merge into\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0);\n return;\n }\n }\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam);\n if (mergeWith && !beamLastStep?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), \"re-evaluating merge with\", beam.toString());\n this.done = false;\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0);\n }\n }\n onCollision({ beam: beam, collision: collision, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep, puzzle: puzzle }) {\n const isSelf = beam.equals(this);\n console.debug(this.toString(), \"evaluating collision with\", isSelf ? \"self\" : beam.toString());\n if (!beam.isOn()) {\n console.debug(this.toString(), \"ignoring collision with inactive beam\", beam.toString());\n return;\n }\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), \"ignoring collision with sibling beam\", beam.toString());\n return;\n }\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), \"ignoring collision with self while re-evaluating history\");\n return;\n }\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step)=>(0, $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07)(collision.point, step.point));\n if (stepIndex < 0) // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(`Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`);\n const step = this.#steps[stepIndex];\n if (step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), \"ignoring collision with merged beam\", beam.toString());\n return;\n }\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), \"ignoring collision with connected beam in parent terminus\", beam.toString());\n return;\n }\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector) ?? currentStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector);\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(step.point, 1, (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(step.direction));\n const nextStepPoint = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(currentStep.point, 1, (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(currentStep.direction));\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), \"ignoring collision with beam on opposite side of reflector\", beam.toString());\n return;\n }\n }\n const isSameDirection = step.direction === nextStep.direction;\n if (currentStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal)?.exitPortal && !isSameDirection) {\n console.debug(this.toString(), \"ignoring collision with beam using same portal with different exit direction\", beam.toString());\n return;\n }\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), \"has collided with\", isSelf ? \"self\" : this.toString(), collision);\n if (!isSelf) // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision.mirror()))\n });\n else if (!isSameDirection) // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay());\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n });\n }\n console.debug(this.toString(), \"merging with\", beam.toString());\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex);\n const mergeWith = new (0, $ff7d3b28e31d2a30$export$20aab196240bbdf2)(beam, step, stepIndex);\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: ()=>{\n this.#cache.get($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys.MergeWith).set(beam.id, mergeWith);\n },\n onRemove: ()=>{\n this.#cache.get($eb2b229f23b512af$export$693b33588b3dd9d8.CacheKeys.MergeWith).unset(beam.id);\n },\n state: step.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeWith(mergeWith))\n }));\n console.debug(beam.toString(), \"merging into\", this.toString());\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).MergeInto(this))\n });\n }\n onModifierInvoked(event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), \"beam has been toggled off\");\n // Also reset any state changes from user move decisions\n this.updateState((state)=>{\n delete state.moves;\n });\n this.remove();\n }\n return;\n }\n const tiles = event.detail.tiles || [\n event.detail.tile\n ];\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step)=>tiles.some((tile)=>tile.equals(step.tile)));\n if (stepIndex >= 0) {\n console.debug(this.toString(), \"re-evaluating due to modifier being invoked in matching tile\", stepIndex);\n // Re-evaluate beginning at the step before the matched one\n this.done = false;\n this.#stepIndex = Math.max(stepIndex - 1, 0);\n return;\n }\n if (this.isComplete()) {\n const lastStep = this.getStep();\n if (lastStep.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Portal)?.entryPortal) // Check for valid exit portal\n this.done = false;\n }\n }\n remove(stepIndex = 0) {\n this.#updateHistory(stepIndex);\n }\n selected(selected = true) {\n this.path.forEach((path)=>{\n path.selected = selected;\n });\n }\n startDirection() {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6;\n }\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */ step(puzzle) {\n if (!this.isPending()) return;\n console.debug(this.toString(), \"currentStepIndex\", this.#stepIndex);\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent;\n this.addStep(new (0, $268becbe2ffcc8a3$export$fd55ce593607084a)(0, tile, this.getColor(), this.startDirection(), tile.center));\n }\n const currentStepIndex = this.#stepIndex;\n const currentStep = this.#steps[currentStepIndex];\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction;\n const nextStepPoint = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(currentStep.point, currentStep.tile.parameters.inradius, direction);\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile((0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(currentStep.point, nextStepPoint));\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), \"stopping due to out of bounds\");\n const collision = new (0, $ff7d3b28e31d2a30$export$88c9f72b40fcdd85)(0, [\n currentStep.point\n ], this);\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3)(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision))\n });\n }\n const nextStepIndex = currentStepIndex + 1;\n const existingNextStep = this.#steps[nextStepIndex];\n const lastPathIndex = this.path.length - 1;\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1;\n let nextStep = new (0, $268becbe2ffcc8a3$export$fd55ce593607084a)(nextStepIndex, tile, currentStep.color, direction, nextStepPoint, existingNextStep?.pathIndex || lastPathIndex, existingNextStep?.segmentIndex || lastSegmentIndex);\n const items = (0, $c5a0b96abcd6dbcd$export$abf0e2545164275f)(tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items), \"id\");\n console.debug(this.toString(), \"collision items:\", items);\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle).map((collision, index)=>new (0, $ff7d3b28e31d2a30$export$88c9f72b40fcdd85)(index, collision.points, this, collision.item));\n if (collisions.length) console.debug(this.toString(), \"collisions:\", collisions);\n let collisionStep;\n for(let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++){\n const collision = collisions[collisionIndex];\n console.debug(this.toString(), \"resolving collision:\", collision);\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision))\n });\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision: collision,\n collisions: collisions,\n collisionStep: collisionStep,\n currentStep: currentStep,\n nextStep: nextStep,\n existingNextStep: existingNextStep,\n puzzle: puzzle\n });\n if (collisionStep instanceof (0, $268becbe2ffcc8a3$export$fd55ce593607084a)) break;\n }\n if (collisionStep) nextStep = collisionStep;\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++;\n const lastStepIndex = this.getLastStepIndex();\n console.debug(this.toString(), \"new step is same as existing. new step index:\", this.#stepIndex, \"last step index:\", lastStepIndex);\n if (this.#stepIndex === lastStepIndex) // To ensure we mark as done\n this.#onUpdate(this.#stepIndex);\n return existingNextStep;\n } else {\n console.debug(this.toString(), `is revising history at step index: ${nextStepIndex}`, \"existing step:\", existingNextStep, \"new step:\", nextStep);\n this.#updateHistory(nextStepIndex);\n }\n }\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), \"next step point is same as current step point, stopping.\", nextStep);\n return this.updateStep(currentStepIndex, nextStep.copy({\n done: true\n }));\n }\n return this.addStep(nextStep);\n }\n toString() {\n return `[${this.type}:${this.id}:${(0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports)))(this.getColor()).name()}]`;\n }\n update(stepIndex, settings = {}, timeout) {\n if (typeof settings === \"number\") {\n timeout = settings;\n settings = {};\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout);\n return timeout === undefined ? update() : setTimeout(update, timeout);\n }\n updateState(updater, dispatchEvent = true) {\n return this.parent.updateState((state)=>updater(state.openings[this.#direction]), dispatchEvent);\n }\n updateStep(stepIndex, settings) {\n const step = this.getStep(stepIndex);\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings);\n this.#steps[stepIndex] = updatedStep;\n updatedStep.onAdd(updatedStep);\n console.debug(this.toString(), \"updated step at index\", stepIndex, \"from\", step, \"to\", updatedStep);\n this.#onUpdate(stepIndex);\n return updatedStep;\n }\n }\n #getCollisions(items, currentStep, nextStep, puzzle) {\n const segments = [\n currentStep.point,\n nextStep.point\n ];\n const path = new (0, $hFpCu.Path)({\n segments: segments\n });\n const firstPoint = segments[0];\n return items.map((item)=>{\n const points = [];\n const intersections = path.getIntersections(item.getCompoundPath(), // Ignore first point from self which will always collide\n (curveLocation)=>!(item === this && curveLocation.point.equals(firstPoint)));\n points.push(...new Set(intersections.map((intersection)=>intersection.point)));\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam && item !== this) points.push(...item.getSteps().map((step)=>step.point).filter((point)=>segments.some((segment)=>(0, $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07)(point, segment))));\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort((0, $c5a0b96abcd6dbcd$export$79376507b09a66f)(firstPoint));\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint);\n points.forEach((point)=>puzzle.drawDebugPoint(point, {\n fillColor: \"black\"\n }));\n }\n return {\n points: points,\n item: item\n };\n }).filter((result)=>result.points.length).sort((a, b)=>{\n // Sort items returned by proximity to starting point\n const distance = (0, $c5a0b96abcd6dbcd$export$79376507b09a66f)(firstPoint)(a.points[0], b.points[0]);\n if (distance === 0) // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder;\n return distance;\n });\n }\n #getItemIndex(step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0;\n }\n #getUpdatedStep(step, settings) {\n if (typeof settings === \"function\") settings = settings(step);\n return settings instanceof (0, $268becbe2ffcc8a3$export$fd55ce593607084a) ? settings : step.copy(settings);\n }\n #update(stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex);\n this.addStep(this.#getUpdatedStep(step, settings));\n } else this.updateStep(stepIndex, settings);\n }\n #onUpdate(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n stepIndex ??= lastStepIndex;\n const step = this.getStep(stepIndex);\n if (stepIndex === lastStepIndex) // Update beam status if last step was updated\n this.done = step?.done ?? false;\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($eb2b229f23b512af$export$693b33588b3dd9d8.Events.Update, {\n beam: this,\n state: step?.state,\n step: step,\n stepIndex: stepIndex\n });\n }\n #updateHistory(stepIndex) {\n const lastStepIndex = this.getLastStepIndex();\n const step = this.#steps[stepIndex];\n console.debug(this.toString(), \"updateHistory\", \"stepIndex:\", stepIndex, \"lastStepIndex:\", lastStepIndex, \"step:\", step);\n if (step) {\n const currentPath = this.path[step.pathIndex];\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex);\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1);\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item)=>item.remove());\n const deletedSteps = this.#steps.splice(stepIndex);\n console.debug(this.toString(), \"removed steps: \", deletedSteps);\n const tiles = [\n ...new Set(deletedSteps.map((step)=>step.tile))\n ];\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile)=>this.getSteps(tile).length === 0).forEach((tile)=>tile.removeItem(this));\n deletedSteps.forEach((step)=>step.onRemove(step));\n this.done = false;\n this.#stepIndex = stepIndex - 1;\n this.#onUpdate(this.#stepIndex);\n }\n return step;\n }\n static CacheKeys = Object.freeze({\n MergeWith: \"mergeWith\"\n });\n static Events = Object.freeze({\n Collision: \"beam-collision\",\n Connection: \"beam-connection\",\n Merge: \"beam-merge\",\n Update: \"beam-update\"\n });\n}\n\n\n\n\nclass $d8b66316ed43c40f$export$3ad31a823e05e6fb extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $6756284c9622095f$export$cdb1ce8c4b8a5afe)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2)))) {\n sortOrder = 2;\n #ui;\n constructor(tile, state){\n super(...arguments);\n const colors = state.openings.filter((opening)=>opening?.color).flatMap((opening)=>Array.isArray(opening.color) ? opening.color : [\n opening.color\n ]);\n const color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(colors.length ? colors : Array.isArray(state.color) ? state.color : [\n state.color\n ]).hex();\n const openings = state.openings.map((state, direction)=>state ? new $d8b66316ed43c40f$export$3ad31a823e05e6fb.#Opening(state.color || color, direction, state.connected, state.on) : state).filter((opening)=>opening);\n this.#ui = $d8b66316ed43c40f$export$3ad31a823e05e6fb.ui(tile, color, openings);\n this.group.addChildren([\n ...this.#ui.openings,\n this.#ui.terminus\n ]);\n this.color = color;\n this.openings = openings;\n this.radius = this.#ui.radius;\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening)=>new (0, $eb2b229f23b512af$export$693b33588b3dd9d8)(this, state.openings[opening.direction], opening));\n this.update();\n }\n getColorElements() {\n return (0, $c5a0b96abcd6dbcd$export$6d3741128bd5bb7d)(this.openings.map((opening)=>opening.color));\n }\n getOpening(direction) {\n return this.openings.find((opening)=>opening.direction === direction);\n }\n onMove() {\n this.beams.forEach((beam)=>beam.remove());\n }\n onCollision({ beam: beam, collisionStep: collisionStep, currentStep: currentStep, existingNextStep: existingNextStep, nextStep: nextStep }) {\n console.debug(this.toString(), \"collision\", beam.toString());\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), \"ignoring starting terminus collision\");\n return;\n }\n const directionFrom = (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(currentStep.direction);\n // Take rotation of terminus into account\n const opening = this.openings.find((opening)=>this.getDirection(opening.direction) === directionFrom);\n if (opening && opening.color === nextStep.color && (!opening.on || // When re-evaluating history of an already connected opening\n opening.connected && existingNextStep?.state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection)?.terminus.equals(this))) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), \"terminus connection\", this.toString(), opening);\n return nextStep.copy({\n done: true,\n onAdd: ()=>{\n nextStep.onAdd();\n this.onConnection(opening.direction);\n },\n onRemove: ()=>{\n nextStep.onRemove();\n this.onDisconnection(opening.direction);\n },\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).TerminusConnection(this, opening))\n });\n }\n // Otherwise, treat this as a collision\n return collisionStep;\n }\n onConnection(direction) {\n const opening = this.getOpening(direction);\n if (opening.connected) // Already connected\n return;\n opening.connect();\n this.update();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($d8b66316ed43c40f$export$3ad31a823e05e6fb.Events.Connection, {\n terminus: this,\n opening: opening\n });\n }\n onDisconnection(direction) {\n const opening = this.getOpening(direction);\n if (!opening.connected) // Already disconnected\n return;\n opening.disconnect();\n this.update();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($d8b66316ed43c40f$export$3ad31a823e05e6fb.Events.Disconnection, {\n terminus: this,\n opening: opening\n });\n }\n onToggle() {\n this.updateState((state)=>{\n this.openings.filter((opening)=>!opening.connected).forEach((opening)=>{\n opening.toggle();\n state.openings[opening.direction].on = opening.on;\n });\n });\n this.update();\n }\n update() {\n this.beams.forEach((beam)=>{\n const opening = beam.getOpening();\n const item = this.#ui.openings.find((item)=>item.data.direction === opening.direction);\n item.opacity = opening.on ? 1 : $d8b66316ed43c40f$export$3ad31a823e05e6fb.#openingOffOpacity;\n });\n }\n static #openingOffOpacity = 0.3;\n static ui(tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2;\n const terminus = new (0, $hFpCu.Path).RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n });\n const openings = configuration.map((opening)=>{\n const direction = opening.direction;\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[(0, $c5a0b96abcd6dbcd$export$abb49451cc8201c)(direction, 1)].point;\n const p2 = terminus.segments[(0, $c5a0b96abcd6dbcd$export$bac4c4504d574f)(direction, 2)].point;\n const vector = p2.subtract(p1);\n vector.angle += 120;\n const p3 = p1.subtract(vector);\n return new (0, $hFpCu.Path)({\n closed: true,\n data: {\n collidable: false,\n direction: direction\n },\n fillColor: opening.color,\n opacity: opening.on ? 1 : $d8b66316ed43c40f$export$3ad31a823e05e6fb.#openingOffOpacity,\n segments: [\n p1,\n p2,\n p3\n ]\n });\n });\n return {\n openings: openings,\n radius: radius,\n terminus: terminus\n };\n }\n static #Opening = class {\n constructor(color, direction, connected, on){\n this.colors = Array.isArray(color) ? color : [\n color\n ];\n this.color = (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(this.colors).hex();\n this.direction = direction;\n this.connected = connected === true;\n this.on = on === true;\n }\n connect() {\n this.connected = this.on = true;\n }\n disconnect() {\n this.connected = this.on = false;\n }\n toggle() {\n this.on = !this.on;\n }\n };\n static Events = Object.freeze({\n Connection: \"terminus-connection\",\n Disconnection: \"terminus-disconnection\"\n });\n}\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\n\n\nclass $b41b1d7e9f79d24a$export$edf083caefbff926 extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2))) {\n #item;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 30\n });\n this.color = state.color || \"black\";\n this.#item = $b41b1d7e9f79d24a$export$edf083caefbff926.item(tile, this.color);\n this.group.addChild(this.#item);\n }\n midLine() {\n // Two points which form a line through the mid-point of the reflector\n return [\n (0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(this.#item.segments[3].point, this.#item.segments[0].point),\n (0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(this.#item.segments[1].point, this.#item.segments[2].point)\n ];\n }\n getSide(point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return (0, $c5a0b96abcd6dbcd$export$1690e12b840569b9)(this.midLine(), point);\n }\n isSameSide(pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB);\n }\n onCollision({ beam: beam, collision: collision, collisions: collisions, collisionStep: collisionStep, currentStep: currentStep, nextStep: nextStep }) {\n const directionFrom = (0, $c5a0b96abcd6dbcd$export$35d6177dfa7903b5)(currentStep.direction);\n const directionTo = (0, $c5a0b96abcd6dbcd$export$17a5d53cd2e4de6c)(directionFrom, this.rotation);\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), \"stopping due to collision with non-reflective side of reflector\");\n return collisionStep;\n }\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), \"stopping due to reflection back at self\");\n if (collisions.some((collision)=>collision.item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam)) // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return;\n else // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision(collision.copy({\n points: [\n nextStep.point\n ]\n })))\n });\n }\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector)) return nextStep.copy({\n state: nextStep.state.copy(new (0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Reflector(this))\n });\n const point = (0, $c5a0b96abcd6dbcd$export$bd58da2e19cd17da)(currentStep.point, nextStep.tile.parameters.inradius, directionTo);\n return nextStep.copy({\n direction: directionTo,\n point: point\n });\n }\n static item(tile, color) {\n const length = tile.parameters.circumradius;\n const width = tile.parameters.circumradius / 12;\n const topLeft = tile.center.subtract(new (0, $hFpCu.Point)(width / 2, length / 2));\n const size = new (0, $hFpCu.Size)(width, length);\n return new (0, $hFpCu.Path).Rectangle({\n data: {\n size: size\n },\n fillColor: color,\n point: topLeft,\n size: size\n });\n }\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\nclass $3d5ce7d56315a48f$export$cb4338d67ffa8a1d extends (0, $f00c5e8e3b24f55c$export$1288a4f7eae890b0)((0, $f48c890393349af7$export$781de49a9284d537)((0, $7f0d958f0726b89e$export$6d08773d2e66f8f2))) {\n sortOrder = 1;\n constructor(tile, state){\n super(tile, state, {\n rotationDegrees: 60\n });\n const walls = $3d5ce7d56315a48f$export$cb4338d67ffa8a1d.item(tile, state);\n this.group.addChildren(walls);\n }\n static item(tile, configuration) {\n const radius = tile.parameters.circumradius;\n const width = radius / 12;\n const fillColor = tile.styles.default.strokeColor;\n return configuration.directions.map((direction)=>{\n const firstSegment = tile.hexagon.segments[direction].point;\n const nextDirection = (0, $c5a0b96abcd6dbcd$export$bac4c4504d574f)(direction, 1);\n const lastSegment = tile.hexagon.segments[nextDirection].point;\n return new (0, $hFpCu.Path)({\n closed: true,\n fillColor: fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt((direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width),\n tile.hexagon.getLocationAt((nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width),\n lastSegment\n ]\n });\n });\n }\n}\n\n\n\nfunction $f1f4fe4d7a0d7e2f$export$a69a8f92cd2ea310(parent, configuration) {\n let item;\n switch(configuration.type){\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.filter:\n item = new (0, $903d7b3eecd4d3a8$export$ec91da630f36d5ea)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.portal:\n item = new (0, $d430de8cd820c3cd$export$602eac185826482c)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.terminus:\n item = new (0, $d8b66316ed43c40f$export$3ad31a823e05e6fb)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.reflector:\n item = new (0, $b41b1d7e9f79d24a$export$edf083caefbff926)(parent, configuration);\n break;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.wall:\n item = new (0, $3d5ce7d56315a48f$export$cb4338d67ffa8a1d)(parent, configuration);\n break;\n default:\n console.error(\"Ignoring item with unknown type:\", configuration.type);\n break;\n }\n if (item) item.onInitialization();\n return item;\n}\n\n\n\n\nclass $d12f93ae41726cf2$export$4b0ab9e4fad38dea extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"block\";\n title = \"Immutable\";\n}\n\n\n\nclass $54e671c4824aed95$export$5b9db7ce80343746 extends (0, $1f24870028eeabcc$export$5acd5e6efc9671b7) {\n immutable = true;\n name = \"lock\";\n title = \"Locked\";\n}\n\n\n\n\n\n\n\n\n\nclass $7993f13e9449b6b9$export$bdb5f0a1b77546f4 extends (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925) {\n name = \"swap_horiz\";\n title = \"Swap\";\n moveItems(tile) {\n const toItems = tile.items.filter((0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).movable);\n const fromItems = this.tile.items.filter((0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).movable);\n fromItems.forEach((item)=>item.move(tile));\n toItems.forEach((item)=>item.move(this.tile));\n return {\n moved: [\n (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).data(this.tile, tile, fromItems),\n (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925).data(tile, this.tile, toItems)\n ],\n tiles: [\n this.tile,\n tile\n ]\n };\n }\n tileFilter(tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some((0, $1f24870028eeabcc$export$5acd5e6efc9671b7).immutable) || !tile.items.filter((item)=>item.type !== (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam).length;\n }\n}\n\n\nfunction $86f6b44b69017f0d$export$1d55952676fae128(tile, configuration) {\n let modifier;\n switch(configuration.type){\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.immutable:\n modifier = new (0, $d12f93ae41726cf2$export$4b0ab9e4fad38dea)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.lock:\n modifier = new (0, $54e671c4824aed95$export$5b9db7ce80343746)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.move:\n modifier = new (0, $f00c5e8e3b24f55c$export$e49a5ad3dd6df925)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.rotate:\n modifier = new (0, $f48c890393349af7$export$152db69a76b6b79e)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.swap:\n modifier = new (0, $7993f13e9449b6b9$export$bdb5f0a1b77546f4)(tile, configuration);\n break;\n case (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Types.toggle:\n modifier = new (0, $6756284c9622095f$export$bea8ebba691c5813)(tile, configuration);\n break;\n default:\n console.error(\"Ignoring modifier with unknown type:\", configuration.type);\n break;\n }\n return modifier;\n}\n\n\nclass $e980209ca439f282$export$235cb65c20ad2b7 extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n selected = false;\n #ui;\n constructor(coordinates, layout, parameters, state){\n super(null, state, {\n locked: false\n });\n this.#ui = $e980209ca439f282$export$235cb65c20ad2b7.ui(layout, parameters, state, {\n coordinates: coordinates,\n type: this.type\n });\n this.center = this.#ui.center;\n this.coordinates = coordinates;\n this.hexagon = this.#ui.hexagon;\n this.parameters = parameters;\n this.styles = this.#ui.styles;\n this.group.addChildren([\n this.#ui.hexagon,\n this.#ui.indicator\n ]);\n // These need to be last, since they reference this\n this.items = (state.items || []).map((state)=>(0, $f1f4fe4d7a0d7e2f$export$a69a8f92cd2ea310)(this, state)).filter((item)=>item !== undefined);\n this.modifiers = (state.modifiers || []).map((state)=>(0, $86f6b44b69017f0d$export$1d55952676fae128)(this, state)).filter((modifier)=>modifier !== undefined);\n this.update();\n }\n addItem(item) {\n this.items.unshift(item);\n this.update();\n }\n addModifier(modifier) {\n this.modifiers.unshift(modifier);\n this.update();\n }\n afterModify() {\n this.setStyle(this.selected ? \"selected\" : \"default\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: false\n }));\n }\n beforeModify() {\n this.group.bringToFront();\n this.setStyle(\"edit\");\n this.modifiers.forEach((modifier)=>modifier.update({\n disabled: true\n }));\n }\n getState() {\n const state = {\n type: this.type\n };\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item)=>item.type !== (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam).map((item)=>item.getState());\n if (items.length) state.items = items;\n const modifiers = this.modifiers.map((modifier)=>modifier.getState());\n if (modifiers.length) state.modifiers = modifiers;\n return state;\n }\n onTap(event) {\n console.debug(this.coordinates.offset.toString(), this);\n this.items.forEach((item)=>item.onTap(event));\n }\n onDeselected(selectedTile) {\n this.selected = false;\n this.#ui.hexagon.style = this.styles.default;\n this.items.forEach((item)=>item.onDeselected());\n this.modifiers.forEach((modifier)=>modifier.detach());\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($e980209ca439f282$export$235cb65c20ad2b7.Events.Deselected, {\n selectedTile: selectedTile,\n deselectedTile: this\n });\n }\n onSelected(deselectedTile) {\n this.selected = true;\n this.group.bringToFront();\n this.#ui.hexagon.style = this.styles.selected;\n this.items.forEach((item)=>item.onSelected());\n this.modifiers.forEach((modifier)=>modifier.attach());\n }\n removeItem(item) {\n const index = this.items.indexOf(item);\n if (index >= 0) {\n this.items.splice(index, 1);\n this.update();\n }\n }\n removeModifier(modifier) {\n const index = this.modifiers.indexOf(modifier);\n if (index >= 0) {\n this.modifiers.splice(index, 1);\n this.update();\n }\n }\n setStyle(style) {\n this.hexagon.set(this.styles[style]);\n }\n teardown() {\n this.modifiers.forEach((modifier)=>modifier.detach());\n }\n toString() {\n return this.coordinates.offset.toString();\n }\n update() {\n super.update();\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0;\n }\n static parameters(height) {\n const circumradius = height / 2;\n const width = Math.sqrt(3) * circumradius;\n const inradius = width / 2;\n const offsetY = height * (3 / 4);\n return {\n circumradius: circumradius,\n height: height,\n inradius: inradius,\n offsetY: offsetY,\n width: width\n };\n }\n static ui(layout, parameters, configuration, data) {\n const center = new (0, $hFpCu.Point)(layout.startingOffsetX + parameters.inradius + layout.column * parameters.width, layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY);\n const dashWidth = parameters.circumradius / 10;\n const styles = Object.assign({}, $e980209ca439f282$export$235cb65c20ad2b7.Styles, {\n edit: Object.assign({\n dashArray: [\n dashWidth,\n dashWidth\n ]\n }, $e980209ca439f282$export$235cb65c20ad2b7.Styles.edit)\n }, configuration.style || {});\n const hexagon = new (0, $hFpCu.Path).RegularPolygon({\n center: center,\n closed: true,\n data: data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n });\n const indicator = new (0, $hFpCu.Path).RegularPolygon({\n center: (0, $c5a0b96abcd6dbcd$export$78da85ac75754159)(hexagon.segments[1].point, center, (length)=>length / 3),\n data: {\n collidable: false\n },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: {\n fillColor: \"#ccc\"\n }\n });\n return {\n center: center,\n hexagon: hexagon,\n indicator: indicator,\n styles: styles\n };\n }\n static Events = Object.freeze({\n Deselected: \"tile-deselected\",\n Selected: \"tile-selected\"\n });\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new (0, $hFpCu.Color)(\"white\"),\n strokeColor: new (0, $hFpCu.Color)(\"#666\"),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new (0, $hFpCu.Color)(\"black\"),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new (0, $hFpCu.Color)(\"black\"),\n strokeWidth: 2\n }\n });\n}\n\n\n\n\nclass $99408c3658777a44$export$c84671f46d6a1ca extends (0, $92f12ea2067f7a87$export$654f18991713c8c4) {\n #tilesByAxial = [];\n #tilesByOffset = [];\n items = [];\n layers = {};\n tiles = [];\n tileSize = 120;\n constructor(state){\n super(state);\n this.type = state.type || $99408c3658777a44$export$c84671f46d6a1ca.Types.oddR;\n const center = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center;\n const parameters = (0, $e980209ca439f282$export$235cb65c20ad2b7).parameters(this.tileSize);\n const tiles = state.tiles;\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width;\n const startingOffsetY = center.y - height / 2;\n this.layers.tiles = new (0, $hFpCu.Layer)();\n this.layers.items = new (0, $hFpCu.Layer)();\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index)=>{\n const length = row.length;\n // Favor offset rows, since they will be wider\n if (length > current.length || length === current.length && this.#isOffsetRow(index)) return {\n index: index,\n length: length\n };\n return current;\n }, {\n index: 0,\n length: 0\n });\n const width = widestRow.length * parameters.width + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0);\n const startingOffsetX = center.x - width / 2;\n for(let r = 0; r < tiles.length; r++){\n const row = tiles[r];\n const rowByAxial = new Array(row.length).fill(null);\n const rowByOffset = new Array(row.length).fill(null);\n const rowOffset = Math.floor(r / 2);\n for(let c = 0; c < row.length; c++){\n const axial = new (0, $3f2d62ea7d5da3d6$export$c56d3ccff2456440)(c - rowOffset, r);\n const offset = new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(r, c);\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY: startingOffsetY\n };\n const state = row[c];\n if (!state) continue;\n const tile = new (0, $e980209ca439f282$export$235cb65c20ad2b7)({\n axial: axial,\n offset: offset\n }, layout, parameters, state);\n this.layers.tiles.addChild(tile.group);\n if (tile.items.length) {\n this.items.push(...tile.items);\n this.layers.items.addChildren(tile.items.map((item)=>item.group));\n }\n this.tiles.push(tile);\n rowByAxial[axial.q] = tile;\n rowByOffset[offset.c] = tile;\n }\n this.#tilesByAxial.push(rowByAxial);\n this.#tilesByOffset.push(rowByOffset);\n }\n }\n getTileByAxial(axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q];\n }\n getTileByOffset(offset) {\n return this.#tilesByOffset[offset.r][offset.c];\n }\n getState() {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row)=>row.map((tile)=>tile?.getState() || null))\n });\n }\n getNeighboringTile(axial, direction) {\n return this.getTileByAxial((0, $3f2d62ea7d5da3d6$export$c56d3ccff2456440).neighbor(axial, (0, $c5a0b96abcd6dbcd$export$c43d7a950587702b)(direction)));\n }\n teardown() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n }\n #isOffsetRow(index) {\n return index % 2 === 0 ? this.type === $99408c3658777a44$export$c84671f46d6a1ca.Types.evenR : this.type === $99408c3658777a44$export$c84671f46d6a1ca.Types.oddR;\n }\n static Types = Object.freeze({\n evenR: \"even-r\",\n oddR: \"odd-r\"\n });\n}\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nclass $01f46eb6f3519d51$export$991dcf7284de63d extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n constructor(tile, style){\n super(null, style, {\n locked: false,\n type: (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.mask\n });\n const data = {\n type: this.type\n };\n const item = new (0, $hFpCu.Path).RegularPolygon({\n center: tile.center,\n closed: true,\n data: data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({\n fillColor: \"black\"\n }, style)\n });\n this.center = tile.center;\n this.group.addChild(item);\n }\n}\n\n\n\n\n\n\nvar $hFpCu = parcelRequire(\"hFpCu\");\nclass $d156ca7729efc9b3$export$88c9f72b40fcdd85 extends (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2) {\n constructor(state){\n super(null, state, {\n type: (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.collision\n });\n const { center: center, color: color } = state;\n this.center = center;\n this.color = color;\n const item = new (0, $hFpCu.Path).Circle({\n center: center,\n closed: true,\n radius: 4,\n style: {\n fillColor: \"white\",\n strokeColor: color,\n strokeWidth: 2\n }\n });\n this.group.addChild(item);\n }\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst $b090bea9f5eab78e$var$puzzles = {\n \"001\": (parcelRequire(\"c6KoO\")),\n \"002\": (parcelRequire(\"8f7Az\")),\n \"003\": (parcelRequire(\"dwyZF\")),\n \"004\": (parcelRequire(\"cHmaR\")),\n \"005\": (parcelRequire(\"1L3os\")),\n \"006\": (parcelRequire(\"lJdHO\")),\n \"007\": (parcelRequire(\"ixRVx\")),\n \"008\": (parcelRequire(\"mBcXZ\")),\n \"009\": (parcelRequire(\"9RcUi\")),\n \"010\": (parcelRequire(\"iJw1S\")),\n \"011\": (parcelRequire(\"5K06G\")),\n test_infinite_loop: (parcelRequire(\"gO2GV\")),\n test_layout: (parcelRequire(\"biNjg\")),\n test_portal: (parcelRequire(\"4QHZj\")),\n test_reflector: (parcelRequire(\"7Uxjd\"))\n};\nfunction $b090bea9f5eab78e$var$traverse(ids, id, amount) {\n const index = ids.indexOf(id);\n return ids[index < 0 ? index : index + amount];\n}\nclass $b090bea9f5eab78e$var$PuzzleGroup {\n ids;\n constructor(ids){\n this.firstId = ids[0];\n this.ids = ids;\n this.lastId = ids[ids.length - 1];\n }\n get(id) {\n if (this.has(id)) // Note: deep cloning puzzles to prevent mutation\n return structuredClone($b090bea9f5eab78e$var$puzzles[id]);\n }\n has(id) {\n return this.ids.includes(id);\n }\n nextId(id) {\n return $b090bea9f5eab78e$var$traverse(this.ids, id, 1);\n }\n previousId(id) {\n return $b090bea9f5eab78e$var$traverse(this.ids, id, -1);\n }\n}\nconst $b090bea9f5eab78e$export$f68871ba002ca835 = new $b090bea9f5eab78e$var$PuzzleGroup(Object.keys($b090bea9f5eab78e$var$puzzles).sort());\n$b090bea9f5eab78e$export$f68871ba002ca835.hidden = new $b090bea9f5eab78e$var$PuzzleGroup($b090bea9f5eab78e$export$f68871ba002ca835.ids.filter((id)=>id.startsWith(\"test_\")));\n$b090bea9f5eab78e$export$f68871ba002ca835.titles = Object.fromEntries($b090bea9f5eab78e$export$f68871ba002ca835.ids.map((id)=>[\n id,\n $b090bea9f5eab78e$var$puzzles[id].title || id\n ]));\n$b090bea9f5eab78e$export$f68871ba002ca835.visible = new $b090bea9f5eab78e$var$PuzzleGroup($b090bea9f5eab78e$export$f68871ba002ca835.ids.filter((id)=>!$b090bea9f5eab78e$export$f68871ba002ca835.hidden.has(id)));\n\n\n\nconst $4c3397e7d04ad378$var$history = window.history;\nconst $4c3397e7d04ad378$var$localStorage = window.localStorage;\nclass $4c3397e7d04ad378$export$7254cc27399e90bd {\n #current;\n #deltas;\n #id;\n #index;\n #original;\n #selectedTile;\n #version;\n constructor(id, original, deltas, deltasIndex, selectedTile, version){\n this.#id = id;\n this.#original = original;\n this.#deltas = deltas || [];\n this.#index = deltasIndex || this.#lastIndex();\n this.#selectedTile = selectedTile;\n this.#version = version ?? original.version;\n // Update current state\n this.#current = structuredClone(original);\n this.#deltas.filter((delta, index)=>index <= this.#index).forEach((delta)=>this.apply(delta));\n this.#updateCache(id);\n }\n apply(delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === \"string\") delta = JSON.parse(delta);\n console.debug(\"StateManager: applying delta\", delta);\n return (0, $c5a0b96abcd6dbcd$export$1bb10639a2cd4297).patch(this.#current, delta);\n }\n canRedo() {\n return this.#index < this.#lastIndex();\n }\n canUndo() {\n return this.#index >= 0;\n }\n encode() {\n return (0, $c5a0b96abcd6dbcd$export$4e633de97d65d1c8)(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: (0, $b090bea9f5eab78e$export$f68871ba002ca835).has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }));\n }\n getCurrent() {\n return structuredClone(this.#current);\n }\n getId() {\n return this.#id;\n }\n getTitle() {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : \"\");\n }\n getSelectedTile() {\n return this.#selectedTile;\n }\n moves() {\n return this.#index + 1;\n }\n length() {\n return this.#deltas.length;\n }\n redo() {\n const nextIndex = this.#index + 1;\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= nextIndex).forEach((delta)=>this.apply(delta));\n this.#index = nextIndex;\n this.#updateCache();\n }\n }\n reset() {\n this.#current = structuredClone(this.#original);\n this.#deltas = [];\n this.#index = this.#lastIndex();\n this.#selectedTile = undefined;\n $4c3397e7d04ad378$export$7254cc27399e90bd.clearCache(this.getId());\n this.#updateCache();\n }\n setSelectedTile(tile) {\n const id = tile?.coordinates.offset.toString();\n if (this.#selectedTile !== id) {\n this.#selectedTile = id;\n this.#updateCache();\n }\n }\n undo() {\n const previousIndex = this.#index - 1;\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original);\n this.#deltas.filter((delta, index)=>index <= previousIndex).forEach((delta)=>this.apply(delta));\n this.#index = previousIndex;\n this.#updateCache();\n }\n }\n update(newState) {\n const delta = (0, $c5a0b96abcd6dbcd$export$1bb10639a2cd4297).diff(this.#current, newState);\n console.debug(\"delta\", delta);\n if (delta === undefined) // Nothing to do\n return;\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1);\n this.apply(delta);\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta));\n this.#index = this.#lastIndex();\n this.#updateCache();\n }\n #key(key) {\n return $4c3397e7d04ad378$export$7254cc27399e90bd.key(key, this.getId());\n }\n #lastIndex() {\n return this.#deltas.length - 1;\n }\n #updateCache() {\n const id = this.getId();\n const state = this.encode();\n (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash = [\n \"\",\n id,\n state\n ].join(\"/\");\n $4c3397e7d04ad378$var$history.pushState({\n id: id,\n state: state\n }, \"\", (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef));\n $4c3397e7d04ad378$var$localStorage.setItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id, id);\n $4c3397e7d04ad378$var$localStorage.setItem(this.#key($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.state), state);\n }\n static clearCache(id) {\n if (!id) {\n // Clear everything\n (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash = \"\";\n $4c3397e7d04ad378$var$history.pushState({}, \"\", (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef));\n id = $4c3397e7d04ad378$var$localStorage.getItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id);\n $4c3397e7d04ad378$var$localStorage.clear();\n // Keep current puzzle ID\n $4c3397e7d04ad378$var$localStorage.setItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id, id);\n } else {\n // Clear a single puzzle\n (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash = `/${id}`;\n $4c3397e7d04ad378$var$history.pushState({\n id: id\n }, \"\", (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef));\n $4c3397e7d04ad378$var$localStorage.removeItem($4c3397e7d04ad378$export$7254cc27399e90bd.key($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.state, id));\n }\n }\n static fromEncoded(state) {\n state = JSON.parse((0, $c5a0b96abcd6dbcd$export$afb15ede80c42aab)(state));\n state.original = state.original || (0, $b090bea9f5eab78e$export$f68871ba002ca835).get(state.id);\n state.original.version ??= 0;\n return new $4c3397e7d04ad378$export$7254cc27399e90bd(state.id, state.original, state.deltas, state.deltasIndex, state.selectedTile, state.version);\n }\n static fromId(id) {\n return new $4c3397e7d04ad378$export$7254cc27399e90bd(id, (0, $b090bea9f5eab78e$export$f68871ba002ca835).get(id));\n }\n static resolve(id) {\n let state;\n // Allow cache to be cleared via URL param\n if ((0, $c5a0b96abcd6dbcd$export$281ad3752a540efe).has($4c3397e7d04ad378$export$7254cc27399e90bd.ParamKeys.clearCache)) $4c3397e7d04ad378$export$7254cc27399e90bd.clearCache((0, $c5a0b96abcd6dbcd$export$281ad3752a540efe).get($4c3397e7d04ad378$export$7254cc27399e90bd.ParamKeys.clearCache));\n const pathSegments = (0, $c5a0b96abcd6dbcd$export$128fa18b7194ef).hash.substring(1).split(\"/\").filter((path)=>path !== \"\");\n if (!id) // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path)=>!(0, $b090bea9f5eab78e$export$f68871ba002ca835).has(path)).some((segment, index)=>{\n try {\n state = $4c3397e7d04ad378$export$7254cc27399e90bd.fromEncoded(segment);\n id = state.getId();\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e);\n }\n return state !== undefined;\n });\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || $4c3397e7d04ad378$var$localStorage.getItem($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.id) || (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.firstId;\n const localState = $4c3397e7d04ad378$var$localStorage.getItem($4c3397e7d04ad378$export$7254cc27399e90bd.key($4c3397e7d04ad378$export$7254cc27399e90bd.CacheKeys.state, id));\n if (localState) try {\n state = $4c3397e7d04ad378$export$7254cc27399e90bd.fromEncoded(localState);\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e);\n }\n }\n if (state) {\n const cachedVersion = state.#version;\n const originalVersion = state.#original.version;\n if (cachedVersion !== originalVersion) {\n console.debug(`Invalidating cache for ID ${id} due to version mismatch. ` + `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`);\n state = undefined;\n $4c3397e7d04ad378$export$7254cc27399e90bd.clearCache(id);\n }\n }\n if (!state) // Fall back to loading state from Puzzles cache by ID\n state = $4c3397e7d04ad378$export$7254cc27399e90bd.fromId(id);\n if (!state) throw new Error(`Unable to resolve state for ID '${id}'`);\n return state;\n }\n static key(key, id) {\n return `${key}:${id}`;\n }\n static CacheKeys = Object.freeze({\n center: \"center\",\n id: \"id\",\n state: \"state\",\n zoom: \"zoom\"\n });\n static ParamKeys = Object.freeze({\n clearCache: \"clearCache\"\n });\n}\n\n\n\n\n\n\n\n\n\nclass $784ae6de7637c8a9$export$a337a674d761bdc2 {\n #conditions = [];\n constructor(state){\n state.forEach((condition)=>this.#conditionFactory(condition));\n }\n teardown() {\n this.#conditions.forEach((condition)=>condition.teardown());\n $784ae6de7637c8a9$export$a337a674d761bdc2.element.replaceChildren();\n }\n isSolved() {\n return this.#conditions.every((condition)=>condition.isMet());\n }\n #conditionFactory(condition) {\n switch(condition.type){\n case $784ae6de7637c8a9$var$SolutionCondition.Types.connections:\n this.#conditions.push(new $784ae6de7637c8a9$var$Connections(condition));\n break;\n case $784ae6de7637c8a9$var$SolutionCondition.Types.moves:\n this.#conditions.push(new $784ae6de7637c8a9$var$Moves(condition));\n break;\n default:\n console.warn(\"Ignoring condition with unknown type:\", condition.type);\n break;\n }\n }\n static element = document.getElementById(\"solution\");\n}\nclass $784ae6de7637c8a9$var$SolutionCondition {\n constructor(state, elements){\n this.state = state;\n const li = document.createElement(\"li\");\n li.append(...elements);\n $784ae6de7637c8a9$export$a337a674d761bdc2.element.append(li);\n }\n isMet() {}\n teardown() {}\n update() {}\n static Types = Object.freeze(Object.fromEntries([\n \"connections\",\n \"moves\"\n ].map((type)=>[\n type,\n (0, $c5a0b96abcd6dbcd$export$9a00dee1beb8f576)(type)\n ])));\n}\nclass $784ae6de7637c8a9$var$Connections extends $784ae6de7637c8a9$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #connections = [];\n constructor(state){\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $c5a0b96abcd6dbcd$export$43941667eccc070)(\"/\"),\n required,\n (0, $c5a0b96abcd6dbcd$export$f6292fcace2a1886)(\"link\", \"Connections\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $d8b66316ed43c40f$export$3ad31a823e05e6fb).Events.Connection,\n handler: this.update\n },\n {\n type: (0, $d8b66316ed43c40f$export$3ad31a823e05e6fb).Events.Disconnection,\n handler: this.update\n }\n ]);\n }\n isMet() {\n return this.#connections.length === this.state.amount;\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Connections.update\", event);\n const terminus = event.detail.terminus;\n const opening = event.detail.opening;\n const connectionId = `${terminus.id}:${opening.direction}`;\n const connectionIndex = this.#connections.findIndex((connection)=>connection === connectionId);\n if (opening.connected && connectionIndex < 0) this.#connections.push(connectionId);\n else if (!opening.connected && connectionIndex >= 0) this.#connections.splice(connectionIndex, 1);\n this.#completed.textContent = this.#connections.length.toString();\n }\n}\nclass $784ae6de7637c8a9$var$Moves extends $784ae6de7637c8a9$var$SolutionCondition {\n #completed;\n #eventListeners = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #moves = 0;\n constructor(state){\n state.operator ??= $784ae6de7637c8a9$var$Moves.Operators.equalTo;\n if (!Object.values($784ae6de7637c8a9$var$Moves.Operators).includes(state.operator)) throw new Error(`Invalid moves operator: ${state.operator}`);\n const completed = document.createElement(\"span\");\n completed.textContent = \"0\";\n const required = document.createElement(\"span\");\n required.textContent = state.amount.toString();\n const elements = [\n completed,\n (0, $c5a0b96abcd6dbcd$export$43941667eccc070)(state.operator),\n required,\n (0, $c5a0b96abcd6dbcd$export$f6292fcace2a1886)(\"stacks\", \"Moves\")\n ];\n super(state, elements);\n this.#completed = completed;\n this.#eventListeners.add([\n {\n type: (0, $15dbe6491c90ff2e$export$a9753b1ffc289935).Events.Updated,\n handler: this.update\n }\n ]);\n }\n isMet() {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch(this.state.operator){\n case $784ae6de7637c8a9$var$Moves.Operators.equalTo:\n return this.#moves === this.state.amount;\n case $784ae6de7637c8a9$var$Moves.Operators.greaterThan:\n return this.#moves > this.state.amount;\n case $784ae6de7637c8a9$var$Moves.Operators.lessThan:\n return this.#moves < this.state.amount;\n }\n }\n teardown() {\n this.#eventListeners.remove();\n super.teardown();\n }\n update(event) {\n console.debug(\"Moves.update\", event);\n this.#moves = event.detail.state.moves();\n this.#completed.textContent = this.#moves.toString();\n }\n static Operators = Object.freeze({\n equalTo: \"=\",\n greaterThan: \">\",\n lessThan: \"<\"\n });\n}\n\n\n\nconst $15dbe6491c90ff2e$var$elements = Object.freeze({\n main: document.getElementById(\"main\"),\n message: document.getElementById(\"message\"),\n next: document.getElementById(\"next\"),\n previous: document.getElementById(\"previous\"),\n puzzle: document.getElementById(\"puzzle\"),\n puzzleId: document.getElementById(\"puzzle-id\"),\n redo: document.getElementById(\"redo\"),\n reset: document.getElementById(\"reset\"),\n undo: document.getElementById(\"undo\"),\n title: document.querySelector(\"title\")\n});\nclass $15dbe6491c90ff2e$export$a9753b1ffc289935 {\n connections = [];\n debug = false;\n error = false;\n layers = {};\n message;\n selectedTile;\n solved = false;\n #beams;\n #beamsUpdateDelay = 30;\n #collisions = {};\n #eventListeners = new (0, $7cd91973a7925acd$export$b20b719ec758a20f)({\n context: this\n });\n #interact;\n #isUpdatingBeams = false;\n #mask;\n #maskQueue = [];\n #solution;\n #state;\n #termini;\n #tiles = [];\n constructor(){\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).settings.insertItems = false;\n // noinspection JSCheckFunctionSignatures\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).setup($15dbe6491c90ff2e$var$elements.puzzle);\n this.#resize();\n this.layers.mask = new (0, $hFpCu.Layer)();\n this.layers.collisions = new (0, $hFpCu.Layer)();\n this.layers.debug = new (0, $hFpCu.Layer)();\n this.#eventListeners.add([\n {\n type: (0, $eb2b229f23b512af$export$693b33588b3dd9d8).Events.Update,\n handler: this.#onBeamUpdate\n },\n {\n type: \"change\",\n element: $15dbe6491c90ff2e$var$elements.puzzleId,\n handler: this.#onSelect\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.next,\n handler: this.#next\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.previous,\n handler: this.#previous\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.redo,\n handler: this.#redo\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.reset,\n handler: this.#reset\n },\n {\n type: \"click\",\n element: $15dbe6491c90ff2e$var$elements.undo,\n handler: this.#undo\n },\n {\n type: \"keyup\",\n handler: this.#onKeyup\n },\n {\n type: (0, $1f24870028eeabcc$export$5acd5e6efc9671b7).Events.Invoked,\n handler: this.#onModifierInvoked\n },\n {\n type: $15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Mask,\n handler: this.#onMask\n },\n {\n type: \"resize\",\n element: window,\n handler: (0, $c5a0b96abcd6dbcd$export$61fc7d43ac8f84b0)(this.#resize)\n },\n {\n type: (0, $92f12ea2067f7a87$export$654f18991713c8c4).Events.Update,\n handler: this.#onStateUpdate\n },\n {\n type: \"tap\",\n element: $15dbe6491c90ff2e$var$elements.puzzle,\n handler: this.#onTap\n }\n ]);\n this.#interact = new (0, $b8e3951689bc8f9e$export$b0d759d807f751d4)($15dbe6491c90ff2e$var$elements.puzzle);\n this.#updateDropdown();\n this.select();\n }\n centerOnTile(offset) {\n const tile = this.layout.getTileByOffset(offset);\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.center = tile.center;\n }\n clearDebugPoints() {\n this.layers.debug.clear();\n }\n drawDebugPoint(point, style = {}) {\n const circle = new (0, $hFpCu.Path).Circle(Object.assign({\n radius: 3,\n fillColor: \"red\",\n strokeColor: \"white\",\n strokeWidth: 1,\n center: point\n }, style));\n this.layers.debug.addChild(circle);\n }\n getBeamsUpdateDelay() {\n return this.#beamsUpdateDelay;\n }\n getItems(tile) {\n return (tile ? this.#tiles.filter((t)=>t === tile) : this.#tiles).flatMap((tile)=>tile.items);\n }\n getTile(point) {\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.hitTest(point.ceil(), {\n fill: true,\n match: (result)=>result.item.data.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n });\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result;\n }\n mask(mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask);\n throw new Error(`Duplicate mask detected: ${mask.id}`);\n }\n this.#maskQueue.push(mask);\n return;\n }\n this.#mask = mask;\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter).map((tile)=>new (0, $01f46eb6f3519d51$export$991dcf7284de63d)(tile, typeof mask.configuration.style === \"function\" ? mask.configuration.style(tile) : mask.configuration.style));\n this.layers.mask.addChildren(tiles.map((tile)=>tile.group));\n if (mask.message) $15dbe6491c90ff2e$var$elements.message.textContent = mask.message;\n mask.onMask(this);\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Mask);\n }\n select(id) {\n if (id !== undefined && id === this.#state?.getId()) // This ID is already selected\n return;\n try {\n this.#state = (0, $4c3397e7d04ad378$export$7254cc27399e90bd).resolve(id);\n } catch (e) {\n this.#onError(e, \"Could not load puzzle.\");\n }\n this.#reload();\n }\n unmask() {\n this.layers.mask.removeChildren();\n this.#updateMessage(this.selectedTile);\n this.#mask.onUnmask(this);\n this.#mask = undefined;\n document.body.classList.remove($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Mask);\n const mask = this.#maskQueue.pop();\n if (mask) // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(()=>this.mask(mask), 0);\n }\n update() {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true;\n this.#updateBeams();\n }\n }\n updateSelectedTile(tile) {\n const previouslySelectedTile = this.selectedTile;\n this.selectedTile = tile;\n this.#state.setSelectedTile(tile);\n this.#updateMessage(tile);\n if (previouslySelectedTile && previouslySelectedTile !== tile) previouslySelectedTile.onDeselected(tile);\n if (tile && tile !== previouslySelectedTile) tile.onSelected(previouslySelectedTile);\n return previouslySelectedTile;\n }\n updateState() {\n this.#state.update(Object.assign(this.#state.getCurrent(), {\n layout: this.layout.getState()\n }));\n this.#updateActions();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #addLayers() {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer)=>(0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.addLayer(layer));\n }\n #next() {\n const id = (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.nextId(this.#state.getId());\n if (id) this.select(id);\n }\n #onBeamUpdate(event) {\n const beam = event.detail.beam;\n const state = event.detail.state;\n if (state?.has((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision)) {\n const collision = state.get((0, $268becbe2ffcc8a3$export$81262d6ca0162a3).Collision);\n const collisionId = $15dbe6491c90ff2e$export$a9753b1ffc289935.Collision.id(collision.point);\n const existing = this.#collisions[collisionId];\n if (existing) existing.addBeam(beam);\n else this.#collisions[collisionId] = new $15dbe6491c90ff2e$export$a9753b1ffc289935.Collision(this.layers.collisions, [\n beam\n ], collision.point);\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration;\n if (mask?.beam?.equals(beam)) this.unmask();\n }\n Object.values(this.#collisions).forEach((collision)=>collision.update());\n this.#beams.filter((otherBeam)=>otherBeam !== beam).forEach((beam)=>beam.onBeamUpdated(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onError(error, message, cause) {\n this.error = true;\n // Support exclusion of error\n if (typeof error === \"string\") {\n message = error;\n cause = message;\n error = undefined;\n }\n if (error) console.error(error);\n cause = cause ?? error?.cause;\n if (cause) console.error(\"cause:\", cause);\n message = message ?? error?.message ?? \"The puzzle has encountered an error, please consider reporting.\";\n $15dbe6491c90ff2e$var$elements.message.textContent = message;\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Error);\n }\n #onKeyup(event) {\n if (this.debug && event.key === \"s\") this.update();\n }\n #onMask(event) {\n console.debug(\"Mask event\", event);\n this.mask(event.detail.mask);\n }\n #onModifierInvoked(event) {\n const tile = event.detail.tile;\n this.#beams// Update beams in the tile being modified first\n .sort((beam)=>tile.items.some((item)=>item === beam) ? -1 : 0).forEach((beam)=>beam.onModifierInvoked(event, this));\n setTimeout(()=>this.update(), 0);\n }\n #onSelect(event) {\n this.select(event.target.value);\n }\n #onSolved() {\n if (this.solved) return;\n this.solved = true;\n this.updateSelectedTile(undefined);\n this.mask($15dbe6491c90ff2e$export$a9753b1ffc289935.#solvedMask);\n const span = document.createElement(\"span\");\n span.classList.add(\"material-symbols-outlined\");\n span.textContent = \"celebration\";\n span.title = \"Solved!\";\n $15dbe6491c90ff2e$var$elements.message.replaceChildren(span);\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Solved);\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Solved);\n }\n #onStateUpdate() {\n this.updateState();\n }\n #onTap(event) {\n let tile;\n if (this.solved || this.error) return;\n const result = (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.hitTest(event.detail.point);\n switch(result?.item.data.type){\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.mask:\n return;\n case (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial);\n break;\n }\n // There is an active mask\n if (this.#mask) this.#mask.onTap(this, tile);\n else {\n const previouslySelectedTile = this.updateSelectedTile(tile);\n if (tile && tile === previouslySelectedTile) tile.onTap(event);\n }\n }\n #previous() {\n const id = (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.previousId(this.#state.getId());\n if (id) this.select(id);\n }\n #redo() {\n this.#state.redo();\n this.#reload();\n }\n #reload() {\n this.error = false;\n if (this.#state) this.#teardown();\n this.#setup();\n (0, $c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1)($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Updated, {\n state: this.#state\n });\n }\n #removeLayers() {\n Object.values(this.layers).forEach((layer)=>layer.removeChildren());\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).project.clear();\n }\n #reset() {\n this.#state.reset();\n this.#reload();\n }\n #resize() {\n const { width: width, height: height } = $15dbe6491c90ff2e$var$elements.main.getBoundingClientRect();\n $15dbe6491c90ff2e$var$elements.puzzle.style.height = height + \"px\";\n $15dbe6491c90ff2e$var$elements.puzzle.style.width = width + \"px\";\n (0, (/*@__PURE__*/$parcel$interopDefault($hFpCu))).view.viewSize = new (0, $hFpCu.Size)(width, height);\n }\n #setup() {\n // Reset the item IDs, so they are unique per-puzzle\n (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).uniqueId = 0;\n const { layout: layout, message: message, solution: solution } = this.#state.getCurrent();\n this.layout = new (0, $99408c3658777a44$export$c84671f46d6a1ca)(layout);\n this.message = message;\n this.#solution = new (0, $784ae6de7637c8a9$export$a337a674d761bdc2)(solution);\n this.#tiles = this.layout.tiles;\n this.#termini = this.layout.items.filter((item)=>item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.terminus);\n this.#beams = this.#termini.flatMap((terminus)=>terminus.beams);\n this.#addLayers();\n document.body.classList.add($15dbe6491c90ff2e$export$a9753b1ffc289935.Events.Loaded);\n const selectedTileId = this.#state.getSelectedTile();\n const selectedTile = selectedTileId ? this.layout.getTileByOffset(new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(...selectedTileId.split(\",\"))) : undefined;\n this.updateSelectedTile(selectedTile);\n this.update();\n this.#updateActions();\n }\n #teardown() {\n document.body.classList.remove(...Object.values($15dbe6491c90ff2e$export$a9753b1ffc289935.Events));\n this.#removeLayers();\n this.#tiles.forEach((tile)=>tile.teardown());\n this.#tiles = [];\n this.#solution?.teardown();\n this.#solution = undefined;\n this.solved = false;\n this.layout?.teardown();\n this.layout = undefined;\n this.selectedTile = undefined;\n this.#beams = [];\n this.#collisions = {};\n this.#isUpdatingBeams = false;\n this.#mask = undefined;\n this.#termini = [];\n }\n #undo() {\n this.#state.undo();\n this.#reload();\n }\n #updateActions() {\n const id = this.#state.getId();\n const title = this.#state.getTitle();\n // Update browser title\n $15dbe6491c90ff2e$var$elements.title.textContent = `Beaming: Puzzle ${title}`;\n (0, $c5a0b96abcd6dbcd$export$c2255604a80b4506)(\"disabled\", ...Array.from(document.querySelectorAll(\"#actions li\")));\n const disable = [];\n if (!this.#state.canUndo()) disable.push($15dbe6491c90ff2e$var$elements.undo);\n if (!this.#state.canRedo()) disable.push($15dbe6491c90ff2e$var$elements.redo);\n if (!(0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.has(id)) {\n // Custom puzzle\n $15dbe6491c90ff2e$var$elements.puzzleId.value = \"\";\n disable.push($15dbe6491c90ff2e$var$elements.previous, $15dbe6491c90ff2e$var$elements.next);\n } else {\n $15dbe6491c90ff2e$var$elements.puzzleId.value = id;\n if (id === (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.firstId) disable.push($15dbe6491c90ff2e$var$elements.previous);\n else if (id === (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.lastId) disable.push($15dbe6491c90ff2e$var$elements.next);\n }\n (0, $c5a0b96abcd6dbcd$export$d2cf6cd1dc7067d3)(\"disabled\", ...disable);\n }\n #updateDropdown() {\n $15dbe6491c90ff2e$var$elements.puzzleId.replaceChildren();\n for (const id of (0, $b090bea9f5eab78e$export$f68871ba002ca835).visible.ids){\n const option = document.createElement(\"option\");\n option.value = id;\n option.innerText = (0, $b090bea9f5eab78e$export$f68871ba002ca835).titles[id];\n $15dbe6491c90ff2e$var$elements.puzzleId.append(option);\n }\n }\n #updateBeams() {\n const beams = this.#beams.filter((beam)=>beam.isPending());\n if (!beams.length) {\n this.#isUpdatingBeams = false;\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(()=>{\n if (this.#solution.isSolved()) this.#onSolved();\n }, 0);\n return;\n }\n if (this.debug) this.layers.debug.clear();\n beams.forEach((beam)=>beam.step(this));\n // Ensure the UI has a chance to update between loops\n setTimeout(()=>this.#updateBeams(), this.#beamsUpdateDelay);\n }\n #updateMessage(tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items.map((item)=>item.getColorElements(tile)).find((colorElements)=>colorElements.length > 0) || [];\n $15dbe6491c90ff2e$var$elements.message.replaceChildren(...colorElements);\n } else $15dbe6491c90ff2e$var$elements.message.textContent = this.message || \"Select a tile\";\n }\n static Collision = class {\n constructor(layer, beams, point, item){\n this.id = $15dbe6491c90ff2e$export$a9753b1ffc289935.Collision.id(point);\n this.layer = layer;\n this.beams = beams;\n this.point = point;\n this.item = item;\n }\n addBeam(beam) {\n if (!this.beams.some((otherBeam)=>otherBeam.id === beam.id)) this.beams.push(beam);\n return this.beams;\n }\n addItem(color) {\n this.item = new (0, $d156ca7729efc9b3$export$88c9f72b40fcdd85)({\n center: this.point,\n color: color\n });\n this.layer.addChild(this.item.group);\n }\n equals(other) {\n return (0, $c5a0b96abcd6dbcd$export$c23f9d3341b5fd07)(this.point, other?.point);\n }\n getColor() {\n return this.beams.length ? (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(this.beams.map((beam)=>beam.getColor())).hex() : undefined;\n }\n removeItem() {\n if (this.item) {\n this.item.remove();\n this.item = undefined;\n }\n }\n update() {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam)=>this.equals(beam.getCollision()));\n const color = this.getColor();\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) this.removeItem();\n // Add missing collision items\n if (this.beams.length && !this.item) this.addItem(color);\n }\n static id(point) {\n const rounded = point.round();\n return [\n rounded.x,\n rounded.y\n ].join(\",\");\n }\n };\n static Events = Object.freeze({\n Error: \"puzzle-error\",\n Loaded: \"puzzle-loaded\",\n Mask: \"puzzle-mask\",\n Solved: \"puzzle-solved\",\n Updated: \"puzzle-updated\"\n });\n static Mask = class {\n constructor(configuration = {}){\n configuration.style ??= {};\n this.configuration = configuration;\n this.id = configuration.id;\n this.message = configuration.message;\n this.tileFilter = configuration.tileFilter ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525)(true);\n this.onMask = configuration.onMask ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.onTap = configuration.onTap ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n this.onUnmask = configuration.onUnmask ?? (0, $c5a0b96abcd6dbcd$export$8793edee2d425525);\n }\n equals(other) {\n return this.id === other.id;\n }\n };\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item)=>item.type === (0, $7f0d958f0726b89e$export$6d08773d2e66f8f2).Types.beam && item.isConnected();\n static #solvedMask = new $15dbe6491c90ff2e$export$a9753b1ffc289935.Mask({\n style: (tile)=>{\n const beams = tile.items.filter($15dbe6491c90ff2e$export$a9753b1ffc289935.#connectedBeams);\n const colors = beams.flatMap((beam)=>beam.getSteps(tile).flatMap((step)=>step.color));\n return {\n fillColor: (0, (/*@__PURE__*/$parcel$interopDefault($c7b2729851fa20d7$exports))).average(colors).hex()\n };\n },\n tileFilter: (tile)=>tile.items.some($15dbe6491c90ff2e$export$a9753b1ffc289935.#connectedBeams)\n });\n}\n\n\n\nconst $796068c1abf8becc$var$script = document.createElement(\"script\");\n$796068c1abf8becc$var$script.setAttribute(\"src\", \"https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS\");\ndocument.head.append($796068c1abf8becc$var$script);\nconst $796068c1abf8becc$var$dataLayer = window.dataLayer = window.dataLayer || [];\nfunction $796068c1abf8becc$var$gtag() {\n $796068c1abf8becc$var$dataLayer.push(arguments);\n}\n$796068c1abf8becc$var$gtag(\"js\", new Date());\n$796068c1abf8becc$var$gtag(\"config\", \"G-HXLD6EE5NS\");\n\n\nconst $43a0370408551d62$var$doorbellOptions = window.doorbellOptions = {\n appKey: \"o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC\",\n container: document.getElementById(\"feedback-container\"),\n hideButton: true,\n properties: {}\n};\nconst $43a0370408551d62$var$script = document.createElement(\"script\");\n$43a0370408551d62$var$script.setAttribute(\"src\", \"https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0\");\ndocument.head.append($43a0370408551d62$var$script);\ndocument.addEventListener(\"puzzle-updated\", (event)=>{\n $43a0370408551d62$var$doorbellOptions.properties.puzzleId = event.detail.state.getId();\n});\n\n\nconst $b7ac0cf7b7632c81$var$puzzle = new (0, $15dbe6491c90ff2e$export$a9753b1ffc289935)();\nconst $b7ac0cf7b7632c81$var$beaming = {\n debug: $77e640c1aaab669f$export$1c9f709888824e05,\n puzzle: $b7ac0cf7b7632c81$var$puzzle\n};\n// Used by functional tests\n$b7ac0cf7b7632c81$var$beaming.centerOnTile = function(r, c) {\n return $b7ac0cf7b7632c81$var$puzzle.centerOnTile(new (0, $1024ef6a63be0e18$export$2e382909194b1aab)(r, c));\n};\n$b7ac0cf7b7632c81$var$beaming.clearDebugPoints = $b7ac0cf7b7632c81$var$puzzle.clearDebugPoints.bind($b7ac0cf7b7632c81$var$puzzle);\n$b7ac0cf7b7632c81$var$beaming.drawDebugPoint = function(x, y, style) {\n return $b7ac0cf7b7632c81$var$puzzle.drawDebugPoint(new (0, $hFpCu.Point)(x, y), style);\n};\n// Export\nwindow.beaming = $b7ac0cf7b7632c81$var$beaming;\n\n\n//# sourceMappingURL=index.dacb650f.js.map\n","/*!\n * Paper.js v0.12.17 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Thu Nov 3 21:15:36 2022 +0100\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.17\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tminDistance = this.minDistance,\n\t\t\tmaxDistance = this.maxDistance,\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(minDistance, maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0],\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]* 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","\"use strict\";","// This file was generated. Do not modify manually!\nvar astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n// This file was generated. Do not modify manually!\nvar astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938, 6, 4191];\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0898-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n\n// This file was generated. Do not modify manually!\nvar nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c88\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7ca\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7d9\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n// These are a run-length and offset encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range.\n\n// Reserved word lists for various dialects of the language\n\nvar reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n};\n\n// And the keywords\n\nvar ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\nvar keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n};\n\nvar keywordRelationalOperator = /^in(stanceof)?$/;\n\n// ## Character categories\n\nvar nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\nvar nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n}\n\n// Test whether a given character code starts an identifier.\n\nfunction isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n}\n\n// Test whether a given character is part of an identifier.\n\nfunction isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n}\n\n// ## Token types\n\n// The assignment of fine-grained, information-carrying type objects\n// allows the tokenizer to store the information it has about a\n// token in a way that is very cheap for the parser to look up.\n\n// All token type variables start with an underscore, to make them\n// easy to recognize.\n\n// The `beforeExpr` property is used to disambiguate between regular\n// expressions and divisions. It is set on all token types that can\n// be followed by an expression (thus, a slash after them would be a\n// regular expression).\n//\n// The `startsExpr` property is used to check if the token ends a\n// `yield` expression. It is set on all token types that either can\n// directly start an expression (like a quotation mark) or can\n// continue an expression (like the body of a string).\n//\n// `isLoop` marks a keyword as starting a loop, which is important\n// to know when parsing a label, in order to allow or disallow\n// continue jumps to that label.\n\nvar TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n};\n\nfunction binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n}\nvar beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n// Map keyword names to token types.\n\nvar keywords = {};\n\n// Succinct definitions of keyword token types\nfunction kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n}\n\nvar types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"/<=/>=\", 7),\n bitShift: binop(\"<>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n};\n\n// Matches a whole line break (where CRLF is considered a single\n// line break). Used to count lines.\n\nvar lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\nvar lineBreakG = new RegExp(lineBreak.source, \"g\");\n\nfunction isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n}\n\nfunction nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n}\n\nvar nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\nvar skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\nvar ref = Object.prototype;\nvar hasOwnProperty = ref.hasOwnProperty;\nvar toString = ref.toString;\n\nvar hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n); });\n\nvar isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n); });\n\nfunction wordsRegexp(words) {\n return new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\")\n}\n\nfunction codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n}\n\nvar loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n// These are used when `options.locations` is on, for the\n// `startLoc` and `endLoc` properties.\n\nvar Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n};\n\nPosition.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n};\n\nvar SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n};\n\n// The `getLineInfo` function is mostly useful when the\n// `locations` option is off (for performance reasons) and you\n// want to find the line/column position for a given character\n// offset. `input` should be the code string that the offset refers\n// into.\n\nfunction getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n}\n\n// A second argument must be given to configure the parser process.\n// These options are recognized (only `ecmaVersion` is required):\n\nvar defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called\n // when a semicolon is automatically inserted. It will be passed\n // the position of the comma as an offset, and if `locations` is\n // enabled, it is given the location as a `{line, column}` object\n // as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n};\n\n// Interpret and default an options object\n\nvar warnedAboutEcmaVersion = false;\n\nfunction getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n}\n\nfunction pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n}\n\n// Each scope gets a bitset that may contain these flags\nvar\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\nfunction functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n}\n\n// Used in checkLVal* and declareName to determine the type of a binding\nvar\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\nvar Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n};\n\nvar prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\nParser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n};\n\nprototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\nprototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\nprototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n};\n\nprototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n};\n\nprototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\nprototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\nprototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n};\n\nprototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n};\n\nParser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n};\n\nParser.parse = function parse (input, options) {\n return new this(options, input).parse()\n};\n\nParser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n};\n\nParser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n};\n\nObject.defineProperties( Parser.prototype, prototypeAccessors );\n\nvar pp$9 = Parser.prototype;\n\n// ## Parser utilities\n\nvar literal = /^(?:'((?:\\\\.|[^'\\\\])*?)'|\"((?:\\\\.|[^\"\\\\])*?)\")/;\npp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n};\n\n// Predicate that tests whether the next token is of the given\n// type, and if yes, consumes it as a side effect.\n\npp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n};\n\n// Tests whether parsed token is a contextual keyword.\n\npp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n};\n\n// Consumes contextual keyword if possible.\n\npp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n};\n\n// Asserts that following token is given contextual keyword.\n\npp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n};\n\n// Test whether a semicolon can be inserted at the current position.\n\npp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\npp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n};\n\n// Consume a semicolon, or, failing that, see if we are allowed to\n// pretend that there is a semicolon at this position.\n\npp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n};\n\npp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n};\n\n// Expect a token of a given type. If found, consume it, otherwise,\n// raise an unexpected token error.\n\npp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n};\n\n// Raise an unexpected token error.\n\npp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n};\n\nvar DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n};\n\npp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n};\n\npp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n};\n\npp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n};\n\npp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n};\n\nvar pp$8 = Parser.prototype;\n\n// ### Statement parsing\n\n// Parse a program. Initializes the parser, reads any number of\n// statements, and wraps them in a Program node. Optionally takes a\n// `program` argument. If present, the statements will be appended\n// to its body instead of creating a new node.\n\npp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n};\n\nvar loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\npp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '/'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n};\n\n// check 'async [no LineTerminator here] function'\n// - 'async /*foo*/ function' is OK.\n// - 'async /*\\n*/ function' is invalid.\npp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n};\n\n// Parse a single statement.\n//\n// If expecting a statement and finding a slash operator, parse a\n// regular expression literal. This is to handle cases like\n// `if (foo) /blah/.exec(foo)`, where looking at the previous token\n// does not help.\n\npp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n};\n\npp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n};\n\npp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n};\n\npp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n};\n\n// Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n// loop is non-trivial. Basically, we have to parse the init `var`\n// statement or expression, disallowing the `in` operator (see\n// the second parameter to `parseExpression`), and then check\n// whether the next token is `in` or `of`. When there is no init\n// part (semicolon immediately after the opening parenthesis), it\n// is a regular `for` loop.\n\npp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var refDestructuringErrors = new DestructuringErrors;\n var init = this.parseExpression(awaitAt > -1 ? \"await\" : true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n};\n\npp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n};\n\npp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n};\n\npp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n};\n\npp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n};\n\npp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n};\n\n// Reused empty array added for node fields that are always empty.\n\nvar empty$1 = [];\n\npp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n};\n\npp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n};\n\npp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n};\n\npp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n};\n\npp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n};\n\npp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n};\n\npp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n};\n\npp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n};\n\n// Parse a semicolon-enclosed block of statements, handling `\"use\n// strict\"` declarations when `allowStrict` is true (used for\n// function bodies).\n\npp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n};\n\n// Parse a regular `for` loop. The disambiguation code in\n// `parseStatement` will already have parsed the init statement or\n// expression.\n\npp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n};\n\n// Parse a `for`/`in` and `for`/`of` loop, which are almost\n// same from parser's perspective.\n\npp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n};\n\n// Parse a list of variable declarations.\n\npp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n};\n\npp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n};\n\nvar FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n// Parse a function declaration or literal (depending on the\n// `statement & FUNC_STATEMENT`).\n\n// Remove `allowExpressionBody` for 7.0.0, as it is only called with false\npp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n};\n\npp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n};\n\n// Parse a class declaration or literal (depending on the\n// `isStatement` parameter).\n\npp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n};\n\npp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n};\n\npp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n};\n\npp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\npp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n};\n\npp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n};\n\npp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n};\n\npp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n};\n\npp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n};\n\npp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n};\n\npp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n};\n\nfunction isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n}\n\nfunction checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n}\n\n// Parses module export declaration.\n\npp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n};\n\npp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n};\n\npp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n};\n\npp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n};\n\npp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n};\n\npp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n else if (type === \"ParenthesizedExpression\")\n { this.checkPatternExport(exports, pat.expression); }\n};\n\npp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n};\n\npp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n};\n\n// Parses a comma-separated list of module exports.\n\npp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n};\n\npp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n};\n\n// Parses import declaration.\n\npp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n};\n\n// Parses a comma-separated list of module imports.\n\npp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n};\n\npp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n};\n\npp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n};\n\npp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n};\n\npp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n};\n\n// Set `ExpressionStatement#directive` property for directive prologues.\npp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n};\npp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n};\n\nvar pp$7 = Parser.prototype;\n\n// Convert existing expression atom to assignable pattern\n// if possible.\n\npp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n};\n\n// Convert list of expression atoms to binding list.\n\npp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n};\n\n// Parses spread element.\n\npp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n};\n\npp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n};\n\n// Parses lvalue (assignable) atom.\n\npp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n};\n\npp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n};\n\npp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n};\n\npp$7.parseBindingListItem = function(param) {\n return param\n};\n\n// Parses assignment pattern around given atom if possible.\n\npp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n};\n\n// The following three functions all verify that a node is an lvalue —\n// something that can be bound, or assigned to. In order to do so, they perform\n// a variety of checks:\n//\n// - Check that none of the bound/assigned-to identifiers are reserved words.\n// - Record name declarations for bindings in the appropriate scope.\n// - Check duplicate argument names, if checkClashes is set.\n//\n// If a complex binding pattern is encountered (e.g., object and array\n// destructuring), the entire pattern is recursively checked.\n//\n// There are three versions of checkLVal*() appropriate for different\n// circumstances:\n//\n// - checkLValSimple() shall be used if the syntactic construct supports\n// nothing other than identifiers and member expressions. Parenthesized\n// expressions are also correctly handled. This is generally appropriate for\n// constructs for which the spec says\n//\n// > It is a Syntax Error if AssignmentTargetType of [the production] is not\n// > simple.\n//\n// It is also appropriate for checking if an identifier is valid and not\n// defined elsewhere, like import declarations or function/class identifiers.\n//\n// Examples where this is used include:\n// a += …;\n// import a from '…';\n// where a is the node to be checked.\n//\n// - checkLValPattern() shall be used if the syntactic construct supports\n// anything checkLValSimple() supports, as well as object and array\n// destructuring patterns. This is generally appropriate for constructs for\n// which the spec says\n//\n// > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n// > an ArrayLiteral and AssignmentTargetType of [the production] is not\n// > simple.\n//\n// Examples where this is used include:\n// (a = …);\n// const a = …;\n// try { … } catch (a) { … }\n// where a is the node to be checked.\n//\n// - checkLValInnerPattern() shall be used if the syntactic construct supports\n// anything checkLValPattern() supports, as well as default assignment\n// patterns, rest elements, and other constructs that may appear within an\n// object or array destructuring pattern.\n//\n// As a special case, function parameters also use checkLValInnerPattern(),\n// as they also support defaults and rest constructs.\n//\n// These functions deliberately support both assignment and binding constructs,\n// as the logic for both is exceedingly similar. If the node is the target of\n// an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n// should be set to the appropriate BIND_* constant, like BIND_VAR or\n// BIND_LEXICAL.\n//\n// If the function is called with a non-BIND_NONE bindingType, then\n// additionally a checkClashes object may be specified to allow checking for\n// duplicate argument names. checkClashes is ignored if the provided construct\n// is an assignment (i.e., bindingType is BIND_NONE).\n\npp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n};\n\npp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n};\n\npp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n};\n\n// The algorithm used to determine whether a regexp can appear at a\n// given point in the program is loosely based on sweet.js' approach.\n// See https://github.com/mozilla/sweet.js/wiki/design\n\n\nvar TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n};\n\nvar types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n};\n\nvar pp$6 = Parser.prototype;\n\npp$6.initialContext = function() {\n return [types.b_stat]\n};\n\npp$6.curContext = function() {\n return this.context[this.context.length - 1]\n};\n\npp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n};\n\npp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n};\n\npp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n};\n\n// Used to handle egde cases when token context could not be inferred correctly during tokenization phase\n\npp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n};\n\n// Token-specific context update code\n\ntypes$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n};\n\ntypes$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n};\n\ntypes$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n};\n\ntypes$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n};\n\ntypes$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n};\n\ntypes$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n};\n\ntypes$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n};\n\ntypes$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n};\n\n// A recursive descent parser operates by defining functions for all\n// syntactic elements, and recursively calling those, each function\n// advancing the input stream and returning an AST node. Precedence\n// of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n// instead of `(!x)[1]` is handled by the fact that the parser\n// function that parses unary prefix operators is called first, and\n// in turn calls the function that parses `[]` subscripts — that\n// way, it'll receive the node for `x[1]` already parsed, and wraps\n// *that* in the unary operator node.\n//\n// Acorn uses an [operator precedence parser][opp] to handle binary\n// operator precedence, because it is much more compact than using\n// the technique outlined above, which uses different, nesting\n// functions to specify precedence, for all of the ten binary\n// precedence levels that JavaScript defines.\n//\n// [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\nvar pp$5 = Parser.prototype;\n\n// Check if property name clashes with already added.\n// Object/class getters and setters are not allowed to clash —\n// either with each other or with an init property — and in\n// strict mode, init properties are also not allowed to be repeated.\n\npp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n};\n\n// ### Expression parsing\n\n// These nest, from the most general expression type at the top to\n// 'atomic', nondivisible expression types at the bottom. Most of\n// the functions will simply let the function(s) below them parse,\n// and, *if* the syntactic construct they handle is present, wrap\n// the AST node that the inner parser gave them in another node.\n\n// Parse a full expression. The optional arguments are used to\n// forbid the `in` operator (in for loops initalization expressions)\n// and provide reference for storing '=' operator inside shorthand\n// property assignment in contexts where both object expression\n// and object pattern might appear (so it's possible to raise\n// delayed syntax error at correct position).\n\npp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n};\n\n// Parse an assignment expression. This includes applications of\n// operators like `+=`.\n\npp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n};\n\n// Parse a ternary conditional (`?:`) operator.\n\npp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n};\n\n// Start the precedence parser.\n\npp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n};\n\n// Parse binary operators with the operator precedence parsing\n// algorithm. `left` is the left-hand side of the operator.\n// `minPrec` provides context that allows the function to stop and\n// defer further parser to one of its callers when it encounters an\n// operator that has a lower precedence than the set it is parsing.\n\npp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n};\n\npp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n};\n\n// Parse unary operators, both prefix and postfix.\n\npp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" &&\n node.argument.type === \"Identifier\")\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n};\n\nfunction isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression)\n )\n}\n\n// Parse call, dot, and `[]`-subscript expressions.\n\npp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n};\n\npp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n};\n\npp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n};\n\npp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n};\n\npp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n};\n\n// Parse an atomic expression — either a single token that is an\n// expression, an expression started by a keyword like `function` or\n// `new`, or an expression wrapped in punctuation like `()`, `[]`,\n// or `{}`.\n\npp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n};\n\npp$5.parseExprAtomDefault = function() {\n this.unexpected();\n};\n\npp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n var meta = this.parseIdent(true);\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n node.meta = meta;\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n};\n\npp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n};\n\npp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n};\n\npp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n};\n\npp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n};\n\npp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n};\n\npp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n};\n\npp$5.parseParenItem = function(item) {\n return item\n};\n\npp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n};\n\n// New's precedence is slightly tricky. It must allow its argument to\n// be a `[]` or dot subscript expression, but not a call — at least,\n// not without wrapping it in parentheses. Thus, it uses the noCalls\n// argument to parseSubscripts to prevent it from consuming the\n// argument list.\n\nvar empty = [];\n\npp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n var meta = this.parseIdent(true);\n if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {\n node.meta = meta;\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n};\n\n// Parse template expression.\n\npp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value,\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n};\n\npp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n};\n\npp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n};\n\n// Parse an object literal or binding pattern.\n\npp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n};\n\npp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n};\n\npp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n};\n\npp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n};\n\npp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n};\n\n// Initialize empty function node.\n\npp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n};\n\n// Parse object or class method.\n\npp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n};\n\n// Parse arrow function expression with given parameters.\n\npp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n};\n\n// Parse function body and check parameters.\n\npp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n};\n\npp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n};\n\n// Checks function params for various disallowed patterns such as using \"eval\"\n// or \"arguments\" and duplicate parameters.\n\npp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n};\n\n// Parses a comma-separated list of expressions, and returns them as\n// an array. `close` is the token type that ends the list, and\n// `allowEmpty` can be turned on to allow subsequent commas with\n// nothing in between them to be parsed as `null` (which is needed\n// for array literals).\n\npp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n};\n\npp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n};\n\n// Parse the next token as an identifier. If `liberal` is true (used\n// when parsing properties), it will also convert keywords into\n// identifiers.\n\npp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n};\n\npp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n } else {\n this.unexpected();\n }\n return node\n};\n\npp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n};\n\n// Parses yield expression inside generator.\n\npp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n};\n\npp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n};\n\nvar pp$4 = Parser.prototype;\n\n// This function is used to raise exceptions on parse errors. It\n// takes an offset integer (into the current `input`) to indicate\n// the location of the error, attaches the position to the end\n// of the error message, and then raises a `SyntaxError` with that\n// message.\n\npp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n};\n\npp$4.raiseRecoverable = pp$4.raise;\n\npp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n};\n\nvar pp$3 = Parser.prototype;\n\nvar Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n};\n\n// The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\npp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n};\n\npp$3.exitScope = function() {\n this.scopeStack.pop();\n};\n\n// The spec says:\n// > At the top level of a function, or script, function declarations are\n// > treated like var declarations rather than like lexical declarations.\npp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n};\n\npp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n};\n\npp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n};\n\npp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n};\n\npp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n};\n\n// Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\npp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n};\n\nvar Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n};\n\n// Start an AST node, attaching a start offset.\n\nvar pp$2 = Parser.prototype;\n\npp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n};\n\npp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n};\n\n// Finish an AST node, adding `type` and `end` properties.\n\nfunction finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n}\n\npp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n};\n\n// Finish node at given position\n\npp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n};\n\npp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n};\n\n// This file contains Unicode properties extracted from the ECMAScript specification.\n// The lists are extracted like so:\n// $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n// #table-binary-unicode-properties\nvar ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\nvar ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\nvar ecma11BinaryProperties = ecma10BinaryProperties;\nvar ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\nvar ecma13BinaryProperties = ecma12BinaryProperties;\nvar ecma14BinaryProperties = ecma13BinaryProperties;\n\nvar unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n};\n\n// #table-binary-unicode-properties-of-strings\nvar ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\nvar unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n};\n\n// #table-unicode-general-category-values\nvar unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n// #table-unicode-script-values\nvar ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\nvar ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\nvar ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\nvar ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\nvar ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\nvar ecma14ScriptValues = ecma13ScriptValues + \" Hrkt Katakana_Or_Hiragana Kawi Nag_Mundari Nagm Unknown Zzzz\";\n\nvar unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n};\n\nvar data = {};\nfunction buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n}\n\nfor (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n}\n\nvar pp$1 = Parser.prototype;\n\nvar RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = [];\n this.backReferenceNames = [];\n};\n\nRegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n};\n\nRegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n};\n\n// If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n// Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\nRegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n};\n\nRegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n};\n\nRegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n};\n\nRegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n};\n\nRegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n};\n\nRegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n};\n\nRegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n};\n\n/**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n};\n\n/**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\npp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\npp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames.length = 0;\n state.backReferenceNames.length = 0;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (state.groupNames.indexOf(name) === -1) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\npp$1.regexp_disjunction = function(state) {\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n this.regexp_alternative(state);\n }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\npp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state))\n { }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\npp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\npp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\npp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\npp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n};\npp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\npp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n};\npp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\npp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\npp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\npp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\nfunction isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n// But eat eager.\npp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\npp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n};\n\n// GroupSpecifier ::\n// [empty]\n// `?` GroupName\npp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (this.regexp_eatGroupName(state)) {\n if (state.groupNames.indexOf(state.lastStringValue) !== -1) {\n state.raise(\"Duplicate capture group name\");\n }\n state.groupNames.push(state.lastStringValue);\n return\n }\n state.raise(\"Invalid group\");\n }\n};\n\n// GroupName ::\n// `<` RegExpIdentifierName `>`\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n};\n\n// RegExpIdentifierName ::\n// RegExpIdentifierStart\n// RegExpIdentifierName RegExpIdentifierPart\n// Note: this updates `state.lastStringValue` property with the eaten name.\npp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n};\n\n// RegExpIdentifierStart ::\n// UnicodeIDStart\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\npp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n}\n\n// RegExpIdentifierPart ::\n// UnicodeIDContinue\n// `$`\n// `_`\n// `\\` RegExpUnicodeEscapeSequence[+U]\n// \n// \npp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n};\nfunction isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* */ || ch === 0x200D /* */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\npp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n};\npp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\npp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n};\npp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n};\npp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\npp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\npp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\nfunction isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\npp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n};\nfunction isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\npp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\npp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n};\n\n// Return values used by character set parsing methods, needed to\n// forbid negation of sets that can match strings.\nvar CharSetNone = 0; // Nothing parsed\nvar CharSetOk = 1; // Construct parsed, cannot contain strings\nvar CharSetString = 2; // Construct parsed, can contain strings\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\npp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n};\n\nfunction isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n}\n\n// UnicodePropertyValueExpression ::\n// UnicodePropertyName `=` UnicodePropertyValue\n// LoneUnicodePropertyNameOrValue\npp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n};\n\npp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n};\n\npp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n};\n\n// UnicodePropertyName ::\n// UnicodePropertyNameCharacters\npp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\n\nfunction isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n}\n\n// UnicodePropertyValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n};\nfunction isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n}\n\n// LoneUnicodePropertyNameOrValue ::\n// UnicodePropertyValueCharacters\npp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\npp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassContents\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\npp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n// https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\npp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n// https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\npp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\npp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetExpression\n// https://tc39.es/ecma262/#prod-ClassUnion\n// https://tc39.es/ecma262/#prod-ClassIntersection\n// https://tc39.es/ecma262/#prod-ClassSubtraction\npp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetRange\npp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetOperand\npp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n};\n\n// https://tc39.es/ecma262/#prod-NestedClass\npp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunction\npp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n};\n\n// https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\npp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n};\n\n// https://tc39.es/ecma262/#prod-ClassString\n// https://tc39.es/ecma262/#prod-NonEmptyClassString\npp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetCharacter\npp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\nfunction isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\nfunction isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n}\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\npp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n};\n\n// https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\nfunction isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\npp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\npp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\npp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n};\nfunction isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n}\nfunction hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n// Allows only 0-377(octal) i.e. 0-255(decimal).\npp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n};\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\npp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n};\nfunction isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n}\n\n// https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n// https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n// And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\npp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n};\n\n// Object type used to represent tokens. Note that normally, tokens\n// simply exist as properties on the parser object. This is only\n// used for the onToken callback and the external tokenizer.\n\nvar Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n};\n\n// ## Tokenizer\n\nvar pp = Parser.prototype;\n\n// Move to the next token\n\npp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n};\n\npp.getToken = function() {\n this.next();\n return new Token(this)\n};\n\n// If we're in an ES6 environment, make parsers iterable\nif (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n// Toggle strict mode. Re-reads the next number or string to please\n// pedantic tests (`\"use strict\"; 010;` should fail).\n\n// Read a single token, updating the parser object's token-related\n// properties.\n\npp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n};\n\npp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n};\n\npp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n};\n\npp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\npp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n};\n\n// Called at the start of the parse and after every token. Skips\n// whitespace and comments, and.\n\npp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n};\n\n// Called at the end of every token. Sets `end`, `val`, and\n// maintains `context` and `exprAllowed`, and skips the space after\n// the token, so that the next one's `start` will point at the\n// right position.\n\npp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n};\n\n// ### Token reading\n\n// This is the function that is called to fetch the next token. It\n// is somewhat obscure, because it works in character codes rather\n// than characters, and because operator parsing has been inlined\n// into it.\n//\n// All in the name of speed.\n//\npp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n};\n\npp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n};\n\npp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n};\n\npp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n};\n\npp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n};\n\npp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n};\n\npp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // ` convert colors\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n // operators --> modify existing Colors\n\n\n\n\n\n\n\n\n\n\n // interpolators\n\n\n\n\n\n\n\n\n\n\n\n\n // generators -- > create new colors\n chroma.average = average;\n chroma.bezier = bezier_1;\n chroma.blend = blend_1;\n chroma.cubehelix = cubehelix;\n chroma.mix = chroma.interpolate = mix$1;\n chroma.random = random_1;\n chroma.scale = scale$2;\n\n // other utility methods\n chroma.analyze = analyze_1.analyze;\n chroma.contrast = contrast;\n chroma.deltaE = deltaE;\n chroma.distance = distance;\n chroma.limits = analyze_1.limits;\n chroma.valid = valid;\n\n // scale\n chroma.scales = scales;\n\n // colors\n chroma.colors = w3cx11_1;\n chroma.brewer = colorbrewer_1;\n\n var chroma_js = chroma;\n\n return chroma_js;\n\n}));\n","import { Layout } from './layout'\nimport chroma from 'chroma-js'\nimport paper, { Layer, Path, Size } from 'paper'\nimport { addClass, debounce, emitEvent, fuzzyEquals, noop, removeClass } from './util'\nimport { Item } from './item'\nimport { Mask } from './items/mask'\nimport { Modifier } from './modifier'\nimport { Beam } from './items/beam'\nimport { Collision as CollisionItem } from './items/collision'\nimport { Stateful } from './stateful'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { State } from './state'\nimport { Puzzles } from '../puzzles'\nimport { StepState } from './step'\nimport { EventListeners } from './eventListeners'\nimport { Solution } from './solution'\nimport { Interact } from './interact'\n\nconst elements = Object.freeze({\n main: document.getElementById('main'),\n message: document.getElementById('message'),\n next: document.getElementById('next'),\n previous: document.getElementById('previous'),\n puzzle: document.getElementById('puzzle'),\n puzzleId: document.getElementById('puzzle-id'),\n redo: document.getElementById('redo'),\n reset: document.getElementById('reset'),\n undo: document.getElementById('undo'),\n title: document.querySelector('title')\n})\n\n// There are various spots below that utilize setTimeout in order to process events in order and to prevent\n// long-running computations from blocking UI updates.\n// See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Event_loop\nexport class Puzzle {\n connections = []\n debug = false\n error = false\n layers = {}\n message\n selectedTile\n solved = false\n\n #beams\n #beamsUpdateDelay = 30\n #collisions = {}\n #eventListeners = new EventListeners({ context: this })\n #interact\n #isUpdatingBeams = false\n #mask\n #maskQueue = []\n #solution\n #state\n #termini\n #tiles = []\n\n constructor () {\n // Don't automatically insert items into the scene graph, they must be explicitly inserted\n paper.settings.insertItems = false\n // noinspection JSCheckFunctionSignatures\n paper.setup(elements.puzzle)\n\n this.#resize()\n\n this.layers.mask = new Layer()\n this.layers.collisions = new Layer()\n this.layers.debug = new Layer()\n\n this.#eventListeners.add([\n { type: Beam.Events.Update, handler: this.#onBeamUpdate },\n { type: 'change', element: elements.puzzleId, handler: this.#onSelect },\n { type: 'click', element: elements.next, handler: this.#next },\n { type: 'click', element: elements.previous, handler: this.#previous },\n { type: 'click', element: elements.redo, handler: this.#redo },\n { type: 'click', element: elements.reset, handler: this.#reset },\n { type: 'click', element: elements.undo, handler: this.#undo },\n { type: 'keyup', handler: this.#onKeyup },\n { type: Modifier.Events.Invoked, handler: this.#onModifierInvoked },\n { type: Puzzle.Events.Mask, handler: this.#onMask },\n { type: 'resize', element: window, handler: debounce(this.#resize) },\n { type: Stateful.Events.Update, handler: this.#onStateUpdate },\n { type: 'tap', element: elements.puzzle, handler: this.#onTap }\n ])\n\n this.#interact = new Interact(elements.puzzle)\n this.#updateDropdown()\n\n this.select()\n }\n\n centerOnTile (offset) {\n const tile = this.layout.getTileByOffset(offset)\n paper.view.center = tile.center\n }\n\n clearDebugPoints () {\n this.layers.debug.clear()\n }\n\n drawDebugPoint (point, style = {}) {\n const circle = new Path.Circle(Object.assign({\n radius: 3,\n fillColor: 'red',\n strokeColor: 'white',\n strokeWidth: 1,\n center: point\n }, style))\n this.layers.debug.addChild(circle)\n }\n\n getBeamsUpdateDelay () {\n return this.#beamsUpdateDelay\n }\n\n getItems (tile) {\n return (tile ? this.#tiles.filter((t) => t === tile) : this.#tiles).flatMap((tile) => tile.items)\n }\n\n getTile (point) {\n const result = paper.project.hitTest(point.ceil(), {\n fill: true,\n match: (result) => result.item.data.type === Item.Types.tile,\n segments: true,\n stroke: true,\n tolerance: 0\n })\n return result ? this.layout.getTileByAxial(result.item.data.coordinates.axial) : result\n }\n\n mask (mask) {\n if (this.#mask) {\n if (this.#mask.equals(mask)) {\n console.debug(mask)\n throw new Error(`Duplicate mask detected: ${mask.id}`)\n }\n\n this.#maskQueue.push(mask)\n return\n }\n\n this.#mask = mask\n\n // TODO animation?\n const tiles = this.#tiles.filter(mask.tileFilter)\n .map((tile) => new Mask(\n tile,\n typeof mask.configuration.style === 'function'\n ? mask.configuration.style(tile)\n : mask.configuration.style\n ))\n\n this.layers.mask.addChildren(tiles.map((tile) => tile.group))\n\n if (mask.message) {\n elements.message.textContent = mask.message\n }\n\n mask.onMask(this)\n\n document.body.classList.add(Puzzle.Events.Mask)\n }\n\n select (id) {\n if (id !== undefined && id === this.#state?.getId()) {\n // This ID is already selected\n return\n }\n\n try {\n this.#state = State.resolve(id)\n } catch (e) {\n this.#onError(e, 'Could not load puzzle.')\n }\n\n this.#reload()\n }\n\n unmask () {\n this.layers.mask.removeChildren()\n this.#updateMessage(this.selectedTile)\n this.#mask.onUnmask(this)\n this.#mask = undefined\n\n document.body.classList.remove(Puzzle.Events.Mask)\n\n const mask = this.#maskQueue.pop()\n if (mask) {\n // Evaluate after any current events have processed (e.g. beam updates from last mask)\n setTimeout(() => this.mask(mask), 0)\n }\n }\n\n update () {\n if (!this.#mask && !this.#isUpdatingBeams) {\n this.#isUpdatingBeams = true\n this.#updateBeams()\n }\n }\n\n updateSelectedTile (tile) {\n const previouslySelectedTile = this.selectedTile\n\n this.selectedTile = tile\n this.#state.setSelectedTile(tile)\n this.#updateMessage(tile)\n\n if (previouslySelectedTile && previouslySelectedTile !== tile) {\n previouslySelectedTile.onDeselected(tile)\n }\n\n if (tile && tile !== previouslySelectedTile) {\n tile.onSelected(previouslySelectedTile)\n }\n\n return previouslySelectedTile\n }\n\n updateState () {\n this.#state.update(Object.assign(this.#state.getCurrent(), { layout: this.layout.getState() }))\n this.#updateActions()\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #addLayers () {\n // Add layers in the order we want them\n [\n this.layout.layers.tiles,\n this.layout.layers.items,\n this.layers.mask,\n this.layers.collisions,\n this.layers.debug\n ].forEach((layer) => paper.project.addLayer(layer))\n }\n\n #next () {\n const id = Puzzles.visible.nextId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #onBeamUpdate (event) {\n const beam = event.detail.beam\n const state = event.detail.state\n\n if (state?.has(StepState.Collision)) {\n const collision = state.get(StepState.Collision)\n const collisionId = Puzzle.Collision.id(collision.point)\n const existing = this.#collisions[collisionId]\n\n if (existing) {\n existing.addBeam(beam)\n } else {\n this.#collisions[collisionId] = new Puzzle.Collision(this.layers.collisions, [beam], collision.point)\n }\n\n // Beam with collision has an active mask\n const mask = this.#mask?.configuration\n if (mask?.beam?.equals(beam)) {\n this.unmask()\n }\n }\n\n Object.values(this.#collisions).forEach((collision) => collision.update())\n\n this.#beams\n .filter((otherBeam) => otherBeam !== beam)\n .forEach((beam) => beam.onBeamUpdated(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onError (error, message, cause) {\n this.error = true\n\n // Support exclusion of error\n if (typeof error === 'string') {\n message = error\n cause = message\n error = undefined\n }\n\n if (error) {\n console.error(error)\n }\n\n cause = cause ?? error?.cause\n if (cause) {\n console.error('cause:', cause)\n }\n\n message = message ?? error?.message ?? 'The puzzle has encountered an error, please consider reporting.'\n elements.message.textContent = message\n document.body.classList.add(Puzzle.Events.Error)\n }\n\n #onKeyup (event) {\n if (this.debug && event.key === 's') {\n this.update()\n }\n }\n\n #onMask (event) {\n console.debug('Mask event', event)\n this.mask(event.detail.mask)\n }\n\n #onModifierInvoked (event) {\n const tile = event.detail.tile\n\n this.#beams\n // Update beams in the tile being modified first\n .sort((beam) => tile.items.some((item) => item === beam) ? -1 : 0)\n .forEach((beam) => beam.onModifierInvoked(event, this))\n\n setTimeout(() => this.update(), 0)\n }\n\n #onSelect (event) {\n this.select(event.target.value)\n }\n\n #onSolved () {\n if (this.solved) {\n return\n }\n\n this.solved = true\n\n this.updateSelectedTile(undefined)\n this.mask(Puzzle.#solvedMask)\n\n const span = document.createElement('span')\n span.classList.add('material-symbols-outlined')\n span.textContent = 'celebration'\n span.title = 'Solved!'\n\n elements.message.replaceChildren(span)\n\n document.body.classList.add(Puzzle.Events.Solved)\n emitEvent(Puzzle.Events.Solved)\n }\n\n #onStateUpdate () {\n this.updateState()\n }\n\n #onTap (event) {\n let tile\n\n if (this.solved || this.error) {\n return\n }\n\n const result = paper.project.hitTest(event.detail.point)\n\n switch (result?.item.data.type) {\n case Item.Types.mask:\n return\n case Item.Types.tile:\n tile = this.layout.getTileByAxial(result.item.data.coordinates.axial)\n break\n }\n\n // There is an active mask\n if (this.#mask) {\n this.#mask.onTap(this, tile)\n } else {\n const previouslySelectedTile = this.updateSelectedTile(tile)\n\n if (tile && tile === previouslySelectedTile) {\n tile.onTap(event)\n }\n }\n }\n\n #previous () {\n const id = Puzzles.visible.previousId(this.#state.getId())\n if (id) {\n this.select(id)\n }\n }\n\n #redo () {\n this.#state.redo()\n this.#reload()\n }\n\n #reload () {\n this.error = false\n\n if (this.#state) {\n this.#teardown()\n }\n\n this.#setup()\n\n emitEvent(Puzzle.Events.Updated, { state: this.#state })\n }\n\n #removeLayers () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n paper.project.clear()\n }\n\n #reset () {\n this.#state.reset()\n this.#reload()\n }\n\n #resize () {\n const { width, height } = elements.main.getBoundingClientRect()\n elements.puzzle.style.height = height + 'px'\n elements.puzzle.style.width = width + 'px'\n paper.view.viewSize = new Size(width, height)\n }\n\n #setup () {\n // Reset the item IDs, so they are unique per-puzzle\n Item.uniqueId = 0\n\n const { layout, message, solution } = this.#state.getCurrent()\n\n this.layout = new Layout(layout)\n this.message = message\n this.#solution = new Solution(solution)\n\n this.#tiles = this.layout.tiles\n this.#termini = this.layout.items.filter((item) => item.type === Item.Types.terminus)\n this.#beams = this.#termini.flatMap((terminus) => terminus.beams)\n\n this.#addLayers()\n\n document.body.classList.add(Puzzle.Events.Loaded)\n\n const selectedTileId = this.#state.getSelectedTile()\n const selectedTile = selectedTileId\n ? this.layout.getTileByOffset(new OffsetCoordinates(...selectedTileId.split(',')))\n : undefined\n\n this.updateSelectedTile(selectedTile)\n this.update()\n this.#updateActions()\n }\n\n #teardown () {\n document.body.classList.remove(...Object.values(Puzzle.Events))\n\n this.#removeLayers()\n\n this.#tiles.forEach((tile) => tile.teardown())\n this.#tiles = []\n this.#solution?.teardown()\n this.#solution = undefined\n this.solved = false\n this.layout?.teardown()\n this.layout = undefined\n this.selectedTile = undefined\n this.#beams = []\n this.#collisions = {}\n this.#isUpdatingBeams = false\n this.#mask = undefined\n this.#termini = []\n }\n\n #undo () {\n this.#state.undo()\n this.#reload()\n }\n\n #updateActions () {\n const id = this.#state.getId()\n const title = this.#state.getTitle()\n\n // Update browser title\n elements.title.textContent = `Beaming: Puzzle ${title}`\n\n removeClass('disabled', ...Array.from(document.querySelectorAll('#actions li')))\n\n const disable = []\n\n if (!this.#state.canUndo()) {\n disable.push(elements.undo)\n }\n\n if (!this.#state.canRedo()) {\n disable.push(elements.redo)\n }\n\n if (!Puzzles.visible.has(id)) {\n // Custom puzzle\n elements.puzzleId.value = ''\n disable.push(elements.previous, elements.next)\n } else {\n elements.puzzleId.value = id\n\n if (id === Puzzles.visible.firstId) {\n disable.push(elements.previous)\n } else if (id === Puzzles.visible.lastId) {\n disable.push(elements.next)\n }\n }\n\n addClass('disabled', ...disable)\n }\n\n #updateDropdown () {\n elements.puzzleId.replaceChildren()\n for (const id of Puzzles.visible.ids) {\n const option = document.createElement('option')\n option.value = id\n option.innerText = Puzzles.titles[id]\n elements.puzzleId.append(option)\n }\n }\n\n #updateBeams () {\n const beams = this.#beams.filter((beam) => beam.isPending())\n\n if (!beams.length) {\n this.#isUpdatingBeams = false\n\n // Ensure we check for a solution after all other in-progress events have processed\n setTimeout(() => {\n if (this.#solution.isSolved()) {\n this.#onSolved()\n }\n }, 0)\n return\n }\n\n if (this.debug) {\n this.layers.debug.clear()\n }\n\n beams.forEach((beam) => beam.step(this))\n\n // Ensure the UI has a chance to update between loops\n setTimeout(() => this.#updateBeams(), this.#beamsUpdateDelay)\n }\n\n #updateMessage (tile) {\n if (tile) {\n // Check to see if tile has any color elements that need to be displayed\n const colorElements = tile.items\n .map((item) => item.getColorElements(tile))\n .find((colorElements) => colorElements.length > 0) || []\n elements.message.replaceChildren(...colorElements)\n } else {\n elements.message.textContent = this.message || 'Select a tile'\n }\n }\n\n static Collision = class {\n constructor (layer, beams, point, item = undefined) {\n this.id = Puzzle.Collision.id(point)\n this.layer = layer\n this.beams = beams\n this.point = point\n this.item = item\n }\n\n addBeam (beam) {\n if (!this.beams.some((otherBeam) => otherBeam.id === beam.id)) {\n this.beams.push(beam)\n }\n\n return this.beams\n }\n\n addItem (color) {\n this.item = new CollisionItem({ center: this.point, color })\n this.layer.addChild(this.item.group)\n }\n\n equals (other) {\n return fuzzyEquals(this.point, other?.point)\n }\n\n getColor () {\n return this.beams.length\n ? chroma.average(this.beams.map((beam) => beam.getColor())).hex()\n : undefined\n }\n\n removeItem () {\n if (this.item) {\n this.item.remove()\n this.item = undefined\n }\n }\n\n update () {\n // Remove any beam which no longer matches its collision point\n this.beams = this.beams.filter((beam) => this.equals(beam.getCollision()))\n\n const color = this.getColor()\n\n // Remove no longer valid collision items\n if (this.item && (!this.beams.length || this.item.color !== color)) {\n this.removeItem()\n }\n\n // Add missing collision items\n if (this.beams.length && !this.item) {\n this.addItem(color)\n }\n }\n\n static id (point) {\n const rounded = point.round()\n return [rounded.x, rounded.y].join(',')\n }\n }\n\n static Events = Object.freeze({\n Error: 'puzzle-error',\n Loaded: 'puzzle-loaded',\n Mask: 'puzzle-mask',\n Solved: 'puzzle-solved',\n Updated: 'puzzle-updated'\n })\n\n static Mask = class {\n constructor (configuration = {}) {\n configuration.style ??= {}\n this.configuration = configuration\n\n this.id = configuration.id\n this.message = configuration.message\n this.tileFilter = configuration.tileFilter ?? noop(true)\n this.onMask = configuration.onMask ?? noop\n this.onTap = configuration.onTap ?? noop\n this.onUnmask = configuration.onUnmask ?? noop\n }\n\n equals (other) {\n return this.id === other.id\n }\n }\n\n // Filters for all beams that are connected to the terminus, or have been merged into a beam that is connected\n static #connectedBeams = (item) => item.type === Item.Types.beam && item.isConnected()\n\n static #solvedMask = new Puzzle.Mask({\n style: (tile) => {\n const beams = tile.items.filter(Puzzle.#connectedBeams)\n const colors = beams.flatMap((beam) => beam.getSteps(tile).flatMap((step) => step.color))\n return { fillColor: chroma.average(colors).hex() }\n },\n tileFilter: (tile) => tile.items.some(Puzzle.#connectedBeams)\n })\n}\n","import paper, { Layer } from 'paper'\nimport { CubeCoordinates } from './coordinates/cube'\nimport { OffsetCoordinates } from './coordinates/offset'\nimport { Tile } from './items/tile'\nimport { getConvertedDirection } from './util'\nimport { Stateful } from './stateful'\n\nexport class Layout extends Stateful {\n #tilesByAxial = []\n #tilesByOffset = []\n\n items = []\n layers = {}\n tiles = []\n tileSize = 120\n\n constructor (state) {\n super(state)\n\n this.type = state.type || Layout.Types.oddR\n\n const center = paper.view.center\n const parameters = Tile.parameters(this.tileSize)\n const tiles = state.tiles\n\n // Using parameters.width because we want the \"stacked height\", or the height of the hexagon without the points.\n const height = tiles.length * parameters.width\n const startingOffsetY = center.y - (height / 2)\n\n this.layers.tiles = new Layer()\n this.layers.items = new Layer()\n\n // Find the widest row\n const widestRow = tiles.reduce((current, row, index) => {\n const length = row.length\n\n // Favor offset rows, since they will be wider\n if (length > current.length || (length === current.length && this.#isOffsetRow(index))) {\n return { index, length }\n }\n\n return current\n }, { index: 0, length: 0 })\n\n const width = (widestRow.length * parameters.width) + (this.#isOffsetRow(widestRow.index) ? parameters.inradius : 0)\n const startingOffsetX = center.x - (width / 2)\n\n for (let r = 0; r < tiles.length; r++) {\n const row = tiles[r]\n const rowByAxial = new Array(row.length).fill(null)\n const rowByOffset = new Array(row.length).fill(null)\n const rowOffset = Math.floor(r / 2)\n\n for (let c = 0; c < row.length; c++) {\n const axial = new CubeCoordinates(c - rowOffset, r)\n const offset = new OffsetCoordinates(r, c)\n\n const layout = {\n row: r,\n column: c,\n // Shift row to the right if it is an offset row\n startingOffsetX: startingOffsetX + (this.#isOffsetRow(r) ? parameters.inradius : 0),\n startingOffsetY\n }\n\n const state = row[c]\n if (!state) {\n continue\n }\n\n const tile = new Tile({ axial, offset }, layout, parameters, state)\n\n this.layers.tiles.addChild(tile.group)\n\n if (tile.items.length) {\n this.items.push(...tile.items)\n this.layers.items.addChildren(tile.items.map((item) => item.group))\n }\n\n this.tiles.push(tile)\n\n rowByAxial[axial.q] = tile\n rowByOffset[offset.c] = tile\n }\n\n this.#tilesByAxial.push(rowByAxial)\n this.#tilesByOffset.push(rowByOffset)\n }\n }\n\n getTileByAxial (axial) {\n return (this.#tilesByAxial[axial.r] || [])[axial.q]\n }\n\n getTileByOffset (offset) {\n return this.#tilesByOffset[offset.r][offset.c]\n }\n\n getState () {\n // Tiles are defined by offset in the puzzle state\n return Object.assign(super.getState(), {\n tiles: this.#tilesByOffset.map((row) => row.map((tile) => tile?.getState() || null))\n })\n }\n\n getNeighboringTile (axial, direction) {\n return this.getTileByAxial(CubeCoordinates.neighbor(axial, getConvertedDirection(direction)))\n }\n\n teardown () {\n Object.values(this.layers).forEach((layer) => layer.removeChildren())\n }\n\n #isOffsetRow (index) {\n return index % 2 === 0 ? this.type === Layout.Types.evenR : this.type === Layout.Types.oddR\n }\n\n static Types = Object.freeze({\n evenR: 'even-r',\n oddR: 'odd-r'\n })\n}\n","import { OffsetCoordinates } from './offset'\n\n/**\n * @see https://www.redblobgames.com/grids/hexagons/#coordinates\n */\nexport class CubeCoordinates {\n constructor (q, r, s) {\n if (!s) s = -q - r\n this.coordinates = [q, r, s]\n this.q = q\n this.r = r\n this.s = s\n }\n\n add (other) {\n return CubeCoordinates.add(this, other)\n }\n\n equals (other) {\n return this.q === other.q && this.r === other.r && this.s === other.s\n }\n\n isNeighbor (other) {\n return CubeCoordinates.isNeighbor(this, other)\n }\n\n neighbor (direction) {\n return CubeCoordinates.neighbor(this, direction)\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static add (a, b) {\n return new CubeCoordinates(a.q + b.q, a.r + b.r)\n }\n\n static direction (direction) {\n if (direction === 0) direction = 6\n // PaperJS uses a clockwise system, but the axial system is counter-clockwise.\n // So we flip the direction here by subtracting it from six\n return CubeCoordinates.directions[6 - direction]\n }\n\n static directions = [\n new CubeCoordinates(1, 0),\n new CubeCoordinates(1, -1),\n new CubeCoordinates(0, -1),\n new CubeCoordinates(-1, 0),\n new CubeCoordinates(-1, 1),\n new CubeCoordinates(0, 1)\n ]\n\n static isNeighbor (a, b) {\n return CubeCoordinates.directions\n .map((direction) => CubeCoordinates.add(a, direction))\n .some((neighbor) => neighbor.equals(b))\n }\n\n static neighbor (start, direction) {\n return CubeCoordinates.add(start, CubeCoordinates.direction(direction))\n }\n\n static toOffsetCoordinates (axial) {\n const c = axial.q + (axial.r - (axial.r & 1)) / 2\n return new OffsetCoordinates(c, axial.r)\n }\n}\n","import { CubeCoordinates } from './cube'\n\nexport class OffsetCoordinates {\n constructor (r, c) {\n this.coordinates = [r, c]\n this.r = r\n this.c = c\n }\n\n toString () {\n return this.coordinates.join(',')\n }\n\n static toAxialCoordinates (offset) {\n const q = offset.c - (offset.r - (offset.r & 1)) / 2\n return new CubeCoordinates(q, offset.r)\n }\n}\n","import { Color, Path, Point } from 'paper'\nimport { Item } from '../item'\nimport { itemFactory } from '../itemFactory'\nimport { emitEvent, getPointBetween } from '../util'\nimport { modifierFactory } from '../modifierFactory'\n\nexport class Tile extends Item {\n selected = false\n\n #ui\n\n constructor (coordinates, layout, parameters, state) {\n super(null, state, { locked: false })\n\n this.#ui = Tile.ui(layout, parameters, state, { coordinates, type: this.type })\n\n this.center = this.#ui.center\n this.coordinates = coordinates\n this.hexagon = this.#ui.hexagon\n this.parameters = parameters\n this.styles = this.#ui.styles\n\n this.group.addChildren([this.#ui.hexagon, this.#ui.indicator])\n\n // These need to be last, since they reference this\n this.items = (state.items || [])\n .map((state) => itemFactory(this, state))\n .filter((item) => item !== undefined)\n\n this.modifiers = (state.modifiers || [])\n .map((state) => modifierFactory(this, state))\n .filter((modifier) => modifier !== undefined)\n\n this.update()\n }\n\n addItem (item) {\n this.items.unshift(item)\n this.update()\n }\n\n addModifier (modifier) {\n this.modifiers.unshift(modifier)\n this.update()\n }\n\n afterModify () {\n this.setStyle(this.selected ? 'selected' : 'default')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: false }))\n }\n\n beforeModify () {\n this.group.bringToFront()\n this.setStyle('edit')\n this.modifiers.forEach((modifier) => modifier.update({ disabled: true }))\n }\n\n getState () {\n const state = { type: this.type }\n\n // Filter out beams, which are not stored in state\n const items = this.items.filter((item) => item.type !== Item.Types.beam).map((item) => item.getState())\n if (items.length) {\n state.items = items\n }\n\n const modifiers = this.modifiers.map((modifier) => modifier.getState())\n if (modifiers.length) {\n state.modifiers = modifiers\n }\n\n return state\n }\n\n onTap (event) {\n console.debug(this.coordinates.offset.toString(), this)\n this.items.forEach((item) => item.onTap(event))\n }\n\n onDeselected (selectedTile) {\n this.selected = false\n this.#ui.hexagon.style = this.styles.default\n this.items.forEach((item) => item.onDeselected())\n this.modifiers.forEach((modifier) => modifier.detach())\n\n emitEvent(Tile.Events.Deselected, { selectedTile, deselectedTile: this })\n }\n\n onSelected (deselectedTile) {\n this.selected = true\n this.group.bringToFront()\n this.#ui.hexagon.style = this.styles.selected\n this.items.forEach((item) => item.onSelected())\n this.modifiers.forEach((modifier) => modifier.attach())\n }\n\n removeItem (item) {\n const index = this.items.indexOf(item)\n if (index >= 0) {\n this.items.splice(index, 1)\n this.update()\n }\n }\n\n removeModifier (modifier) {\n const index = this.modifiers.indexOf(modifier)\n if (index >= 0) {\n this.modifiers.splice(index, 1)\n this.update()\n }\n }\n\n setStyle (style) {\n this.hexagon.set(this.styles[style])\n }\n\n teardown () {\n this.modifiers.forEach((modifier) => modifier.detach())\n }\n\n toString () {\n return this.coordinates.offset.toString()\n }\n\n update () {\n super.update()\n this.#ui.indicator.opacity = this.modifiers.length ? 1 : 0\n }\n\n static parameters (height) {\n const circumradius = height / 2\n const width = Math.sqrt(3) * circumradius\n const inradius = width / 2\n const offsetY = height * (3 / 4)\n\n return {\n circumradius,\n height,\n inradius,\n offsetY,\n width\n }\n }\n\n static ui (layout, parameters, configuration, data) {\n const center = new Point(\n layout.startingOffsetX + parameters.inradius + layout.column * parameters.width,\n layout.startingOffsetY + parameters.circumradius + layout.row * parameters.offsetY\n )\n\n const dashWidth = parameters.circumradius / 10\n\n const styles = Object.assign(\n {},\n Tile.Styles,\n {\n edit: Object.assign({ dashArray: [dashWidth, dashWidth] }, Tile.Styles.edit)\n },\n configuration.style || {}\n )\n\n const hexagon = new Path.RegularPolygon({\n center,\n closed: true,\n data,\n radius: parameters.circumradius,\n sides: 6,\n style: styles.default\n })\n\n const indicator = new Path.RegularPolygon({\n center: getPointBetween(hexagon.segments[1].point, center, (length) => length / 3),\n data: { collidable: false },\n opacity: 0,\n radius: parameters.circumradius / 16,\n sides: 6,\n style: { fillColor: '#ccc' }\n })\n\n return { center, hexagon, indicator, styles }\n }\n\n static Events = Object.freeze({\n Deselected: 'tile-deselected',\n Selected: 'tile-selected'\n })\n\n static Styles = Object.freeze({\n // Need to use new Color here explicitly due to:\n // https://github.com/paperjs/paper.js/issues/2049\n default: {\n dashArray: [],\n fillColor: new Color('white'),\n strokeColor: new Color('#666'),\n strokeWidth: 1\n },\n edit: {\n strokeColor: new Color('black'),\n strokeWidth: 2\n },\n selected: {\n dashArray: [],\n strokeColor: new Color('black'),\n strokeWidth: 2\n }\n })\n}\n","import { capitalize } from './util'\nimport { CompoundPath, Group } from 'paper'\nimport { Stateful } from './stateful'\n\nexport class Item extends Stateful {\n center\n data\n group\n id = Item.uniqueId++\n // Whether the item can be clicked on\n locked\n parent\n sortOrder = 100\n type\n\n constructor (parent, state, configuration) {\n super(state)\n\n this.type = state?.type || configuration?.type\n this.data = Object.assign({ id: this.id, type: this.type }, configuration?.data || {})\n this.locked = configuration?.locked !== false\n\n if (parent) {\n this.center = parent.center\n }\n\n this.parent = parent\n this.group = new Group({ data: this.data, locked: this.locked })\n }\n\n equals (otherItem) {\n return otherItem instanceof Item && this.id === otherItem.id\n }\n\n getColorElements () {\n return []\n }\n\n getCompoundPath () {\n return new CompoundPath({\n // Must explicitly add insert: false for clone\n // https://github.com/paperjs/paper.js/issues/1721\n children: this.group.clone({ insert: false }).children\n .filter((child) => child.data.collidable !== false)\n })\n }\n\n getIndex () {\n return this.group.index\n }\n\n getLayer () {\n return this.group.parent\n }\n\n onTap () {}\n\n onCollision ({ collisionStep }) {\n return collisionStep\n }\n\n onDeselected () { }\n\n onInitialization () {}\n\n onSelected () {}\n\n remove () {\n this.group.remove()\n }\n\n toString () {\n return `[${this.type}:${this.id}]`\n }\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'beam',\n 'collision',\n 'filter',\n 'mask',\n 'portal',\n 'reflector',\n 'terminus',\n 'tile',\n 'wall'\n ].map((type) => [type, capitalize(type)])))\n\n // This should be stable per puzzle as state refers to it\n // Note that IDs will change if the puzzle configuration changes\n static uniqueId = 0\n}\n","import { emitEvent } from './util'\n\nexport class Stateful {\n #state = {}\n\n constructor (state) {\n this.setState(state)\n }\n\n getState () {\n return structuredClone(this.#state)\n }\n\n setState (state) {\n this.#state = structuredClone(state)\n }\n\n updateState (updater, dispatchEvent = true) {\n updater(this.#state)\n\n if (dispatchEvent) {\n emitEvent(Stateful.Events.Update, { object: this })\n }\n\n return this.getState()\n }\n\n static Events = Object.freeze({\n Update: 'state-update'\n })\n}\n","import { Filter } from './items/filter'\nimport { Portal } from './items/portal'\nimport { Terminus } from './items/terminus'\nimport { Reflector } from './items/reflector'\nimport { Wall } from './items/wall'\nimport { Item } from './item'\n\nexport function itemFactory (parent, configuration) {\n let item\n\n switch (configuration.type) {\n case Item.Types.filter:\n item = new Filter(parent, configuration)\n break\n case Item.Types.portal:\n item = new Portal(parent, configuration)\n break\n case Item.Types.terminus:\n item = new Terminus(parent, configuration)\n break\n case Item.Types.reflector:\n item = new Reflector(parent, configuration)\n break\n case Item.Types.wall:\n item = new Wall(parent, configuration)\n break\n default:\n console.error('Ignoring item with unknown type:', configuration.type)\n break\n }\n\n if (item) {\n item.onInitialization()\n }\n\n return item\n}\n","import chroma from 'chroma-js'\nimport { Item } from '../item'\nimport { Color, Path } from 'paper'\nimport { movable } from '../modifiers/move'\nimport { getColorElement } from '../util'\nimport { StepState } from '../step'\n\nexport class Filter extends movable(Item) {\n constructor (tile, { color }) {\n super(...arguments)\n\n this.color = chroma.average(Array.isArray(color) ? color : [color]).hex()\n\n const fillColor = new Color(color)\n fillColor.alpha = 0.25\n\n // TODO: update to something else? prism?\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n radius: tile.parameters.circumradius / 3,\n sides: 3,\n style: {\n fillColor,\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n\n getColorElements () {\n return [getColorElement(this.color)]\n }\n\n onCollision ({ currentStep, nextStep }) {\n // The beam will collide with the filter twice, on entry and exit, so ignore the first one, but track in state\n return nextStep.copy(\n currentStep.state.has(StepState.Filter)\n ? { colors: nextStep.colors.concat([this.color]) }\n : { state: new StepState({ insertAbove: this }, new StepState.Filter()) }\n )\n }\n}\n","import { Modifier } from '../modifier'\nimport { Puzzle } from '../puzzle'\nimport { emitEvent } from '../util'\nimport { Item } from '../item'\n\nexport class Move extends Modifier {\n #mask\n\n name = 'drag_pan'\n title = 'Move'\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter(Move.movable)\n if (this.#mask || !items.length) {\n return\n }\n\n const mask = new Puzzle.Mask({\n id: this.toString(),\n onTap: this.#maskOnTap.bind(this),\n onMask: () => this.tile.beforeModify(),\n onUnmask: () => this.tile.afterModify(),\n tileFilter: this.tileFilter.bind(this)\n })\n\n this.#mask = mask\n\n emitEvent(Puzzle.Events.Mask, { mask })\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no movable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.movable)\n }\n\n moveItems (tile) {\n const items = this.tile.items.filter(Move.movable)\n items.forEach((item) => item.move(tile))\n return {\n moved: [Move.data(this.tile, tile, items)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles with items, except for the current tile\n return tile.modifiers.some(Modifier.immutable) ||\n (tile.items.filter((item) => item.type !== Item.Types.beam).length > 0 && !(tile === this.tile))\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile) {\n const data = this.moveItems(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Invoked, data)\n } else {\n puzzle.unmask()\n }\n\n this.#mask = undefined\n }\n\n static data (fromTile, toTile, items) {\n return { fromTile, toTile, items }\n }\n\n static movable (item) {\n return item.movable\n }\n}\n\n/**\n * Move an item from one tile to another.\n * @param SuperClass\n * @returns {{new(*, *): MovableItem, movable: boolean, prototype: MovableItem}}\n */\nexport const movable = (SuperClass) => class MovableItem extends SuperClass {\n movable\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.movable = configuration.movable !== false\n }\n\n move (tile) {\n this.parent.removeItem(this)\n\n // Update the position of the item group based on the vector of the tile we are moving to\n const vector = this.parent.center.subtract(tile.center)\n this.group.position = this.group.position.subtract(vector)\n\n // Update tile reference\n this.parent = tile\n this.parent.addItem(this)\n this.center = this.parent.center\n\n this.onMove()\n }\n\n onMove () {}\n}\n","import { capitalize, emitEvent } from './util'\nimport { Puzzle } from './puzzle'\nimport { Stateful } from './stateful'\nimport { EventListeners } from './eventListeners'\nimport { Interact } from './interact'\n\nconst modifiersImmutable = document.getElementById('modifiers-immutable')\nconst modifiersMutable = document.getElementById('modifiers-mutable')\nconst navigator = window.navigator\n\nlet uniqueId = 0\n\nexport class Modifier extends Stateful {\n #container\n #down = false\n #eventListener = new EventListeners({ context: this })\n #mask\n #selectionTime = 500\n #timeoutId\n\n configuration\n element\n disabled = false\n id = uniqueId++\n immutable = false\n name\n selected = false\n tile\n title\n type\n\n constructor (tile, state) {\n super(state)\n\n this.tile = tile\n this.type = state.type\n }\n\n /**\n * Attach the modifier to the DOM and add listeners.\n */\n attach () {\n const li = this.#container = document.createElement('li')\n\n li.classList.add(['modifier', this.type.toLowerCase()].join('-'))\n\n if (this.immutable) {\n this.disabled = true\n }\n\n const span = this.element = document.createElement('span')\n\n span.classList.add('material-symbols-outlined', 'fill')\n\n li.append(span)\n\n this.update()\n\n this.#eventListener.add([\n { type: 'deselected', handler: this.onDeselected },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp }\n ], { element: li })\n\n this.immutable ? modifiersImmutable.append(li) : modifiersMutable.append(li)\n }\n\n /**\n * Remove listeners and the modifier from the DOM.\n */\n detach () {\n if (!this.#container) {\n return\n }\n\n Modifier.deselect()\n\n this.#eventListener.remove()\n this.#container.remove()\n\n this.selected = false\n this.element = undefined\n this.#container = undefined\n }\n\n dispatchEvent (event, detail) {\n emitEvent(event, Object.assign({}, detail || {}, { modifier: this, tile: this.tile }))\n }\n\n equals (other) {\n return other instanceof Modifier && this.id === other.id\n }\n\n move (tile) {\n this.remove()\n tile.addModifier(this)\n this.tile = tile\n }\n\n moveFilter (tile) {\n // Filter out immutable tiles\n return tile.modifiers.some((modifier) => modifier.type === Modifier.Types.immutable)\n }\n\n onDeselected () {\n this.update({ selected: false })\n this.tile.afterModify()\n this.dispatchEvent(Modifier.Events.Deselected)\n }\n\n onPointerDown (event) {\n if (event.button !== 0) {\n // Support toggle on non-primary pointer button\n this.onToggle(event)\n } else {\n this.#down = true\n if (\n !this.#mask &&\n !this.tile.modifiers.some((modifier) => [Modifier.Types.immutable, Modifier.Types.lock].includes(modifier.type))\n ) {\n this.#timeoutId = setTimeout(this.onSelected.bind(this), this.#selectionTime)\n }\n }\n }\n\n onPointerUp (event) {\n clearTimeout(this.#timeoutId)\n\n if (this.#down && !this.disabled && !this.selected) {\n switch (event.type) {\n case 'pointerleave': {\n // Support swiping up on pointer device\n this.onToggle(event)\n break\n }\n case 'pointerup': {\n this.onTap(event)\n break\n }\n }\n }\n\n this.#down = false\n }\n\n onSelected () {\n Modifier.deselect()\n\n navigator.vibrate(Interact.vibratePattern)\n\n this.update({ selected: true })\n\n const mask = this.#mask = new Puzzle.Mask({\n id: this.toString(),\n onMask: () => this.tile.beforeModify(),\n onTap: this.#maskOnTap.bind(this),\n tileFilter: this.#moveFilter.bind(this)\n })\n\n this.dispatchEvent(Puzzle.Events.Mask, { mask })\n }\n\n onTap () {\n this.selected = false\n }\n\n onToggle () {\n navigator.vibrate(Interact.vibratePattern)\n }\n\n remove () {\n this.detach()\n this.tile.removeModifier(this)\n this.tile = null\n }\n\n toString () {\n return [this.name, this.id].join(':')\n }\n\n update (options) {\n options = Object.assign(\n { disabled: this.disabled, selected: this.selected, name: this.name, title: this.title },\n options || {}\n )\n\n if (!this.immutable) {\n this.disabled = options.disabled\n }\n\n this.name = options.name\n this.title = options.title\n this.selected = options.selected\n\n if (this.#container) {\n this.#container.classList.toggle('disabled', this.disabled)\n this.#container.classList.toggle('selected', this.selected)\n this.element.textContent = this.name\n this.element.title = this.title\n }\n }\n\n #maskOnTap (puzzle, tile) {\n if (tile && tile !== this.tile) {\n const fromTile = this.tile\n\n this.move(tile)\n\n puzzle.updateState()\n puzzle.updateSelectedTile(tile)\n puzzle.unmask()\n\n this.dispatchEvent(Modifier.Events.Moved, { fromTile })\n } else {\n Modifier.deselect()\n puzzle.unmask()\n }\n\n this.#mask = undefined\n this.update({ selected: false })\n }\n\n #moveFilter (tile) {\n // Always include current tile\n return !tile.equals(this.tile) && this.moveFilter(tile)\n }\n\n static deselect () {\n const selectedModifier = document.querySelector('.modifiers .selected')\n if (selectedModifier) {\n selectedModifier.dispatchEvent(new CustomEvent('deselected'))\n }\n }\n\n static immutable (modifier) {\n return modifier.type === Modifier.Types.immutable\n }\n\n static Events = Object.freeze({\n Deselected: 'modifier-deselected',\n Invoked: 'modifier-invoked',\n Moved: 'modifier-moved'\n })\n\n static Types = Object.freeze(Object.fromEntries([\n 'immutable',\n 'lock',\n 'move',\n 'rotate',\n 'swap',\n 'toggle'\n ].map((type) => [type, capitalize(type)])))\n}\n","export class EventListeners {\n #events = []\n #options = { element: document }\n\n constructor (options = {}) {\n this.#options = Object.assign(this.#options, options)\n }\n\n add (events, options = {}) {\n this.#events = this.#events.concat(events.map((event) => {\n event = Object.assign({}, this.#options, options, event)\n if (!event.type) {\n throw new Error('Event type is required')\n }\n if (event.context) {\n event.handler = event.handler.bind(event.context)\n }\n event.element.addEventListener(event.type, event.handler, event.options)\n return event\n }))\n }\n\n remove () {\n this.#events.forEach((event) => event.element.removeEventListener(event.type, event.handler))\n this.#events = []\n }\n}\n","import paper, { Point } from 'paper'\nimport { Cache } from './cache'\nimport { EventListeners } from './eventListeners'\n\nexport class Interact {\n #bounds\n #cache = new Cache(Object.values(Interact.CacheKeys))\n #element\n #eventListener = new EventListeners({ context: this })\n #offset\n\n constructor (element) {\n this.#bounds = element.getBoundingClientRect()\n this.#element = element\n this.#offset = new Point(this.#bounds.left, this.#bounds.top)\n this.#eventListener.add([\n { type: 'pointercancel', handler: this.onPointerUp },\n { type: 'pointerdown', handler: this.onPointerDown },\n { type: 'pointerleave', handler: this.onPointerUp },\n { type: 'pointermove', handler: this.onPointerMove },\n { type: 'pointerout', handler: this.onPointerUp },\n { type: 'pointerup', handler: this.onPointerUp },\n { type: 'wheel', handler: this.onMouseWheel, options: { passive: false } }\n ], { element })\n }\n\n onMouseWheel (event) {\n event.preventDefault()\n this.#zoom(new Point(event.offsetX, event.offsetY), event.deltaY, 1.05)\n }\n\n onPan (event) {\n const point = paper.view.viewToProject(Interact.point(event))\n const pan = this.#getGesture(Interact.GestureKeys.Pan)\n\n if (!pan) {\n this.#setGesture(Interact.GestureKeys.Pan, { from: point })\n return\n }\n\n const center = pan.from.subtract(point).add(paper.view.center)\n\n // Allow a little wiggle room to prevent panning on tap\n if (paper.view.center.subtract(center).length > 1) {\n if (!document.body.classList.contains('grab')) {\n document.body.classList.add('grab')\n }\n\n // Center on the cursor\n paper.view.center = center\n }\n }\n\n onPinch (events) {\n const pointer0 = events[0]\n const pointer1 = events[1]\n\n const point0 = Interact.point(pointer0)\n const point1 = Interact.point(pointer1)\n const distance = point0.getDistance(point1)\n\n const pinch = this.#getGesture(Interact.GestureKeys.Pinch)\n if (!pinch) {\n this.#setGesture(Interact.GestureKeys.Pinch, { distance })\n return\n }\n\n const center = point0.add(point1).divide(2).subtract(this.#offset)\n const scale = distance / pinch.distance\n const delta = (pinch.distance - distance) * scale\n\n this.#zoom(center, delta, 1.01)\n\n pinch.distance = distance\n }\n\n onPointerDown (event) {\n this.#cache.get(Interact.CacheKeys.Down).set(event.pointerId, event)\n }\n\n onPointerMove (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n // Ignore events until there is a pointer down event\n return\n }\n\n // For some reason pointermove fires on mobile even if there was no movement\n const diff = Interact.point(event).subtract(Interact.point(down)).length\n if (diff > 1) {\n this.#cache.get(Interact.CacheKeys.Move).set(event.pointerId, event)\n\n const events = this.#cache.get(Interact.CacheKeys.Move).values()\n if (events.length === 2) {\n this.onPinch(events)\n } else {\n this.onPan(event)\n }\n }\n }\n\n onPointerUp (event) {\n const down = this.#cache.get(Interact.CacheKeys.Down).get(event.pointerId)\n if (!down) {\n return\n }\n\n if (\n this.#cache.length(Interact.CacheKeys.Down) === 1 &&\n !this.#cache.get(Interact.CacheKeys.Move).get(event.pointerId)\n ) {\n this.onTap(down)\n }\n\n document.body.classList.remove('grab')\n\n this.#cache.get(Interact.CacheKeys.Down).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Move).unset(event.pointerId)\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pan)\n\n if (this.#cache.length(Interact.CacheKeys.Move) < 2) {\n this.#cache.get(Interact.CacheKeys.Gesture).unset(Interact.GestureKeys.Pinch)\n }\n }\n\n onTap (event) {\n const point = paper.view.viewToProject(Interact.point(event).subtract(this.#offset))\n this.#element.dispatchEvent(new CustomEvent(Interact.GestureKeys.Tap, { detail: { event, point } }))\n }\n\n #getGesture (key) {\n return this.#cache.get(Interact.CacheKeys.Gesture).get(key)\n }\n\n #setGesture (key, value) {\n this.#cache.get(Interact.CacheKeys.Gesture).set(key, value)\n }\n\n #zoom (point, delta, factor) {\n const zoom = Math.max(\n Math.min(\n delta < 0 ? paper.view.zoom * factor : paper.view.zoom / factor,\n Interact.maxZoom\n ),\n Interact.minZoom\n )\n\n // Convert the touch point from the view coordinate space to the project coordinate space\n const touchPoint = paper.view.viewToProject(point)\n const touchOffset = touchPoint.subtract(paper.view.center)\n\n // Adjust center towards cursor location\n const zoomOffset = touchPoint\n .subtract(touchOffset.multiply(paper.view.zoom / zoom))\n .subtract(paper.view.center)\n\n paper.view.zoom = zoom\n paper.view.center = paper.view.center.add(zoomOffset)\n }\n\n static point (event) {\n return new Point(event.clientX, event.clientY)\n }\n\n static CacheKeys = Object.freeze({\n Down: 'down',\n Move: 'move',\n Gesture: 'gesture'\n })\n\n static GestureKeys = Object.freeze({\n Pan: 'pan',\n Pinch: 'pinch',\n Tap: 'tap'\n })\n\n static maxZoom = 2\n static minZoom = 0.5\n static vibratePattern = 25\n}\n","export class Cache {\n #cache = {}\n #hasKeys\n #keys\n\n constructor (keys = []) {\n this.#keys = keys\n this.#hasKeys = keys.length !== 0\n\n keys.forEach((key) => { this.#cache[key] = new Cache() })\n }\n\n set (key, item) {\n if (this.#hasKeys && !this.#keys.includes(key)) {\n throw new Error(`Invalid key: ${key}`)\n }\n\n this.#cache[key] = item\n }\n\n get (key) {\n return key === undefined ? this.#cache : this.#cache[key]\n }\n\n keys (key) {\n return Object.keys(this.#get(key))\n }\n\n length (key) {\n return this.keys(key).length\n }\n\n unset (key) {\n delete this.#cache[key]\n }\n\n values (key) {\n return Object.values(this.#get(key))\n }\n\n #get (key) {\n const value = this.get(key)\n return value instanceof Cache ? value.get() : value\n }\n}\n","import chroma from 'chroma-js'\nimport { deepEqual, noop } from './util'\n\nexport class Step {\n color\n colors\n connected\n direction\n done\n insertAbove\n onAdd\n onRemove\n point\n pathIndex\n segmentIndex\n state\n tile\n\n constructor (\n index,\n tile,\n colors,\n direction,\n point,\n pathIndex,\n segmentIndex,\n connected,\n insertAbove,\n done,\n state,\n onAdd,\n onRemove\n ) {\n if (state && !(state instanceof StepState)) {\n throw new Error('Step.state must be instance of StepState')\n }\n\n this.colors = colors ? (Array.isArray(colors) ? Array.from(colors) : [colors]) : []\n\n if (this.colors.length) {\n this.color = chroma.average(this.colors).hex()\n }\n\n this.connected = connected ?? true\n this.direction = direction\n this.done = done ?? false\n this.index = index\n this.insertAbove = insertAbove\n // The onAdd and onRemove methods should be idempotent!\n this.onAdd = onAdd ?? noop\n this.onRemove = onRemove ?? noop\n this.point = point\n this.pathIndex = pathIndex\n this.segmentIndex = segmentIndex\n this.state = state ?? new StepState()\n this.tile = tile\n }\n\n copy (settings) {\n return new Step(\n settings.index ?? this.index,\n settings.tile ?? this.tile,\n settings.colors ?? settings.color ?? this.colors,\n settings.direction ?? this.direction,\n settings.point ?? this.point,\n settings.pathIndex ?? this.pathIndex,\n settings.segmentIndex ?? this.segmentIndex,\n settings.connected ?? this.connected,\n settings.insertAbove ?? this.insertAbove,\n settings.done ?? this.done,\n settings.state ?? new StepState(this.state),\n settings.onAdd ?? this.onAdd,\n settings.onRemove ?? this.onRemove\n )\n }\n\n equals (step) {\n return deepEqual(this, step)\n }\n}\n\nexport class StepState {\n #cache = {}\n\n constructor () {\n const settings = Object.assign({}, ...arguments)\n Object.keys(settings).forEach((key) => { this[key] = settings[key] })\n }\n\n copy (...settings) {\n return new StepState(...([this].concat(settings)))\n }\n\n get (Class) {\n return this.#keys(Class).map((key) => this[key]).find((value) => value)\n }\n\n has (Class) {\n return this.#keys(Class).some((key) => this[key])\n }\n\n #keys (Class) {\n return (this.#cache[Class.name] ??= Object.keys(Reflect.construct(Class, [])))\n }\n\n static Collision = class StepCollision {\n collision\n\n // Item is optional, in the case of an out-of-bounds collision for example\n constructor (collision) {\n this.collision = collision\n }\n }\n\n static Filter = class StepFilter {\n filter = {}\n }\n\n static MergeInto = class StepMergeInto {\n mergeInto\n\n constructor (beam) {\n this.mergeInto = { beam }\n }\n }\n\n static MergeWith = class StepMergeWith {\n mergeWith\n\n constructor (mergeWith) {\n this.mergeWith = mergeWith\n }\n }\n\n static Portal = class StepPortal {\n portal\n\n constructor (entryPortal, exitPortal) {\n this.portal = { entryPortal, exitPortal }\n }\n }\n\n static Reflector = class StepReflector {\n reflector\n\n constructor (item) {\n this.reflector = { item }\n }\n }\n\n static TerminusConnection = class StepTerminusConnection {\n terminusConnection\n\n constructor (terminus, opening) {\n this.terminusConnection = { terminus, opening }\n }\n }\n}\n","import { movable } from '../modifiers/move'\nimport { Item } from '../item'\nimport { Path, Point } from 'paper'\nimport { rotatable } from '../modifiers/rotate'\nimport { StepState } from '../step'\nimport { Puzzle } from '../puzzle'\nimport { coalesce, getOppositeDirection } from '../util'\n\nexport class Portal extends movable(rotatable(Item)) {\n #directions = {}\n\n constructor (tile, state) {\n // Only allow rotation if direction is defined\n super(tile, state, { rotatable: state.direction !== undefined })\n\n this.direction = state.direction\n\n const height = tile.parameters.circumradius / 3\n const width = tile.parameters.circumradius / 5\n\n const style = {\n fillColor: 'black',\n strokeColor: 'white',\n strokeWidth: 2\n }\n\n const children = []\n\n // TODO: consider adding an item with a gradient that fades to black at the center of the ellipse\n // This will help distinguish visually that beams are entering/exiting a portal when there are multiple\n const ellipse = new Path.Ellipse({\n center: tile.center,\n radius: [width, height],\n style\n })\n\n children.push(ellipse)\n\n const ring = new Path.Ellipse({\n center: tile.center,\n radius: [width - style.strokeWidth * 2, height - style.strokeWidth * 2],\n style\n })\n\n children.push(ring)\n\n if (this.rotatable) {\n const pointer = new Path({\n closed: true,\n opacity: 0.25,\n segments: [\n tile.center.add(new Point(0, height)),\n tile.center.subtract(new Point(0, height)),\n tile.center.subtract(new Point(width * 2.5, 0))\n ],\n style: {\n fillColor: 'black'\n }\n }).subtract(ellipse)\n\n children.unshift(pointer)\n }\n\n this.group.addChildren(children)\n\n if (this.rotatable) {\n // Properly align items with hexagonal rotation\n this.rotateGroup(1)\n }\n }\n\n get (direction) {\n return this.#directions[direction]\n }\n\n onCollision ({ beam, currentStep, nextStep, puzzle }) {\n const portalState = currentStep.state.get(StepState.Portal)\n if (!portalState) {\n const stepIndex = nextStep.index\n const entryDirection = getOppositeDirection(nextStep.direction)\n const existing = coalesce(this.get(entryDirection), { stepIndex })\n if (existing.stepIndex < stepIndex) {\n // Checking stepIndex to exclude cases where we are doing a re-evaluation of history.\n console.debug(\n this.toString(),\n 'ignoring beam trying to enter through a direction which is already occupied:',\n entryDirection\n )\n return\n }\n\n // Handle entry collision\n return nextStep.copy({\n insertAbove: this,\n onAdd: () => this.update(entryDirection, { stepIndex }),\n onRemove: () => this.update(entryDirection),\n state: nextStep.state.copy(new StepState.Portal(this))\n })\n } else if (portalState.exitPortal === this) {\n // Handle exit collision\n return nextStep.copy({ insertAbove: this })\n }\n\n // Check for destination in beam state (matches on item ID and step index)\n const stateId = [this.id, nextStep.index].join(':')\n const destinationId = beam.getState().moves?.[stateId]\n\n // Find all valid destination portals\n const destinations = puzzle.getItems().filter((item) =>\n item.type === Item.Types.portal &&\n !item.equals(this) &&\n // Portal must not already have a beam occupying the desired direction\n !item.get(Portal.getExitDirection(nextStep, portalState.entryPortal, item)) &&\n (destinationId === undefined || item.id === destinationId) &&\n (\n // Entry portals without defined direction can exit from any other portal.\n this.getDirection() === undefined ||\n // Exit portals without defined direction can be used by any entry portal.\n item.getDirection() === undefined ||\n // Exit portals with a defined direction can only be used by entry portals with the same defined direction.\n item.getDirection() === this.getDirection()\n )\n )\n\n if (destinations.length === 0) {\n console.debug(this.toString(), 'no valid destinations found')\n // This will cause the beam to stop\n return currentStep\n }\n\n if (destinations.length === 1) {\n // A single matching destination\n return this.#getStep(beam, destinations[0], nextStep, portalState)\n } else {\n // Multiple matching destinations. User will need to pick one manually.\n const destinationTiles = destinations.map((portal) => portal.parent)\n const mask = new Puzzle.Mask(\n {\n beam,\n id: stateId,\n onMask: () => currentStep.tile.beforeModify(),\n onTap: (puzzle, tile) => {\n const destination = destinations.find((portal) => portal.parent === tile)\n if (destination) {\n beam.addStep(this.#getStep(beam, destination, nextStep, portalState))\n beam.updateState((state) => {\n if (!state.moves) {\n state.moves = {}\n }\n // Store this decision in beam state\n state.moves[stateId] = destination.id\n })\n puzzle.unmask()\n }\n },\n onUnmask: () => currentStep.tile.afterModify(),\n tileFilter: (tile) => {\n // Include the portal tile and tiles which contain a matching destination\n return !(this.parent === tile || destinationTiles.some((destinationTile) => destinationTile === tile))\n }\n }\n )\n\n puzzle.updateSelectedTile(currentStep.tile)\n puzzle.mask(mask)\n\n // This will cause the beam to stop\n return currentStep\n }\n }\n\n update (direction, data) {\n this.#directions[direction] = data\n }\n\n #getStep (beam, portal, nextStep, portalState) {\n const direction = Portal.getExitDirection(nextStep, portalState.entryPortal, portal)\n const stepIndex = nextStep.index\n return nextStep.copy({\n connected: false,\n direction,\n insertAbove: portal,\n onAdd: () => portal.update(direction, { stepIndex }),\n onRemove: () => portal.update(direction),\n point: portal.parent.center,\n state: nextStep.state.copy(new StepState.Portal(portalState.entryPortal, portal)),\n tile: portal.parent\n })\n }\n\n static getExitDirection (step, entryPortal, exitPortal) {\n // Direction precedence is as follows:\n // - direction defined by exit portal\n // - direction defined by entry portal\n // - direction beam was traveling when it reached the entry portal\n return exitPortal.getDirection() ?? entryPortal.getDirection() ?? step.direction\n }\n}\n","import { Modifier } from '../modifier'\nimport { addDirection, coalesce } from '../util'\n\nexport class Rotate extends Modifier {\n clockwise\n title = 'Rotate'\n\n constructor (tile, state, configuration = {}) {\n super(...arguments)\n\n this.clockwise = coalesce(true, state.clockwise, configuration.clockwise)\n this.name = Rotate.Names[this.clockwise ? 'right' : 'left']\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no rotatable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.rotatable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n const items = this.tile.items.filter((item) => item.rotatable)\n items.forEach((item) => item.rotate(this.clockwise))\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n onToggle () {\n super.onToggle()\n\n this.clockwise = !this.clockwise\n this.updateState((state) => { state.clockwise = this.clockwise })\n this.update({ name: Rotate.Names[this.clockwise ? 'right' : 'left'] })\n }\n\n static Names = Object.freeze({ left: 'rotate_left', right: 'rotate_right ' })\n}\n\n/**\n * A mixin for Item which provides rotate behaviors.\n */\nexport const rotatable = (SuperClass) => class RotatableItem extends SuperClass {\n direction\n\n rotatable\n rotation = 0\n rotationDegrees\n\n constructor (parent, state, configuration = {}) {\n super(...arguments)\n\n this.direction = coalesce(state.direction, configuration.direction)\n this.rotatable = coalesce(true, state.rotatable, configuration.rotatable)\n this.rotationDegrees = coalesce(60, state.rotationDegrees, configuration.rotationDegrees)\n this.rotation = coalesce(0, state.rotation, configuration.rotation) % this.getMaxRotation()\n }\n\n // Get the direction of an item with rotation factored in\n getDirection (direction) {\n direction = direction ?? this.direction\n return direction === undefined\n ? direction\n : addDirection(direction, this.rotation)\n }\n\n getMaxRotation () {\n return (360 / this.rotationDegrees)\n }\n\n onInitialization () {\n super.onInitialization()\n\n this.rotateGroup(this.rotation)\n\n if (this.direction !== undefined) {\n // Direction will not affect initial rotation of item\n this.rotateGroup(this.direction)\n }\n }\n\n rotateGroup (rotation) {\n if (this.rotatable) {\n this.group.rotate(rotation * this.rotationDegrees, this.center)\n }\n }\n\n rotate (clockwise) {\n const rotation = clockwise === false ? -1 : 1\n\n this.rotation = (rotation + this.rotation) % this.getMaxRotation()\n\n this.updateState((state) => { state.rotation = this.rotation })\n this.rotateGroup(rotation)\n }\n}\n","import chroma from 'chroma-js'\nimport { Path } from 'paper'\nimport { toggleable } from '../modifiers/toggle'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getColorElements, emitEvent, getOppositeDirection, addDirection, subtractDirection } from '../util'\nimport { Beam } from './beam'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Terminus extends movable(rotatable(toggleable(Item))) {\n sortOrder = 2\n\n #ui\n\n constructor (tile, state) {\n super(...arguments)\n\n const colors = state.openings.filter((opening) => opening?.color)\n .flatMap((opening) => Array.isArray(opening.color) ? opening.color : [opening.color])\n const color = chroma.average(\n colors.length ? colors : (Array.isArray(state.color) ? state.color : [state.color])\n ).hex()\n\n const openings = state.openings.map((state, direction) =>\n state\n ? new Terminus.#Opening(\n state.color || color,\n direction,\n state.connected,\n state.on\n )\n : state\n ).filter((opening) => opening)\n\n this.#ui = Terminus.ui(tile, color, openings)\n\n this.group.addChildren([...this.#ui.openings, this.#ui.terminus])\n\n this.color = color\n this.openings = openings\n this.radius = this.#ui.radius\n\n // Needs to be last since it references 'this'\n this.beams = openings.map((opening) => new Beam(this, state.openings[opening.direction], opening))\n\n this.update()\n }\n\n getColorElements () {\n return getColorElements(this.openings.map((opening) => opening.color))\n }\n\n getOpening (direction) {\n return this.openings.find((opening) => opening.direction === direction)\n }\n\n onMove () {\n this.beams.forEach((beam) => beam.remove())\n }\n\n onCollision ({ beam, collisionStep, currentStep, existingNextStep, nextStep }) {\n console.debug(this.toString(), 'collision', beam.toString())\n\n // Colliding with the starting terminus, ignore\n if (beam.parent === this && beam.startDirection() === nextStep.direction) {\n console.debug(beam.toString(), 'ignoring starting terminus collision')\n return\n }\n\n const directionFrom = getOppositeDirection(currentStep.direction)\n\n // Take rotation of terminus into account\n const opening = this.openings.find((opening) => this.getDirection(opening.direction) === directionFrom)\n if (\n opening && opening.color === nextStep.color && (\n !opening.on ||\n // When re-evaluating history of an already connected opening\n (opening.connected && existingNextStep?.state.get(StepState.TerminusConnection)?.terminus.equals(this))\n )\n ) {\n // Beam has connected to a valid opening\n console.debug(beam.toString(), 'terminus connection', this.toString(), opening)\n return nextStep.copy({\n done: true,\n onAdd: () => {\n nextStep.onAdd()\n this.onConnection(opening.direction)\n },\n onRemove: () => {\n nextStep.onRemove()\n this.onDisconnection(opening.direction)\n },\n state: nextStep.state.copy(new StepState.TerminusConnection(this, opening))\n })\n }\n\n // Otherwise, treat this as a collision\n return collisionStep\n }\n\n onConnection (direction) {\n const opening = this.getOpening(direction)\n\n if (opening.connected) {\n // Already connected\n return\n }\n\n opening.connect()\n this.update()\n\n emitEvent(Terminus.Events.Connection, { terminus: this, opening })\n }\n\n onDisconnection (direction) {\n const opening = this.getOpening(direction)\n\n if (!opening.connected) {\n // Already disconnected\n return\n }\n\n opening.disconnect()\n this.update()\n\n emitEvent(Terminus.Events.Disconnection, { terminus: this, opening })\n }\n\n onToggle () {\n this.updateState((state) => {\n this.openings.filter((opening) => !opening.connected).forEach((opening) => {\n opening.toggle()\n state.openings[opening.direction].on = opening.on\n })\n })\n this.update()\n }\n\n update () {\n this.beams.forEach((beam) => {\n const opening = beam.getOpening()\n const item = this.#ui.openings.find((item) => item.data.direction === opening.direction)\n item.opacity = opening.on ? 1 : Terminus.#openingOffOpacity\n })\n }\n\n static #openingOffOpacity = 0.3\n\n static ui (tile, color, configuration) {\n const radius = tile.parameters.circumradius / 2\n\n const terminus = new Path.RegularPolygon({\n center: tile.center,\n fillColor: color,\n opacity: 1,\n sides: 6,\n radius: radius / 2\n })\n\n const openings = configuration.map((opening) => {\n const direction = opening.direction\n\n // Each opening is essentially a triangle from the mid-point segments of the terminus with the tip of the triangle\n // pointing in the direction of the opening. This ensures there isn't a gap between the opening triangle and the\n // terminus hexagon.\n const p1 = terminus.segments[subtractDirection(direction, 1)].point\n const p2 = terminus.segments[addDirection(direction, 2)].point\n\n const vector = p2.subtract(p1)\n\n vector.angle += 120\n\n const p3 = p1.subtract(vector)\n\n return new Path({\n closed: true,\n data: { collidable: false, direction },\n fillColor: opening.color,\n opacity: opening.on ? 1 : Terminus.#openingOffOpacity,\n segments: [p1, p2, p3]\n })\n })\n\n return { openings, radius, terminus }\n }\n\n static #Opening = class {\n constructor (color, direction, connected, on) {\n this.colors = Array.isArray(color) ? color : [color]\n this.color = chroma.average(this.colors).hex()\n this.direction = direction\n this.connected = connected === true\n this.on = on === true\n }\n\n connect () {\n this.connected = this.on = true\n }\n\n disconnect () {\n this.connected = this.on = false\n }\n\n toggle () {\n this.on = !this.on\n }\n }\n\n static Events = Object.freeze({\n Connection: 'terminus-connection',\n Disconnection: 'terminus-disconnection'\n })\n}\n","import { Modifier } from '../modifier'\n\nexport class Toggle extends Modifier {\n on\n title = 'Toggle'\n\n constructor (tile, { on }) {\n super(...arguments)\n\n this.on = on || false\n\n this.tile.items.forEach((item) => {\n item.toggled = this.on\n })\n }\n\n attach () {\n this.name = Toggle.Names[this.on ? 'on' : 'off']\n super.attach()\n }\n\n moveFilter (tile) {\n // Filter out tiles that contain no toggleable items\n return super.moveFilter(tile) || !tile.items.some((item) => item.toggleable)\n }\n\n onTap (event) {\n super.onTap(event)\n\n this.on = !this.on\n\n const items = this.tile.items.filter((item) => item.toggleable)\n items.forEach((item) => item.toggle(this.on))\n\n this.update({ name: Toggle.Names[this.on ? 'on' : 'off'] })\n\n this.dispatchEvent(Modifier.Events.Invoked, { items })\n }\n\n static Names = Object.freeze({ on: 'toggle_on', off: 'toggle_off ' })\n}\n\n/**\n * A mixin for Item which provides toggle behaviors.\n *\n * @param SuperClass\n * @returns {{new(*, *): ToggleableItem, toggled: *, prototype: ToggleableItem}}\n * @constructor\n */\nexport const toggleable = (SuperClass) => class ToggleableItem extends SuperClass {\n toggleable\n toggled\n\n constructor (parent, configuration) {\n super(...arguments)\n\n this.toggleable = configuration.toggleable !== false\n }\n\n onToggle () {}\n\n toggle (toggled) {\n this.toggled = toggled\n this.onToggle()\n }\n}\n","import chroma from 'chroma-js'\nimport { CompoundPath, Path } from 'paper'\nimport { Item } from '../item'\nimport {\n getColorElements,\n emitEvent,\n fuzzyEquals,\n getPointBetween,\n getDistance,\n getOppositeDirection,\n uniqueBy, getPointFrom\n} from '../util'\nimport { Step, StepState } from '../step'\nimport { Collision, CollisionMergeWith } from '../collision'\nimport { Cache } from '../cache'\n\nexport class Beam extends Item {\n done = false\n path = []\n sortOrder = 3\n\n #cache = new Cache(Object.values(Beam.CacheKeys))\n #direction\n #path\n #stepIndex = -1\n #steps = []\n\n constructor (terminus, state, configuration) {\n super(...arguments)\n\n this.group = null\n this.#direction = configuration.direction\n\n this.#path = {\n closed: false,\n data: { id: this.id, type: this.type },\n locked: true,\n strokeJoin: 'round',\n strokeCap: 'round',\n strokeWidth: terminus.radius / 12\n }\n }\n\n addStep (step) {\n const lastStepIndex = this.getLastStepIndex()\n\n // Can't be done if adding a new step\n this.done = false\n\n this.#path.strokeColor = step.color\n\n if (this.path.length === 0) {\n const path = new Path(this.#path)\n this.path.push(path)\n this.getLayer().insertChild(0, path)\n }\n\n const currentPath = this.path[this.path.length - 1]\n const previousStep = this.#steps[lastStepIndex]\n\n // Handles cases that require adding a new path item\n if (\n !step.connected || (\n previousStep && (\n step.color !== previousStep.color ||\n step.insertAbove !== previousStep.insertAbove\n )\n )\n ) {\n console.debug(this.toString(), 'adding new path item for step:', step, 'previous step:', previousStep)\n\n const path = new Path(this.#path)\n const points = [step.point]\n\n // If the next step is connected, we will link it with the previous step\n if (step.connected) {\n points.unshift(previousStep.point)\n }\n\n path.add(...points)\n this.path.push(path)\n\n // Unless specified in the state, the path will be inserted beneath all items\n this.getLayer().insertChild(this.#getItemIndex(step), path)\n\n // Reset the segmentIndex\n step.segmentIndex = 0\n } else {\n currentPath.add(step.point)\n step.segmentIndex = currentPath.segments.length - 1\n }\n\n step.pathIndex = this.path.length - 1\n\n this.#steps.push(step)\n\n step.index = this.#stepIndex = this.#steps.length - 1\n\n if (!step.tile.items.some((item) => item.equals(this))) {\n // Add this beam to the tile item list so other beams can see it\n step.tile.addItem(this)\n }\n\n step.onAdd(step)\n\n console.debug(this.toString(), 'added step', step)\n\n this.#onUpdate(this.#stepIndex)\n\n return step\n }\n\n getCollision () {\n return this.getStep()?.state.get(StepState.Collision)\n }\n\n getColor () {\n return this.getStep()?.color || this.getOpening().color\n }\n\n getColors () {\n return Array.from(this.getStep()?.colors || this.getOpening().colors)\n }\n\n getColorElements (tile) {\n // Show color elements for merged beams\n const step = this.getSteps(tile).find((step) => step.state.has(StepState.MergeWith))\n return step ? getColorElements(step.color) : []\n }\n\n getCompoundPath () {\n return new CompoundPath({ children: this.path.map((item) => item.clone({ insert: false })) })\n }\n\n getIndex () {\n return this.path[this.path.length - 1].index\n }\n\n getLastStepIndex () {\n return this.length() - 1\n }\n\n getLayer () {\n return this.parent.getLayer()\n }\n\n getMergeWith (beam) {\n return this.#cache.get(Beam.CacheKeys.MergeWith).get(beam.id)\n }\n\n getOpening () {\n return this.parent.getOpening(this.#direction)\n }\n\n getState () {\n return this.parent.getState().openings[this.#direction]\n }\n\n getStep (stepIndex) {\n return this.#steps[stepIndex || this.getLastStepIndex()]\n }\n\n getSteps (tile) {\n return tile ? this.#steps.filter((step) => step.tile === tile) : this.#steps\n }\n\n isComplete () {\n return this.isOn() && this.done\n }\n\n isConnected () {\n const step = this.getStep()\n return step?.state.has(StepState.TerminusConnection) ||\n // Consider beams which have merged into connected beams to also be connected\n step?.state.get(StepState.MergeInto)?.beam.isConnected()\n }\n\n isOn () {\n const opening = this.getOpening()\n // The opening will also be on if another beam connects with it\n return opening.on && !opening.connected\n }\n\n isPending () {\n return this.isOn() && !this.done\n }\n\n length () {\n return this.#steps.length\n }\n\n onBeamUpdated (event) {\n const beam = event.detail.beam\n\n if (beam.isPending()) {\n // Wait for beam to finish before evaluating\n return\n }\n\n const beamLastStep = beam.getStep()\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n // Check for invalid collisions\n const collision = lastStep.state.get(StepState.Collision)\n if (collision?.has(beam) && !collision.equals(beamLastStep?.state.get(StepState.Collision))) {\n console.debug(this.toString(), 're-evaluating collision with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(lastStep.index - 1, 0)\n return\n }\n\n // Check for invalid mergedInto\n const mergeInto = lastStep.state.get(StepState.MergeInto)\n if (mergeInto?.beam.equals(beam) && !beam.getMergeWith(this)) {\n console.debug(this.toString(), 're-evaluating merge into', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(this.#stepIndex - 1, 0)\n return\n }\n }\n\n // Check for invalid mergedWith\n const mergeWith = this.getMergeWith(beam)\n if (mergeWith && !beamLastStep?.state.get(StepState.MergeInto)?.beam.equals(this)) {\n console.debug(this.toString(), 're-evaluating merge with', beam.toString())\n this.done = false\n this.#stepIndex = Math.max(mergeWith.stepIndex - 1, 0)\n }\n }\n\n onCollision ({ beam, collision, collisionStep, currentStep, nextStep, puzzle }) {\n const isSelf = beam.equals(this)\n\n console.debug(this.toString(), 'evaluating collision with', (isSelf ? 'self' : beam.toString()))\n\n if (!beam.isOn()) {\n console.debug(this.toString(), 'ignoring collision with inactive beam', beam.toString())\n return\n }\n\n if (beam.parent.equals(this.parent) && currentStep.index === 0) {\n console.debug(this.toString(), 'ignoring collision with sibling beam', beam.toString())\n return\n }\n\n if (isSelf && this.#stepIndex < this.getLastStepIndex()) {\n console.debug(this.toString(), 'ignoring collision with self while re-evaluating history')\n return\n }\n\n // Find the step with matching collision point\n const stepIndex = this.#steps.findLastIndex((step) => fuzzyEquals(collision.point, step.point))\n if (stepIndex < 0) {\n // This error will occur if the steps are out of sync with the path segments for some reason\n throw new Error(\n `Could not find matching step for beam collision between ${this.toString()} and ${beam.toString()}`)\n }\n\n const step = this.#steps[stepIndex]\n\n if (step.state.get(StepState.MergeInto)?.beam.equals(beam)) {\n console.debug(this.toString(), 'ignoring collision with merged beam', beam.toString())\n return\n }\n\n // Note: we only want to evaluate this at the collision point, otherwise terminus connection is irrelevant.\n if (step.state.get(StepState.TerminusConnection)?.terminus.equals(beam.parent)) {\n console.debug(this.toString(), 'ignoring collision with connected beam in parent terminus', beam.toString())\n return\n }\n\n // Check for a reflection on either this beam or the one being collided with at the collision point.\n const reflector = step.state.get(StepState.Reflector) ?? currentStep.state.get(StepState.Reflector)\n if (reflector) {\n // Since every step goes to the center of the tile, we need to go one pixel back in the direction we came from\n // in order to properly test which side of the reflector the beams are on.\n const stepPoint = getPointFrom(step.point, 1, getOppositeDirection(step.direction))\n const nextStepPoint = getPointFrom(currentStep.point, 1, getOppositeDirection(currentStep.direction))\n if (!reflector.item.isSameSide(stepPoint, nextStepPoint)) {\n console.debug(this.toString(), 'ignoring collision with beam on opposite side of reflector', beam.toString())\n return\n }\n }\n\n const isSameDirection = step.direction === nextStep.direction\n if (currentStep.state.get(StepState.Portal)?.exitPortal && !isSameDirection) {\n console.debug(\n this.toString(),\n 'ignoring collision with beam using same portal with different exit direction',\n beam.toString()\n )\n return\n }\n\n if (!isSameDirection || isSelf) {\n // Beams are traveling in different directions (collision), or a beam is trying to merge into itself\n console.debug(beam.toString(), 'has collided with', (isSelf ? 'self' : this.toString()), collision)\n\n if (!isSelf) {\n // Update beam at point of impact\n this.update(stepIndex, {\n done: true,\n state: step.state.copy(new StepState.Collision(collision.mirror()))\n })\n } else if (!isSameDirection) {\n // For a collision with self, the update at point of impact will occur on the next update loop. This results in\n // a better visualization of the collision which will result in an infinite looping animation.\n this.update(stepIndex, puzzle.getBeamsUpdateDelay())\n }\n\n return collisionStep.copy({\n done: true,\n // Use same insertion point as the beam we collided with to ensure proper item hierarchy.\n insertAbove: step.insertAbove\n })\n }\n\n console.debug(this.toString(), 'merging with', beam.toString())\n\n // Update history to reflect changing color of path\n this.#updateHistory(stepIndex)\n\n const mergeWith = new CollisionMergeWith(beam, step, stepIndex)\n this.addStep(step.copy({\n colors: mergeWith.colors,\n onAdd: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).set(beam.id, mergeWith)\n },\n onRemove: () => {\n this.#cache.get(Beam.CacheKeys.MergeWith).unset(beam.id)\n },\n state: step.state.copy(new StepState.MergeWith(mergeWith))\n }))\n\n console.debug(beam.toString(), 'merging into', this.toString())\n\n return nextStep.copy({\n done: true,\n // Stop at current step point\n point: currentStep.point,\n state: nextStep.state.copy(new StepState.MergeInto(this))\n })\n }\n\n onModifierInvoked (event) {\n if (!this.isOn()) {\n if (this.#steps.length) {\n console.debug(this.toString(), 'beam has been toggled off')\n // Also reset any state changes from user move decisions\n this.updateState((state) => { delete state.moves })\n this.remove()\n }\n return\n }\n\n const tiles = event.detail.tiles || [event.detail.tile]\n\n // We want the first step that contains the tile the event occurred on\n const stepIndex = this.#steps.findIndex((step) => tiles.some((tile) => tile.equals(step.tile)))\n if (stepIndex >= 0) {\n console.debug(this.toString(), 're-evaluating due to modifier being invoked in matching tile', stepIndex)\n // Re-evaluate beginning at the step before the matched one\n this.done = false\n this.#stepIndex = Math.max(stepIndex - 1, 0)\n return\n }\n\n if (this.isComplete()) {\n const lastStep = this.getStep()\n\n if (lastStep.state.get(StepState.Portal)?.entryPortal) {\n // Check for valid exit portal\n this.done = false\n }\n }\n }\n\n remove (stepIndex = 0) {\n this.#updateHistory(stepIndex)\n }\n\n selected (selected = true) {\n this.path.forEach((path) => { path.selected = selected })\n }\n\n startDirection () {\n // Take rotation of the parent (terminus) into account\n return (this.getOpening().direction + this.parent.rotation) % 6\n }\n\n /**\n * On each step, a beam will move towards the edge of the current tile until it either reaches that point, or it\n * intersects with something else. A beam will be considered 'done' when it either collides with something or it\n * reaches a terminus opening.\n */\n step (puzzle) {\n if (!this.isPending()) {\n return\n }\n\n console.debug(this.toString(), 'currentStepIndex', this.#stepIndex)\n\n // First step\n if (this.#steps.length === 0) {\n const tile = this.parent.parent\n this.addStep(new Step(0, tile, this.getColor(), this.startDirection(), tile.center))\n }\n\n const currentStepIndex = this.#stepIndex\n const currentStep = this.#steps[currentStepIndex]\n\n // On the first step, we have to take the rotation of the terminus into account\n const direction = currentStepIndex === 0 ? this.startDirection() : currentStep.direction\n const nextStepPoint = getPointFrom(currentStep.point, currentStep.tile.parameters.inradius, direction)\n\n // Use the midpoint between the previous and next step points to calculate which tile we are in.\n // This will ensure we consistently pick the same tile when the next step point is on the edge of two tiles.\n const tile = puzzle.getTile(getPointBetween(currentStep.point, nextStepPoint))\n\n // The next step would be off the grid\n if (!tile) {\n console.debug(this.toString(), 'stopping due to out of bounds')\n\n const collision = new Collision(0, [currentStep.point], this)\n return this.updateStep(currentStepIndex, {\n done: true,\n state: new StepState(new StepState.Collision(collision))\n })\n }\n\n const nextStepIndex = currentStepIndex + 1\n const existingNextStep = this.#steps[nextStepIndex]\n const lastPathIndex = this.path.length - 1\n const lastSegmentIndex = this.path[lastPathIndex].segments.length - 1\n\n let nextStep = new Step(\n nextStepIndex,\n tile,\n currentStep.color,\n direction,\n nextStepPoint,\n existingNextStep?.pathIndex || lastPathIndex,\n existingNextStep?.segmentIndex || lastSegmentIndex\n )\n\n const items = uniqueBy(\n tile.items.concat(currentStep.tile.equals(nextStep.tile) ? [] : currentStep.tile.items),\n 'id'\n )\n\n console.debug(this.toString(), 'collision items:', items)\n\n // See if there are any collisions along the path we plan to take\n const collisions = this.#getCollisions(items, currentStep, nextStep, puzzle)\n .map((collision, index) => new Collision(index, collision.points, this, collision.item))\n\n if (collisions.length) {\n console.debug(this.toString(), 'collisions:', collisions)\n }\n\n let collisionStep\n for (let collisionIndex = 0; collisionIndex < collisions.length; collisionIndex++) {\n const collision = collisions[collisionIndex]\n\n console.debug(this.toString(), 'resolving collision:', collision)\n\n // By default, the next step will be treated as a collision with the beam stopping at the first point of\n // intersection with the item.\n collisionStep = nextStep.copy({\n done: true,\n point: collision.point,\n state: nextStep.state.copy(new StepState.Collision(collision))\n })\n\n // Allow the item to change the resulting step\n collisionStep = collision.item.onCollision({\n beam: this,\n collision,\n collisions,\n collisionStep,\n currentStep,\n nextStep,\n existingNextStep,\n puzzle\n })\n\n if (collisionStep instanceof Step) {\n break\n }\n }\n\n if (collisionStep) {\n nextStep = collisionStep\n }\n\n // See if we need to change history\n if (existingNextStep) {\n // The next step we would take is the same as the step that already exists in history\n if (nextStep.equals(existingNextStep)) {\n this.#stepIndex++\n\n const lastStepIndex = this.getLastStepIndex()\n console.debug(\n this.toString(),\n 'new step is same as existing. new step index:',\n this.#stepIndex,\n 'last step index:',\n lastStepIndex\n )\n\n if (this.#stepIndex === lastStepIndex) {\n // To ensure we mark as done\n this.#onUpdate(this.#stepIndex)\n }\n\n return existingNextStep\n } else {\n console.debug(\n this.toString(),\n `is revising history at step index: ${nextStepIndex}`,\n 'existing step:',\n existingNextStep,\n 'new step:',\n nextStep\n )\n this.#updateHistory(nextStepIndex)\n }\n }\n\n if (currentStepIndex === this.#stepIndex && currentStep.point.equals(nextStep.point)) {\n // Note: ensuring history has not been modified when evaluating next step vs current\n console.debug(this.toString(), 'next step point is same as current step point, stopping.', nextStep)\n return this.updateStep(currentStepIndex, nextStep.copy({ done: true }))\n }\n\n return this.addStep(nextStep)\n }\n\n toString () {\n return `[${this.type}:${this.id}:${chroma(this.getColor()).name()}]`\n }\n\n update (stepIndex, settings = {}, timeout) {\n if (typeof settings === 'number') {\n timeout = settings\n settings = {}\n }\n const update = this.#update.bind(this, stepIndex, settings, timeout)\n return timeout === undefined ? update() : setTimeout(update, timeout)\n }\n\n updateState (updater, dispatchEvent = true) {\n return this.parent.updateState((state) => updater(state.openings[this.#direction]), dispatchEvent)\n }\n\n updateStep (stepIndex, settings) {\n const step = this.getStep(stepIndex)\n if (step) {\n const updatedStep = this.#getUpdatedStep(step, settings)\n this.#steps[stepIndex] = updatedStep\n updatedStep.onAdd(updatedStep)\n\n console.debug(this.toString(), 'updated step at index', stepIndex, 'from', step, 'to', updatedStep)\n this.#onUpdate(stepIndex)\n return updatedStep\n }\n }\n\n #getCollisions (items, currentStep, nextStep, puzzle) {\n const segments = [currentStep.point, nextStep.point]\n const path = new Path({ segments })\n const firstPoint = segments[0]\n return items\n .map((item) => {\n const points = []\n const intersections = path.getIntersections(\n item.getCompoundPath(),\n // Ignore first point from self which will always collide\n (curveLocation) => !(item === this && curveLocation.point.equals(firstPoint))\n )\n\n points.push(...new Set(intersections.map((intersection) => intersection.point)))\n\n // Handle the edge case of colliding with a beam with a single, isolated path item.\n // This will happen in the case of a portal exit collision, for example.\n if (!points.length && item.type === Item.Types.beam && item !== this) {\n points.push(\n ...item.getSteps().map((step) => step.point)\n .filter((point) => segments.some((segment) => fuzzyEquals(point, segment)))\n )\n }\n\n // Sort collision points by distance from origin point (closest collision points first)\n points.sort(getDistance(firstPoint))\n\n if (puzzle.debug) {\n puzzle.drawDebugPoint(firstPoint)\n points.forEach((point) => puzzle.drawDebugPoint(point, { fillColor: 'black' }))\n }\n\n return { points, item }\n })\n .filter((result) => result.points.length)\n .sort((a, b) => {\n // Sort items returned by proximity to starting point\n const distance = getDistance(firstPoint)(a.points[0], b.points[0])\n if (distance === 0) {\n // If two items are an equal distance away, sort by sort order as defined on item\n return a.item.sortOrder - b.item.sortOrder\n }\n\n return distance\n })\n }\n\n #getItemIndex (step) {\n return step.insertAbove ? step.insertAbove.getIndex() + 1 : 0\n }\n\n #getUpdatedStep (step, settings) {\n if (typeof settings === 'function') {\n settings = settings(step)\n }\n\n return settings instanceof Step ? settings : step.copy(settings)\n }\n\n #update (stepIndex, settings) {\n if (stepIndex < this.getLastStepIndex()) {\n const step = this.#updateHistory(stepIndex)\n this.addStep(this.#getUpdatedStep(step, settings))\n } else {\n this.updateStep(stepIndex, settings)\n }\n }\n\n #onUpdate (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n stepIndex ??= lastStepIndex\n\n const step = this.getStep(stepIndex)\n\n if (stepIndex === lastStepIndex) {\n // Update beam status if last step was updated\n this.done = step?.done ?? false\n }\n\n emitEvent(Beam.Events.Update, { beam: this, state: step?.state, step, stepIndex })\n }\n\n #updateHistory (stepIndex) {\n const lastStepIndex = this.getLastStepIndex()\n const step = this.#steps[stepIndex]\n\n console.debug(\n this.toString(),\n 'updateHistory',\n 'stepIndex:',\n stepIndex,\n 'lastStepIndex:',\n lastStepIndex,\n 'step:',\n step\n )\n\n if (step) {\n const currentPath = this.path[step.pathIndex]\n\n // Remove any now invalid path segments\n currentPath.removeSegments(step.segmentIndex)\n\n // If the current path is empty, remove it along with everything after it.\n const spliceIndex = step.pathIndex + (currentPath.segments.length === 0 ? 0 : 1)\n\n // Remove any now invalid path items\n this.path.splice(spliceIndex).forEach((item) => item.remove())\n\n const deletedSteps = this.#steps.splice(stepIndex)\n\n console.debug(this.toString(), 'removed steps: ', deletedSteps)\n\n const tiles = [...new Set(deletedSteps.map((step) => step.tile))]\n // Remove references to the beam in any tiles it is no longer in\n tiles.filter((tile) => this.getSteps(tile).length === 0).forEach((tile) => tile.removeItem(this))\n\n deletedSteps.forEach((step) => step.onRemove(step))\n\n this.done = false\n this.#stepIndex = (stepIndex - 1)\n\n this.#onUpdate(this.#stepIndex)\n }\n\n return step\n }\n\n static CacheKeys = Object.freeze({\n MergeWith: 'mergeWith'\n })\n\n static Events = Object.freeze({\n Collision: 'beam-collision',\n Connection: 'beam-connection',\n Merge: 'beam-merge',\n Update: 'beam-update'\n })\n}\n","import { StepState } from './step'\n\nexport class Collision {\n constructor (index, points, beam, item) {\n const items = [beam]\n\n if (item !== undefined) {\n items.push(item)\n }\n\n this.beam = beam\n this.index = index\n\n // The item that was collided with\n this.item = item\n this.itemIds = items.map((item) => item.id)\n this.items = items\n\n // The first collision point\n this.point = points[0]\n this.points = points\n\n // Check if the collision is with self\n this.withSelf = beam.equals(item)\n }\n\n copy (settings) {\n return new Collision(\n settings.index ?? this.index,\n settings.points ?? this.points,\n settings.beam ?? this.beam,\n settings.item ?? this.item\n )\n }\n\n equals (other) {\n return other && other.point.equals(this.point) &&\n other.items.every((item) => this.has(item))\n }\n\n has (item) {\n return this.itemIds.includes(item.id)\n }\n\n mirror () {\n return this.copy({ beam: this.item, item: this.beam })\n }\n}\n\nexport class CollisionMergeWith {\n constructor (beam, step, stepIndex) {\n this.beams = [beam].concat(step.state.get(StepState.MergeWith)?.beams || [])\n this.colors = step.colors.concat(beam.getColors())\n this.stepIndex = stepIndex\n }\n}\n","import { Path, Point, Size } from 'paper'\nimport { Item } from '../item'\nimport { rotatable } from '../modifiers/rotate'\nimport { getPointBetween, getOppositeDirection, getPosition, getReflectedDirection, getPointFrom } from '../util'\nimport { movable } from '../modifiers/move'\nimport { StepState } from '../step'\n\nexport class Reflector extends movable(rotatable(Item)) {\n #item\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 30 })\n\n this.color = state.color || 'black'\n this.#item = Reflector.item(tile, this.color)\n\n this.group.addChild(this.#item)\n }\n\n midLine () {\n // Two points which form a line through the mid-point of the reflector\n return [\n getPointBetween(this.#item.segments[3].point, this.#item.segments[0].point),\n getPointBetween(this.#item.segments[1].point, this.#item.segments[2].point)\n ]\n }\n\n getSide (point) {\n // Returns the side of the reflector the point is on (0, 1, or -1)\n return getPosition(this.midLine(), point)\n }\n\n isSameSide (pointA, pointB) {\n return this.getSide(pointA) === this.getSide(pointB)\n }\n\n onCollision ({ beam, collision, collisions, collisionStep, currentStep, nextStep }) {\n const directionFrom = getOppositeDirection(currentStep.direction)\n const directionTo = getReflectedDirection(directionFrom, this.rotation)\n\n if (directionTo === currentStep.direction) {\n console.debug(beam.toString(), 'stopping due to collision with non-reflective side of reflector')\n return collisionStep\n }\n\n if (directionTo === directionFrom) {\n console.debug(beam.toString(), 'stopping due to reflection back at self')\n if (collisions.some((collision) => collision.item.type === Item.Types.beam)) {\n // If there is also a beam collision in the list of collisions for this step, let that one resolve it\n return\n } else {\n // Instead of using collisionStep, just add a collision to nextStep. This will ensure any beams that hit the\n // same side of the reflector will collide with this beam.\n return nextStep.copy({\n done: true,\n state: nextStep.state.copy(new StepState.Collision(collision.copy({ points: [nextStep.point] })))\n })\n }\n }\n\n // The beam will collide with a reflector twice, on entry and exit, so ignore the first one, but track in state\n if (!currentStep.state.has(StepState.Reflector)) {\n return nextStep.copy({ state: nextStep.state.copy(new StepState.Reflector(this)) })\n }\n\n const point = getPointFrom(currentStep.point, nextStep.tile.parameters.inradius, directionTo)\n return nextStep.copy({ direction: directionTo, point })\n }\n\n static item (tile, color) {\n const length = tile.parameters.circumradius\n const width = tile.parameters.circumradius / 12\n const topLeft = tile.center.subtract(new Point(width / 2, length / 2))\n const size = new Size(width, length)\n\n return new Path.Rectangle({\n data: { size },\n fillColor: color,\n point: topLeft,\n size\n })\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\nimport { addDirection } from '../util'\nimport { rotatable } from '../modifiers/rotate'\nimport { movable } from '../modifiers/move'\n\nexport class Wall extends movable(rotatable(Item)) {\n sortOrder = 1\n\n constructor (tile, state) {\n super(tile, state, { rotationDegrees: 60 })\n const walls = Wall.item(tile, state)\n this.group.addChildren(walls)\n }\n\n static item (tile, configuration) {\n const radius = tile.parameters.circumradius\n const width = radius / 12\n const fillColor = tile.styles.default.strokeColor\n\n return configuration.directions.map((direction) => {\n const firstSegment = tile.hexagon.segments[direction].point\n const nextDirection = addDirection(direction, 1)\n const lastSegment = tile.hexagon.segments[nextDirection].point\n\n return new Path({\n closed: true,\n fillColor,\n segments: [\n firstSegment,\n tile.hexagon.getLocationAt(\n (direction === 0 ? tile.hexagon.length : tile.hexagon.getOffsetOf(firstSegment)) - width\n ),\n tile.hexagon.getLocationAt(\n (nextDirection === 0 ? 0 : tile.hexagon.getOffsetOf(lastSegment)) + width\n ),\n lastSegment\n ]\n })\n })\n }\n}\n","import { Immutable } from './modifiers/immutable'\nimport { Lock } from './modifiers/lock'\nimport { Move } from './modifiers/move'\nimport { Rotate } from './modifiers/rotate'\nimport { Toggle } from './modifiers/toggle'\nimport { Modifier } from './modifier'\nimport { Swap } from './modifiers/swap'\n\nexport function modifierFactory (tile, configuration) {\n let modifier\n\n switch (configuration.type) {\n case Modifier.Types.immutable:\n modifier = new Immutable(tile, configuration)\n break\n case Modifier.Types.lock:\n modifier = new Lock(tile, configuration)\n break\n case Modifier.Types.move:\n modifier = new Move(tile, configuration)\n break\n case Modifier.Types.rotate:\n modifier = new Rotate(tile, configuration)\n break\n case Modifier.Types.swap:\n modifier = new Swap(tile, configuration)\n break\n case Modifier.Types.toggle:\n modifier = new Toggle(tile, configuration)\n break\n default:\n console.error('Ignoring modifier with unknown type:', configuration.type)\n break\n }\n\n return modifier\n}\n","import { Modifier } from '../modifier'\n\nexport class Immutable extends Modifier {\n immutable = true\n name = 'block'\n title = 'Immutable'\n}\n","import { Modifier } from '../modifier'\n\nexport class Lock extends Modifier {\n immutable = true\n name = 'lock'\n title = 'Locked'\n}\n","import { Move } from './move'\nimport { Modifier } from '../modifier'\nimport { Item } from '../item'\n\nexport class Swap extends Move {\n name = 'swap_horiz'\n title = 'Swap'\n\n moveItems (tile) {\n const toItems = tile.items.filter(Move.movable)\n const fromItems = this.tile.items.filter(Move.movable)\n\n fromItems.forEach((item) => item.move(tile))\n toItems.forEach((item) => item.move(this.tile))\n\n return {\n moved: [Move.data(this.tile, tile, fromItems), Move.data(tile, this.tile, toItems)],\n tiles: [this.tile, tile]\n }\n }\n\n tileFilter (tile) {\n // Filter out immutable tiles and tiles without items\n return tile.modifiers.some(Modifier.immutable) || !tile.items.filter((item) => item.type !== Item.Types.beam).length\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Mask extends Item {\n constructor (tile, style) {\n super(null, style, { locked: false, type: Item.Types.mask })\n\n const data = { type: this.type }\n const item = new Path.RegularPolygon({\n center: tile.center,\n closed: true,\n data,\n opacity: 0.25,\n radius: tile.parameters.circumradius + 1,\n sides: 6,\n style: Object.assign({ fillColor: 'black' }, style)\n })\n\n this.center = tile.center\n this.group.addChild(item)\n }\n}\n","import { Item } from '../item'\nimport { Path } from 'paper'\n\nexport class Collision extends Item {\n constructor (state) {\n super(null, state, { type: Item.Types.collision })\n\n const { center, color } = state\n\n this.center = center\n this.color = color\n\n const item = new Path.Circle({\n center,\n closed: true,\n radius: 4,\n style: {\n fillColor: 'white',\n strokeColor: color,\n strokeWidth: 2\n }\n })\n\n this.group.addChild(item)\n }\n}\n","import { Puzzles } from '../puzzles'\nimport { base64decode, base64encode, jsonDiffPatch, params, url } from './util'\n\nconst history = window.history\nconst localStorage = window.localStorage\n\nexport class State {\n #current\n #deltas\n #id\n #index\n #original\n #selectedTile\n #version\n\n constructor (id, original, deltas, deltasIndex, selectedTile, version) {\n this.#id = id\n this.#original = original\n this.#deltas = deltas || []\n this.#index = deltasIndex || this.#lastIndex()\n this.#selectedTile = selectedTile\n this.#version = version ?? original.version\n\n // Update current state\n this.#current = structuredClone(original)\n this.#deltas.filter((delta, index) => index <= this.#index).forEach((delta) => this.apply(delta))\n\n this.#updateCache(id)\n }\n\n apply (delta) {\n // Support for deltas stored as stringified JSON in cache\n if (typeof delta === 'string') {\n delta = JSON.parse(delta)\n }\n console.debug('StateManager: applying delta', delta)\n return jsonDiffPatch.patch(this.#current, delta)\n }\n\n canRedo () {\n return this.#index < this.#lastIndex()\n }\n\n canUndo () {\n return this.#index >= 0\n }\n\n encode () {\n return base64encode(JSON.stringify({\n id: this.#id,\n // No need to cache puzzles which exist in code\n original: Puzzles.has(this.#id) ? undefined : this.#original,\n deltas: this.#deltas,\n deltasIndex: this.#index,\n selectedTile: this.#selectedTile,\n version: this.#version\n }))\n }\n\n getCurrent () {\n return structuredClone(this.#current)\n }\n\n getId () {\n return this.#id\n }\n\n getTitle () {\n return this.getId() + (this.#current.title ? ` - ${this.#current.title}` : '')\n }\n\n getSelectedTile () {\n return this.#selectedTile\n }\n\n moves () {\n return this.#index + 1\n }\n\n length () {\n return this.#deltas.length\n }\n\n redo () {\n const nextIndex = this.#index + 1\n if (nextIndex <= this.#lastIndex()) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= nextIndex).forEach((delta) => this.apply(delta))\n this.#index = nextIndex\n this.#updateCache()\n }\n }\n\n reset () {\n this.#current = structuredClone(this.#original)\n this.#deltas = []\n this.#index = this.#lastIndex()\n this.#selectedTile = undefined\n\n State.clearCache(this.getId())\n\n this.#updateCache()\n }\n\n setSelectedTile (tile) {\n const id = tile?.coordinates.offset.toString()\n if (this.#selectedTile !== id) {\n this.#selectedTile = id\n this.#updateCache()\n }\n }\n\n undo () {\n const previousIndex = this.#index - 1\n if (previousIndex >= -1) {\n this.#current = structuredClone(this.#original)\n this.#deltas.filter((delta, index) => index <= previousIndex).forEach((delta) => this.apply(delta))\n this.#index = previousIndex\n this.#updateCache()\n }\n }\n\n update (newState) {\n const delta = jsonDiffPatch.diff(this.#current, newState)\n console.debug('delta', delta)\n\n if (delta === undefined) {\n // Nothing to do\n return\n }\n\n // Handle updating after undoing\n if (this.#index < this.#lastIndex()) {\n // Remove all deltas after the current one\n this.#deltas.splice(this.#index + 1)\n }\n\n this.apply(delta)\n\n // It seems that the jsondiffpatch library modifies deltas on patch. To prevent that, they will be stored as\n // their stringified JSON representation and parsed before being applied.\n // See:https://github.com/benjamine/jsondiffpatch/issues/34\n this.#deltas.push(JSON.stringify(delta))\n this.#index = this.#lastIndex()\n\n this.#updateCache()\n }\n\n #key (key) {\n return State.key(key, this.getId())\n }\n\n #lastIndex () {\n return this.#deltas.length - 1\n }\n\n #updateCache () {\n const id = this.getId()\n const state = this.encode()\n\n url.hash = ['', id, state].join('/')\n history.pushState({ id, state }, '', url)\n localStorage.setItem(State.CacheKeys.id, id)\n localStorage.setItem(this.#key(State.CacheKeys.state), state)\n }\n\n static clearCache (id) {\n if (!id) {\n // Clear everything\n url.hash = ''\n history.pushState({}, '', url)\n id = localStorage.getItem(State.CacheKeys.id)\n localStorage.clear()\n // Keep current puzzle ID\n localStorage.setItem(State.CacheKeys.id, id)\n } else {\n // Clear a single puzzle\n url.hash = `/${id}`\n history.pushState({ id }, '', url)\n localStorage.removeItem(State.key(State.CacheKeys.state, id))\n }\n }\n\n static fromEncoded (state) {\n state = JSON.parse(base64decode(state))\n state.original = state.original || Puzzles.get(state.id)\n state.original.version ??= 0\n return new State(\n state.id,\n state.original,\n state.deltas,\n state.deltasIndex,\n state.selectedTile,\n state.version\n )\n }\n\n static fromId (id) {\n return new State(id, Puzzles.get(id))\n }\n\n static resolve (id) {\n let state\n\n // Allow cache to be cleared via URL param\n if (params.has(State.ParamKeys.clearCache)) {\n State.clearCache(params.get(State.ParamKeys.clearCache))\n }\n\n const pathSegments = url.hash.substring(1).split('/').filter((path) => path !== '')\n\n if (!id) {\n // If no explicit ID is given, try to load state from URL\n pathSegments.filter((path) => !Puzzles.has(path)).some((segment, index) => {\n try {\n state = State.fromEncoded(segment)\n id = state.getId()\n } catch (e) {\n console.debug(`Could not parse state from path segment '${index}'`, e)\n }\n\n return state !== undefined\n })\n }\n\n if (!state) {\n // Update ID before checking for state in localStorage.\n id = id || pathSegments[0] || localStorage.getItem(State.CacheKeys.id) || Puzzles.visible.firstId\n\n const localState = localStorage.getItem(State.key(State.CacheKeys.state, id))\n if (localState) {\n try {\n state = State.fromEncoded(localState)\n } catch (e) {\n console.debug(`Could not parse state with ID '${id}' from localStorage`, e)\n }\n }\n }\n\n if (state) {\n const cachedVersion = state.#version\n const originalVersion = state.#original.version\n\n if (cachedVersion !== originalVersion) {\n console.debug(\n `Invalidating cache for ID ${id} due to version mismatch. ` +\n `Puzzle: ${originalVersion}, Cache: ${cachedVersion}`\n )\n state = undefined\n State.clearCache(id)\n }\n }\n\n if (!state) {\n // Fall back to loading state from Puzzles cache by ID\n state = State.fromId(id)\n }\n\n if (!state) {\n throw new Error(`Unable to resolve state for ID '${id}'`)\n }\n\n return state\n }\n\n static key (key, id) {\n return `${key}:${id}`\n }\n\n static CacheKeys = Object.freeze({\n center: 'center',\n id: 'id',\n state: 'state',\n zoom: 'zoom'\n })\n\n static ParamKeys = Object.freeze({\n clearCache: 'clearCache'\n })\n}\n","const puzzles = {\n '001': require('./001.json'),\n '002': require('./002.json'),\n '003': require('./003.json'),\n '004': require('./004.json'),\n '005': require('./005.json'),\n '006': require('./006.json'),\n '007': require('./007.json'),\n '008': require('./008.json'),\n '009': require('./009.json'),\n '010': require('./010.json'),\n '011': require('./011.json'),\n test_infinite_loop: require('./test/infiniteLoop.json'),\n test_layout: require('./test/layout'),\n test_portal: require('./test/portal.json'),\n test_reflector: require('./test/reflector.json')\n}\n\nfunction traverse (ids, id, amount) {\n const index = ids.indexOf(id)\n return ids[index < 0 ? index : index + amount]\n}\n\nclass PuzzleGroup {\n ids\n\n constructor (ids) {\n this.firstId = ids[0]\n this.ids = ids\n this.lastId = ids[ids.length - 1]\n }\n\n get (id) {\n if (this.has(id)) {\n // Note: deep cloning puzzles to prevent mutation\n return structuredClone(puzzles[id])\n }\n }\n\n has (id) {\n return this.ids.includes(id)\n }\n\n nextId (id) {\n return traverse(this.ids, id, 1)\n }\n\n previousId (id) {\n return traverse(this.ids, id, -1)\n }\n}\n\nexport const Puzzles = new PuzzleGroup(Object.keys(puzzles).sort())\n\nPuzzles.hidden = new PuzzleGroup(Puzzles.ids.filter((id) => id.startsWith('test_')))\nPuzzles.titles = Object.fromEntries(Puzzles.ids.map((id) => [id, puzzles[id].title || id]))\nPuzzles.visible = new PuzzleGroup(Puzzles.ids.filter((id) => !Puzzles.hidden.has(id)))\n","import { capitalize, getIconElement, getTextElement } from './util'\nimport { Terminus } from './items/terminus'\nimport { EventListeners } from './eventListeners'\nimport { Puzzle } from './puzzle'\n\nexport class Solution {\n #conditions = []\n\n constructor (state) {\n state.forEach((condition) => this.#conditionFactory(condition))\n }\n\n teardown () {\n this.#conditions.forEach((condition) => condition.teardown())\n Solution.element.replaceChildren()\n }\n\n isSolved () {\n return this.#conditions.every((condition) => condition.isMet())\n }\n\n #conditionFactory (condition) {\n switch (condition.type) {\n case SolutionCondition.Types.connections: {\n this.#conditions.push(new Connections(condition))\n break\n }\n case SolutionCondition.Types.moves: {\n this.#conditions.push(new Moves(condition))\n break\n }\n default: {\n console.warn('Ignoring condition with unknown type:', condition.type)\n break\n }\n }\n }\n\n static element = document.getElementById('solution')\n}\n\nclass SolutionCondition {\n constructor (state, elements) {\n this.state = state\n\n const li = document.createElement('li')\n li.append(...elements)\n Solution.element.append(li)\n }\n\n isMet () {}\n\n teardown () {}\n\n update () {}\n\n static Types = Object.freeze(Object.fromEntries([\n 'connections',\n 'moves'\n ].map((type) => [type, capitalize(type)])))\n}\n\nclass Connections extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #connections = []\n\n constructor (state) {\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement('/'),\n required,\n getIconElement('link', 'Connections')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n\n this.#eventListeners.add([\n { type: Terminus.Events.Connection, handler: this.update },\n { type: Terminus.Events.Disconnection, handler: this.update }\n ])\n }\n\n isMet () {\n return this.#connections.length === this.state.amount\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Connections.update', event)\n\n const terminus = event.detail.terminus\n const opening = event.detail.opening\n const connectionId = `${terminus.id}:${opening.direction}`\n const connectionIndex = this.#connections.findIndex((connection) => connection === connectionId)\n\n if (opening.connected && connectionIndex < 0) {\n this.#connections.push(connectionId)\n } else if (!opening.connected && connectionIndex >= 0) {\n this.#connections.splice(connectionIndex, 1)\n }\n\n this.#completed.textContent = this.#connections.length.toString()\n }\n}\n\nclass Moves extends SolutionCondition {\n #completed\n #eventListeners = new EventListeners({ context: this })\n #moves = 0\n\n constructor (state) {\n state.operator ??= Moves.Operators.equalTo\n\n if (!Object.values(Moves.Operators).includes(state.operator)) {\n throw new Error(`Invalid moves operator: ${state.operator}`)\n }\n\n const completed = document.createElement('span')\n completed.textContent = '0'\n\n const required = document.createElement('span')\n required.textContent = state.amount.toString()\n\n const elements = [\n completed,\n getTextElement(state.operator),\n required,\n getIconElement('stacks', 'Moves')\n ]\n\n super(state, elements)\n\n this.#completed = completed\n this.#eventListeners.add([{ type: Puzzle.Events.Updated, handler: this.update }])\n }\n\n isMet () {\n // TODO: support 'between' syntax like 2 < 3 < 4 ?\n switch (this.state.operator) {\n case Moves.Operators.equalTo:\n return this.#moves === this.state.amount\n case Moves.Operators.greaterThan:\n return this.#moves > this.state.amount\n case Moves.Operators.lessThan:\n return this.#moves < this.state.amount\n }\n }\n\n teardown () {\n this.#eventListeners.remove()\n super.teardown()\n }\n\n update (event) {\n console.debug('Moves.update', event)\n this.#moves = event.detail.state.moves()\n this.#completed.textContent = this.#moves.toString()\n }\n\n static Operators = Object.freeze({\n equalTo: '=',\n greaterThan: '>',\n lessThan: '<'\n })\n}\n","const script = document.createElement('script')\nscript.setAttribute('src', 'https://www.googletagmanager.com/gtag/js?id=G-HXLD6EE5NS')\ndocument.head.append(script)\n\nconst dataLayer = window.dataLayer = window.dataLayer || []\nfunction gtag () { dataLayer.push(arguments) }\ngtag('js', new Date())\ngtag('config', 'G-HXLD6EE5NS')\n","const doorbellOptions = window.doorbellOptions = {\n appKey: 'o1smdnJiyxObjMcY0jSTf08TIhA814yLq68rEwTDWTavma7dtIVKEdwzMePE2LHC',\n container: document.getElementById('feedback-container'),\n hideButton: true,\n properties: {}\n}\n\nconst script = document.createElement('script')\nscript.setAttribute(\n 'src',\n 'https://embed.doorbell.io/button/14129/1705777677/init?native_json=1&needs_postmessage=0'\n)\ndocument.head.append(script)\n\ndocument.addEventListener('puzzle-updated', (event) => {\n doorbellOptions.properties.puzzleId = event.detail.state.getId()\n})\n"],"names":["$b8ea597934691048$var$static_l_desc","$b8ea597934691048$var$static_d_desc","$b8ea597934691048$var$static_bl_desc","$b8ea597934691048$var$lenfix","$b8ea597934691048$var$distfix","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","self","window","global","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","parcelRegister","self1","undefined","document","Base","hidden","array","slice","create","describe","getOwnPropertyDescriptor","define1","forEach","iter","bind","i","l","length","forIn","hasOwnProperty","assign","dst","arguments","src","key","each","obj","desc","value","inject","dest","beans","preserve","beansNames","field","name","val","substring","bean","isFunc","res","prev","base","match","toLowerCase","isPlainObject","writable","test","part","statics","prototype","extend","ctor","proto","initialize","apply","clone","constructor","define","pick","b","list","begin","end","toString","_id","_class","_name","type","push","Formatter","instance","number","join","getClassName","importJSON","json","exportJSON","options","toJSON","serialize","props","exclude","filter","_prioritize","equals","obj1","obj2","Array","isArray","keys","read","start","amount","peek","__index","readIndex","_readIndex","readNull","__read","filtered","__filtered","remain","readList","entry","readNamed","getNamed","hasValue","source","getSource","__unfiltered","readSupported","that","__source","arg","hasNamed","prioritize","handleKey","processed","isPlainValue","asString","compact","dictionary","isRoot","formatter","precision","definitions","references","add","item","ref","unshift","_serialize","_compactSerialize","deserialize","_data","_setDictionary","_isRoot","isFirst","hasDictionary","isDictionary","args","JSON","stringify","target","parse","useTarget","Item","Layer","insert","concat","INSERT","items","itemsLength","startLength","splice","index","remove","append","_index","removed","capitalize","str","replace","toUpperCase","camelize","chr","hyphenate","Emitter","on","func","types","_eventTypes","handlers","_callbacks","indexOf","install","off","uninstall","once","handler","emit","event","setTarget","currentTarget","stop","responds","attach","detach","fire","_installEvents","events","_events","isString","PaperScope","paper","settings","applyMatrix","insertItems","handleSize","hitTolerance","project","projects","tools","_scopes","support","ctx","CanvasProvider","getContext","nativeDash","nativeBlendModes","BlendMode","nativeModes","release","agent","user","navigator","userAgent","os","exec","platform","browser","v1","v2","rv","chrome","version","versionNumber","parseFloat","trident","jsdom","webkit","atom","getView","_view","getPaper","execute","PaperScript","View","updateFocus","scope","setup","element","Project","createCanvas","width","height","getCanvas","activate","clear","handleAttribute","el","attr","getAttribute","hasAttribute","PaperScopeItem","_scope","_list","_reference","isActive","CollisionDetection","findItemBoundsCollisions","items1","items2","tolerance","getBounds","bounds","rect","left","top","right","bottom","bounds1","bounds2","findBoundsCollisions","findCurveBoundsCollisions","curves1","curves2","bothAxis","curves","min","Math","max","hor","ver","boundsA","boundsB","sweepVertical","onlySweepAxisCollisions","allBounds","lengthA","lengthAll","binarySearch","indices","coord","lo","hi","mid","pri0","pri1","sec0","sec1","allIndicesByPri0","sort","i1","i2","activeIndicesByPri1","allCollisions","curIndex","curBounds","origIndex","isCurrentA","isCurrentB","curCollisions","pruneCount","j","activeIndex","curSec1","curSec0","activeBounds","isActiveA","isActiveB","curPri1","collisions","multiplier","pow","round","pair","val1","val2","separator","point","x","y","size","rectangle","Numerical","abscissas","weights","abs","sqrt","log2","log","LOG2E","clamp","getDiscriminant","c","split","D","E","ad","bd","cd","p","dp","q","dq","getNormalizationFactor","norm","EPSILON","MACHINE_EPSILON","CURVETIME_EPSILON","GEOMETRIC_EPSILON","TRIGONOMETRIC_EPSILON","ANGULAR_EPSILON","KAPPA","isZero","isMachineZero","integrate","f","w","A","B","m","sum","Ax","findRoot","df","fx","dx","nx","solveQuadratic","roots","x1","x2","Infinity","Q","R","count","boundless","minB","maxB","isFinite","solveCubic","d","b1","c2","qd","evaluate","x0","tmp","t","r","td","rd","UID","_pools","pool","Point","arg0","arg1","reading","hasY","_set","setAngle","angle","getLength","setLength","_angle","cos","sin","scale","getAngle","getAngleInRadians","PI","setAngleInRadians","getAngleInDegrees","setAngleInDegrees","atan2","div","NaN","dot","acos","getQuadrant","getDirectedAngle","cross","getDistance","squared","normalize","current","rotate","center","subtract","transform","matrix","_transformPoint","multiply","divide","modulo","negate","isInside","Rectangle","contains","isClose","isCollinear","isColinear","isOrthogonal","isNaN","isInQuadrant","point1","point2","random","y1","y2","op","LinkedPoint","owner","setter","_x","_y","_owner","_setter","_dontNotify","getX","setX","getY","setY","isSelected","_selection","_getSelection","setSelected","selected","_changeSelection","Size","hasHeight","size1","size2","LinkedSize","_width","_height","getWidth","setWidth","getHeight","setHeight","arg2","arg3","from","to","frm","next","rt","getPoint","_dontLink","setPoint","getSize","_fw","_fh","setSize","sx","_sx","sy","_sy","h","getLeft","setLeft","getTop","setTop","getRight","setRight","getBottom","setBottom","getCenterX","setCenterX","getCenterY","setCenterY","getCenter","setCenter","getArea","isEmpty","_containsRectangle","_containsPoint","intersects","epsilon","intersect","unite","include","expand","parts","xFirst","LinkedRectangle","internal","Matrix","ok","_a","_b","_c","_d","_tx","_ty","reset","tx","ty","_changed","getValues","_applyMatrix","mx","recursively","_setApplyMatrix","isIdentity","translate","shear","skew","toRadians","tan","a1","c1","d1","a2","b2","d2","tx2","ty2","prepend","tx1","ty1","appended","prepended","invert","det","inverted","concatenate","preConcatenate","chain","_shiftless","_orNullIfIdentity","isInvertible","isSingular","_transformCoordinates","_transformCorners","coords","_transformBounds","inverseTransform","_inverseTransform","decompose","degrees","asin","translation","getTranslation","rotation","scaling","skewing","getScaling","getRotation","applyToContext","prop","Line","arg4","asVector","_px","_py","_vx","_vy","getVector","line","isInfinite","getSide","getSignedDistance","p1x","p1y","v1x","v1y","p2x","p2y","v2x","v2y","dy","u1","u2","uMin","px","py","vx","vy","ccw","_children","_namedChildren","_activeLayer","_currentStyle","Style","_selectionItems","_selectionCount","_updateVersion","flags","view","_needsUpdate","_requested","_autoUpdate","requestUpdate","changes","_changes","changesById","_changesById","children","getCurrentStyle","setCurrentStyle","style","getIndex","getOptions","getLayers","getActiveLayer","getSymbolDefinitions","ids","getItems","class","SymbolItem","definition","_definition","getSymbols","getSelectedItems","selectionItems","selection","isInserted","_updateSelection","selectAll","setFullySelected","deselectAll","addLayer","layer","insertLayer","_remove","_setProject","setName","_insertItem","_created","NO_INSERT","insertChild","_getItems","getItem","removeOn","sets","_removeSets","mousedrag","other","draw","pixelRatio","save","param","offset","viewMatrix","matrices","updateMatrix","restore","strokeWidth","_drawSelection","_serializeFields","_canApplyMatrix","_canScaleStroke","_pivot","_visible","_blendMode","_opacity","_locked","_guide","_clipMask","_selectBounds","_selectChildren","pivot","visible","blendMode","opacity","locked","guide","clipMask","data","_countItemEvent","onFrame","_animateItem","onLoad","onError","_itemHandlers","_initialize","hasProps","_matrix","_parent","_style","parent","fields","fontSize","Group","_defaults","symbol","_symbol","cacheParent","_project","_bounds","_position","_decomposed","_globalMatrix","_clearBoundsCache","getId","getName","_removeNamed","_getOwner","namedChildren","getStyle","setStyle","getSelection","setSelection","flag","isFullySelected","isClipMask","setClipMask","setFillColor","setStrokeColor","getData","setData","getPosition","position","_getPositionFromBounds","setPosition","getPivot","setPivot","getStrokeBounds","stroke","getHandleBounds","handle","getInternalBounds","hasMatrix","opts","_boundsOptions","getStrokeScaling","cacheItem","_getCachedBounds","setBounds","_backup","_getBounds","_updateBoundsCache","_getBoundsCacheKey","noInternal","cacheKey","cached","nonscaling","hasStroke","_getStrokeMatrix","_item","getViewMatrix","_boundsCache","cache","_decompose","decomposed","setRotation","setScaling","getMatrix","setMatrix","getGlobalMatrix","_dontClone","parents","getApplyMatrix","setApplyMatrix","getTransformContent","setTransformContent","getProject","installEvents","getLayer","getParent","setParent","addChild","getChildren","setChildren","removeChildren","addChildren","getFirstChild","getLastChild","getNextSibling","getPreviousSibling","_equals","copy","deep","copyAttributes","copyContent","insertAbove","orig","excludeMatrix","rasterize","resolution","raster","Raster","getResolution","topLeft","getTopLeft","floor","boundsSize","bottomRight","getBottomRight","ceil","rasterSize","_contains","_asPathItem","Path","getIntersections","hitTest","_hitTest","HitResult","hitTestAll","all","hitTestChildren","_exclude","child","_hitTestChildren","parentViewMatrix","guides","tolerancePadding","_tolerancePadding","_getStrokePadding","checkSelf","hit","checkPoint","pt","checkPosition","checkCenter","checkBounds","points","_hitTestSelf","fill","hasFill","matches","compare","matchObject","firstOnly","overlapping","inside","recursive","path","childMatrix","insertChildren","inserted","notifySelf","_insertAt","insertBelow","sendToBack","bringToFront","appendTop","appendBottom","moveAbove","moveBelow","addTo","copyTo","reduce","namedArray","notifyParent","_dispose","replaceWith","reverseChildren","reverse","numChildren","isEditable","hasShadow","_getOrder","getList","list1","list2","hasChildren","isAbove","isBelow","isParent","isChild","isDescendant","isAncestor","isSibling","isGroupedWith","_applyRecursively","transformMatrix","fillColor","getFillColor","strokeColor","getStrokeColor","_transformContent","decomp","applyRecursively","globalToLocal","localToGlobal","parentToLocal","localToParent","fitBounds","itemRatio","rectRatio","newBounds","_setStyles","fillStyle","toCanvasStyle","strokeStyle","lineWidth","getStrokeWidth","strokeJoin","getStrokeJoin","strokeCap","getStrokeCap","miterLimit","getMiterLimit","lineJoin","lineCap","dashArray","getDashArray","dashOffset","getDashOffset","setLineDash","lineDashOffset","mozDash","mozDashOffset","blur","getShadowBlur","getShadowOffset","shadowColor","getShadowColor","shadowBlur","shadowOffsetX","shadowOffsetY","parentStrokeMatrix","globalMatrix","mainCtx","itemOffset","prevOffset","normalBlend","nativeBlend","direct","dontStart","clip","_canComposite","pop","strokeMatrix","clipItem","globalAlpha","globalCompositeOperation","setTransform","_draw","dontFinish","getFillRule","process","_isUpdated","updateVersion","CompoundPath","updated","itemSelected","boundsSelected","positionSelected","_drawSelected","color","getSelectedColor","half","pos","beginPath","arc","deltas","delta","moveTo","lineTo","closePath","fillRect","hash","tween","easing","duration","Tween","_handleFrame","time","running","tweenTo","tweenFrom","_clipItem","_getClipItem","isClipped","setClipped","clipped","Shape","radius","_type","_size","_radius","setType","setRadius","getType","getShape","setShape","getRadius","rad","toPath","toShape","dontPaint","untransformed","isCircle","rx","ry","cx","cy","bezierCurveTo","getCornerCenter","halfSize","dir","corner","quadrant","isOnEllipseStroke","padding","vector","hitStroke","hitFill","strokeRadius","strokePadding","outer","inner","createShape","Circle","Ellipse","ellipse","_readEllipse","crossOrigin","_smoothing","image","object","getElementById","naturalHeight","setImage","setSource","_loaded","_image","canvas","_canvas","_setImage","copyCanvas","drawImage","_crossOrigin","_clear","getElement","getLoaded","u","getPpi","getImage","Event","setTimeout","DomEvent","load","error","complete","naturalWidth","_context","setCanvas","_change","setContext","context","toDataURL","Image","getCrossOrigin","setCrossOrigin","getSmoothing","setSmoothing","smoothing","getSubCanvas","getSubRaster","getAverageColor","PathItem","_sampleContext","clearRect","sampleSize","pixels","getImageData","channels","total","alpha","Color","getPixel","setPixel","components","_convert","_alpha","imageData","createImageData","putImageData","setImageData","disabled","DomElement","setPrefixed","setDefinition","SymbolDefinition","getDefinition","getSymbol","setSymbol","dontCenter","setItem","_dontCenter","place","values","segments","handles","ends","Segment","arg5","handleIn","handleOut","SegmentPoint","_point","hasHandles","_handleIn","_handleOut","_path","curve","_curves","_closed","getHandleIn","setHandleIn","getHandleOut","setHandleOut","isSmooth","clearHandles","oldSelection","getPath","getCurve","_segments","getCurves","getLocation","CurveLocation","_segment1","getNext","smooth","_first","_last","factor","getPrevious","p0","p1","p2","k","d1_a","d1_2a","d2_a","d2_2a","N","isLast","reversed","removeSegment","segment","interpolate","handleIn1","handleIn2","handleOut2","handleOut1","change","Curve","arg6","arg7","seg1","seg2","handle1","handle2","segment1","segment2","_segment2","getPoint1","getHandle1","getHandle2","getPoint2","_length","classify","setPoint1","setPoint2","setHandle1","setHandle2","getSegment1","getSegment2","getPoints","getLine","getPart","getPartLength","divideAt","location","divideAtTime","getTimeAt","_setHandles","subdivide","setHandles","splitAt","splitAtTime","getLocationAtTime","isTime","straight","h1","h2","y0","x3","y3","x4","y4","x5","y5","x6","y6","x7","y7","x8","y8","x9","y9","getMonoCurves","io","o0","o1","o2","o3","isStraight","v0","v3","getTimeOf","p3","getNearestTime","minDist","minT","refine","dist","step","flip","isFlatEnough","flatness","ux","uy","_addBounds","minPad","maxPad","s1","s2","isLinear","third","hasLength","isHorizontal","getTangentAtTime","isVertical","getLocationAt","_isTime","getParameterAt","getTimesWithTangent","tangent","getOffsetAtTime","getLocationOf","getOffsetOf","loc","getOffset","getParameterOf","getNearestLocation","getNearestPoint","methods","_evaluateMethods","getLengthIntegrand","ax","bx","ay","by","getIterations","normalized","len","d3","serpentine","t1","t2","hasRoots","t1Ok","t2Ok","f1","f2","ds","forward","rangeLength","diff","guess","getTangent","getWeightedTangent","getNormal","getWeightedNormal","getCurvature","getPeaks","addLocation","locations","overlap","excludeStart","excludeEnd","loc1","loc2","_intersection","clipConvexHull","hullTop","hullBottom","dMin","dMax","clipConvexHullPart","threshold","qx","qy","getCurveLineIntersections","getCurveIntersections","overlaps","getOverlaps","straight1","straight2","before","addCurveIntersections","recursion","calls","tMin","tMax","uMax","tMinClip","tMaxClip","q0x","q0y","q3x","q3y","dp0","dp1","dp2","dp3","hull","getConvexHull","dq0","dq1","dq2","dq3","dist1","dist2","distRatio","tMinNew","tMaxNew","uDiff","getSelfIntersection","info","getSquaredLineLength","straightBoth","l1","l2","pairs","matrix1","matrix2","_returnFirst","length1","length2","values1","values2","boundsCollisions","index1","curve1","collisions1","index2","curve2","den","times","t0","_overlap","_distance","_setCurve","_time","getPointAtTime","_next","_previous","_setPath","_version","_curve","_segment","_setSegment","getSegment","getTime","trySegment","_offset","_curveOffset","getParameter","getCurveOffset","getIntersection","getLastSegment","_ignoreOther","isTouching","inter","isCrossing","t1Inside","t2Inside","c4","c3","offsets","addOffsets","isInRange","getPointAt","v4","a3","a4","hasOverlap","merge","search","found","path1","path2","expanded","pathData","compound","first","isClockwise","setClockwise","clockwise","setPathData","previous","control","relative","getCoord","command","lower","move","cubicCurveTo","quadraticCurveTo","arcTo","winding","_getWinding","onPath","windingL","windingR","getCrossings","minLoc","isPath","itemsFrom","itemsTo","setClosed","paths1","paths2","matched","boundsOverlaps","pathBoundsOverlaps","closed","setSegments","_segmentSelection","_area","getSegments","fullySelected","last","_add","getFirstSegment","_countCurves","getFirstCurve","getLastCurve","isClosed","getPathData","_precision","curX","curY","prevX","prevY","inX","inY","outX","outY","addSegment","skipLine","segs","_adjustCurves","insertSegment","addSegments","insertSegments","removeSegments","_includeCurves","area","_selectSegments","newSelection","last1","last2","first2","first1","simplify","flatten","flattener","PathFlattener","PathFitter","fit","_default","loop","asymmetric","paddingLeft","paddingRight","knots","n_1","rf","hx","hy","seg3","topCenter","seg4","isArc","pt1","pt2","shape","pos2","end2","pos1","end1","start2","cap","numSegments","hitCurves","isCloseEnough","checkSegmentPoint","seg","anchor","checkSegmentPoints","addToArea","checkSegmentStroke","isJoin","_addBevelJoin","_addSquareCap","getOffsetsWithTangent","curveStart","curveTimes","drawSegments","drawSegment","dashLength","drawPart","drawHandles","pX","pY","miniSize","miniHalf","drawHandle","hX","hY","getCurrentSegment","moveBy","curveTo","through","extent","middle","large","rxSq","rySq","xSq","ySq","throughSide","centerSide","ext","inc","z","out","_in","lineBy","curveBy","parameter","cubicCurveBy","quadraticCurveBy","arcBy","prevCoords","processSegment","joinBounds","addPoint","addRound","addJoin","addCap","phi","isArea","normal1","getNormalAtTime","normal2","normal","joinPadding","joinRadius","SQRT2","paddingX","paddingY","xn","xx","yn","yx","ellipseSegments","createPath","createEllipse","bl","getBottomLeft","tl","tr","getTopRight","br","RoundRectangle","Oval","Arc","RegularPolygon","sides","three","Star","radius1","radius2","paths","getCurrentPath","check","operators","getPaths","preparePath","resolve","resolveCrossings","reorient","createResult","result","filterIntersection","traceBoolean","operation","trace","splitBoolean","_path1","_path2","operator","crossings","divideLocations","collectPaths","_overlapsOnly","curvesValues","curveCollisions","curveCollisionsMap","map","propagateWinding","_winding","tracePaths","reorientPaths","added","addPath","linkIntersections","clearCurveHandles","lookup","container","sorted","entry1","containerWinding","getInteriorPoint","entry2","clearLater","renormalizeLocs","prevCurve","prevTime","results","clearCurves","clearLookup","origTime","newCurve","getWinding","dontFlip","vPrev","vClose","curvesList","ia","pv","pa","po","paL","paR","pathWindingL","pathWindingR","onAnyPath","quality","handleCurve","a0","monoCurves","addWinding","windingPrev","a3Prev","totalLength","curveLength","operand","SQRT1_2","wind","pathWinding","otherPath","starts","isValid","_visited","isStart","visitPath","inter1","inter2","over1","over2","branch","visited","valid","finished","branches","getCrossingSegments","collectStarts","collect","nextInter","shift","hasOverlaps","hasCrossings","intersections","nonZero","intercepts","mv","mo0","mo3","maxRecursion","ignoreStraight","minSpan","addCurve","computeParts","halves","tMid","_get","fitCubic","tan1","tan2","uPrime","chordLengthParameterize","maxError","parametersInOrder","generateBezier","findMaxError","reparameterize","tanCenter","C","X","b0","b3","alpha1","alpha2","detC0C1","detC0X","detXC1","c0","segLength","eps","degree","maxDist","P","TextItem","content","_content","_lines","setContent","getContent","getCharacterStyle","setCharacterStyle","getParagraphStyle","setParagraphStyle","PointText","lines","leading","getLeading","font","getFontStyle","textAlign","getJustification","fillText","strokeText","numLines","justification","getTextWidth","colorCtx","gray","rgb","hsb","hsl","gradient","componentParsers","namedColors","transparent","hsbIndices","converters","g","achromatic","t3s","t3","properties","parser","_components","Gradient","_removeOwner","_addOwner","_properties","argType","converted","fromCSS","string","parseInt","trim","isHSL","component","turn","grad","willReadFrequently","parsers","stops","radial","getComponents","_canvasStyle","converter","convert","getAlpha","setAlpha","hasAlpha","col","isGradient","toCSS","hex","canvasGradient","_stops","origin","destination","highlight","inverse","_radial","createRadialGradient","createLinearGradient","addColorStop","_color","_types","_setOwner","components1","components2","setStops","setRadial","_owners","getStops","GradientStop","getRadial","stops1","stops2","rampPoint","setColor","setOffset","getRampPoint","setRampPoint","getColor","itemDefaults","fillRule","strokeScaling","shadowOffset","selectedColor","groupDefaults","fontFamily","fontWeight","textDefaults","_values","isColor","isPoint","applyToChildren","old","_dontMerge","childValue","Font","WindingRule","isStyle","style1","style2","secondary","defaults2","value1","value2","getFontSize","getFontWeight","getFontFamily","getFont","setFont","getPixelSize","handlePrefix","prefixes","suffix","prefix","getStyles","doc","nodeType","ownerDocument","defaultView","getComputedStyle","viewport","body","html","documentElement","getBoundingClientRect","clientLeft","clientTop","pageXOffset","scrollLeft","pageYOffset","scrollTop","getViewportBounds","innerWidth","clientWidth","innerHeight","clientHeight","isInvisible","isInView","getPrefixed","passive","addEventListener","removeEventListener","targetTouches","changedTouches","pageX","clientX","pageY","clientY","getTarget","srcElement","getRelatedTarget","relatedTarget","toElement","requestAnimationFrame","timer","nativeRequest","requested","callbacks","handleCallbacks","functions","callback","setInterval","getCanvasSize","setAttribute","_viewEvents","none","userDrag","userSelect","touchCallout","contentZooming","tapHighlightColor","_windowEvents","resize","setViewSize","Stats","_stats","stats","domElement","appendChild","_element","_pixelRatio","devicePixelRatio","_setElementSize","_viewSize","_views","_viewsById","_focused","_frameItems","_frameItemCount","_itemEvents","native","virtual","node","_animate","play","pause","_count","getAutoUpdate","setAutoUpdate","autoUpdate","update","now","Date","animate","_handleFrameItems","getPixelRatio","getViewSize","isVisible","parentNode","temp","createElement","removeChild","getZoom","setZoom","zoom","scrollBy","projectToView","viewToProject","getEventPoint","CanvasView","prevFocus","tempFocus","mousedown","mousemove","mouseup","dragging","mouseDown","pointerEnabled","msPointerEnabled","viewEvents","docEvents","mouseout","nodeName","handleMouseMove","scroll","_handleMouseEvent","downPoint","lastPoint","downItem","overItem","dragItem","clickItem","clickTime","dblClick","called","prevented","fallbacks","doubleclick","wasInView","itemEventsMap","click","mouseenter","mouseleave","itemEvents","hitItems","nativeMove","tool","inView","hitItem","mouse","substr","emitMouseEvent","drag","emitMouseEvents","down","up","cancelable","preventDefault","_handleKeyEvent","character","keyEvent","KeyEvent","sign","_resetState","prevPoint","stopItem","mouseEvent","stopped","MouseEvent","fallback","HTMLCanvasElement","deviceRatio","backingStoreRatio","firefox","prevFont","measureText","stopPropagation","getTimeStamp","timeStamp","getModifiers","Key","modifiers","metaFixMap","downKey","keyLookup","charLookup","keyMap","charMap","alt","meta","capsLock","space","option","mac","getKey","keyIdentifier","String","fromCharCode","keyCode","keydown","altKey","metaKey","ctrlKey","keypress","charCode","keyup","isDown","ToolEvent","_choosePoint","toolPoint","getLastPoint","_lastPoint","setLastPoint","getDownPoint","_downPoint","setDownPoint","getMiddlePoint","_middlePoint","setMiddlePoint","middlePoint","getDelta","_delta","setDelta","getCount","setCount","Tool","_moveCount","_downCount","getMinDistance","_minDistance","setMinDistance","minDistance","_maxDistance","getMaxDistance","setMaxDistance","maxDistance","getFixedDistance","setFixedDistance","distance","easings","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","isFunction","_then","_startTime","state","_keys","_parsedKeys","_parseKeys","_from","_getState","_to","then","progress","getValue","__add","__subtract","__multiply","_setProperty","onUpdate","startTime","_getProperty","resolved","_resolveValue","_calculate","parsed","calculateBinary","Http","request","xhr","XMLHttpRequest","open","method","url","async","mimeType","overrideMimeType","onload","status","responseText","onerror","message","send","canvases","sr","sg","sb","sa","bg","bb","ba","dr","dg","db","getLum","setLum","mn","lmn","ln","mxl","getSat","setSat","md","modes","screen","overlay","darken","lighten","difference","exclusion","hue","saturation","luminosity","average","negation","mode","srcContext","dstContext","srcCanvas","dstData","SvgElement","svg","xmlns","xlink","attributeNamespace","href","attributes","namespace","setAttributeNS","tag","createElementNS","getAttributeNS","SvgStyles","true","false","property","attribute","toSVG","fromSVG","exportFilter","getTransform","coordinates","attrs","trans","exportGroup","childNode","exportSVG","exportShape","exporters","embedImages","matchShapes","definitionItem","viewBox","overflow","textContent","svgs","__id","typeId","exportDefinitions","defs","insertBefore","firstChild","XMLSerializer","serializeToString","exporter","onExport","exportGradient","gradientNode","getGradient","getOrigin","getDestination","getHighlight","fy","gradientUnits","stopColor","visibility","setOptions","rootSize","allowNull","allowPercent","defaultValue","defaultX","defaultY","convertValue","importGroup","nodes","childNodes","isClip","isDefs","currentStyle","applyAttributes","querySelectorAll","importNode","importPoly","importGradient","scaleToBounds","_scaleToBounds","importers","clippath","polygon","polyline","lineargradient","radialgradient","use","circle","text","switch","applyTransform","transforms","applyOpacity","gradientTransform","setVisible","display","percent","styles","group","tagName","isElement","nextSibling","importer","onImport","expandShapes","importSVG","DOMParser","parseFromString","File","reader","FileReader","readAsText","mod","acorn","inpt","inputLen","input","initTokenState","parseTopLevel","program","lastStart","lastEnd","tokPos","lastEndLoc","line_loc_t","inFunction","strict","labels","readToken","startNode","tokType","_eof","stmt","parseStatement","isUseStrict","setStrict","finishNode","sourceFile","tokStart","tokEnd","tokStartLoc","tokEndLoc","tokVal","tokRegexpAllowed","tokCurLine","tokLineStart","containsEsc","defaultOptions","ecmaVersion","strictSemicolons","allowTrailingCommas","forbidReserved","allowReturnOutsideFunction","onComment","ranges","directSourceFile","opt","getLineInfo","cur","lineBreak","lastIndex","column","raise","SyntaxError","raisedAt","tokenize","getToken","forceRegexp","startLoc","endLoc","jumpTo","reAllowed","skipSpace","empty","_num","_regexp","_string","_break","keyword","_case","beforeExpr","_catch","_continue","_debugger","_do","isLoop","_else","_finally","_for","_function","_if","_return","_switch","_throw","_try","_var","_while","_with","_new","_this","_null","atomValue","_true","_false","binop","keywordTypes","_bracketL","_bracketR","_braceL","_braceR","_parenL","_parenR","_comma","_semi","_colon","_dot","_question","_slash","_eq","isAssign","_assign","_incDec","postfix","isUpdate","_prefix","_logicalOR","_logicalAND","_bitwiseOR","_bitwiseXOR","_bitwiseAND","_equality","_relational","_bitShift","_plusMin","_multiplyModulo","kw","tokTypes","bracketL","bracketR","braceL","braceR","parenL","parenR","comma","semi","colon","question","slash","eq","eof","num","regexp","makePredicate","words","cats","compareTo","arr","cat","Function","isReservedWord3","isReservedWord5","isStrictReservedWord","isStrictBadIdWord","isKeyword","nonASCIIwhitespace","nonASCIIidentifierStartChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","newline","isIdentifierStart","isIdentifierChar","finishToken","skipLineComment","ch","charCodeAt","skipBlockComment","readRegexp","readWord","tok","getTokenFromCode","readNumber","readInt","readString","quote","octal","readHexChar","finishOp","escaped","inClass","charAt","mods","readWord1","radix","startsWithDot","isFloat","word","esc","escStr","strct","lastIndexOf","node_t","node_loc_t","range","startNodeFrom","expression","eat","canInsertSemicolon","semicolon","unexpected","expect","checkLVal","expr","loopLabel","kind","switchLabel","sawDefault","starttype","isBreak","label","parseIdent","lab","parseParenExpression","parseFor","parseVar","declarations","parseForIn","parseExpression","parseFunction","consequent","alternate","argument","discriminant","cases","isCase","block","parseBlock","clause","guard","guardedHandlers","finalizer","maybeName","allowStrict","oldStrict","noIn","decl","noComma","parseMaybeAssign","expressions","parseMaybeConditional","parseExprOp","minPrec","prec","parseMaybeUnary","parseSubscripts","parseExprAtom","noCalls","computed","callee","parseExprList","raw","tokStartLoc1","tokStart1","elements","parseObj","sawGetSet","parsePropertyName","isGetSet","conflict","isStatement","params","oldInFunc","oldLabels","close","allowTrailingComma","allowEmpty","elts","liberal","binaryOperators","unaryOperators","__self","__$__","$__","compile","insertions","insertion","getCode","replaceCode","sourceMaps","paperFeatures","offsetCode","lineBreaks","getElementsByTagName","innerHTML","mappings","encodeVLQ","base64","safari","file","names","sourceRoot","sources","sourcesContent","operatorOverloading","moduleExports","walkAST","handleOverloading","between","parentType","exp","handleExports","declaration","specifiers","dec","specifier","preserveParens","sourceType","btoa","unescape","encodeURIComponent","toolHandlers","expose","compiled","script","head","createTextNode","__paperscript__","onResize","setOnResize","setOnFrame","loadScript","canvasId","scopeAttribute","baseURI","loadAll","readyState","calculateUnary","Symbol","PlacedSymbol","amd","$f0e98b2c23d58ac9$export$56b48cc5d7560ffb","$f0e98b2c23d58ac9$export$332f4d7bee38db93","$f0e98b2c23d58ac9$export$f435f793048e7a0f","$f0e98b2c23d58ac9$export$d53f8326294b31d8","$f0e98b2c23d58ac9$export$b54c7ea7aabba5c8","$f0e98b2c23d58ac9$export$a1aa2dd4ad0d3f6","$f0e98b2c23d58ac9$export$866e20207bbc41f2","$f0e98b2c23d58ac9$export$2c19a3e3b4008fff","$f0e98b2c23d58ac9$export$268622f0f1cbc82b","$f0e98b2c23d58ac9$export$13807d9ee5a34a42","$f0e98b2c23d58ac9$export$7387db7caf96fcdb","$f0e98b2c23d58ac9$export$7af82191547c5ff7","$f0e98b2c23d58ac9$export$ba43bf67f3d48107","$f0e98b2c23d58ac9$export$7acfa6ed01010e37","$f0e98b2c23d58ac9$export$68e7b4c4d99215d9","$f0e98b2c23d58ac9$export$2b5f701edfbd6f00","$f0e98b2c23d58ac9$export$85c928794f8d04d4","$f0e98b2c23d58ac9$export$50792b0e93539fde","$f0e98b2c23d58ac9$export$83d89fbfd8236492","$f0e98b2c23d58ac9$export$98e6a39c04603d36","$f0e98b2c23d58ac9$export$61f24eb03dd7ce92","$f0e98b2c23d58ac9$export$5f8c09e3ae6f64e1","$f0e98b2c23d58ac9$var$astralIdentifierCodes","$f0e98b2c23d58ac9$var$astralIdentifierStartCodes","$f0e98b2c23d58ac9$var$nonASCIIidentifierStartChars","$f0e98b2c23d58ac9$var$reservedWords","strictBind","$f0e98b2c23d58ac9$var$ecma5AndLessKeywords","$f0e98b2c23d58ac9$var$keywords$1","$f0e98b2c23d58ac9$var$keywordRelationalOperator","$f0e98b2c23d58ac9$var$nonASCIIidentifierStart","$f0e98b2c23d58ac9$var$nonASCIIidentifier","$f0e98b2c23d58ac9$var$isInAstralSet","astral","conf","startsExpr","updateContext","$f0e98b2c23d58ac9$var$binop","$f0e98b2c23d58ac9$var$beforeExpr","$f0e98b2c23d58ac9$var$startsExpr","$f0e98b2c23d58ac9$var$kw","privateId","questionDot","arrow","template","invalidTemplate","ellipsis","backQuote","dollarBraceL","incDec","logicalOR","logicalAND","bitwiseOR","bitwiseXOR","bitwiseAND","equality","relational","bitShift","plusMin","star","starstar","coalesce","_const","_super","_extends","_export","_import","_instanceof","_typeof","_void","_delete","$f0e98b2c23d58ac9$var$nextLineBreak","$f0e98b2c23d58ac9$var$skipWhiteSpace","$f0e98b2c23d58ac9$var$ref","$f0e98b2c23d58ac9$var$hasOwnProperty","$f0e98b2c23d58ac9$var$toString","$f0e98b2c23d58ac9$var$hasOwn","hasOwn","propName","$f0e98b2c23d58ac9$var$isArray","$f0e98b2c23d58ac9$var$wordsRegexp","$f0e98b2c23d58ac9$var$codePointToString","$f0e98b2c23d58ac9$var$loneSurrogate","nextBreak","onInsertedSemicolon","onTrailingComma","allowReserved","allowImportExportEverywhere","allowAwaitOutsideFunction","allowSuperOutsideMethod","allowHashBang","checkPrivateFields","onToken","$f0e98b2c23d58ac9$var$warnedAboutEcmaVersion","$f0e98b2c23d58ac9$var$functionFlags","generator","$f0e98b2c23d58ac9$var$SCOPE_FUNCTION","startPos","$f0e98b2c23d58ac9$var$getOptions","console","warn","tokens","token","comment","keywords","reserved","reservedWords","reservedStrict","reservedWordsStrict","reservedWordsStrictBind","lineStart","curLine","curPosition","lastTokEndLoc","lastTokStartLoc","lastTokStart","lastTokEnd","initialContext","exprAllowed","inModule","strictDirective","potentialArrowAt","potentialArrowInForAwait","yieldPos","awaitPos","awaitIdentPos","undefinedExports","scopeStack","enterScope","regexpState","privateNameStack","$f0e98b2c23d58ac9$var$prototypeAccessors","inGenerator","inAsync","canAwait","allowSuper","allowDirectSuper","treatFunctionsAsVar","allowNewDotTarget","inClassStaticBlock","nextToken","currentVarScope","inClassFieldInit","currentThisScope","treatFunctionsAsVarInScope","currentScope","plugins","cls","parseExpressionAt","tokenizer","defineProperties","$f0e98b2c23d58ac9$var$pp$9","$f0e98b2c23d58ac9$var$literal","spaceAfter","isContextual","eatContextual","expectContextual","insertSemicolon","afterTrailingComma","notNext","$f0e98b2c23d58ac9$var$DestructuringErrors","shorthandAssign","trailingComma","parenthesizedAssign","parenthesizedBind","doubleProto","checkPatternErrors","refDestructuringErrors","raiseRecoverable","parens","checkExpressionErrors","andThrow","checkYieldAwaitInDefaultParams","isSimpleAssignTarget","$f0e98b2c23d58ac9$var$pp$8","adaptDirectivePrologue","$f0e98b2c23d58ac9$var$loopLabel","$f0e98b2c23d58ac9$var$switchLabel","isLet","skip","nextCh","ident","isAsyncFunction","after","topLevel","parseBreakContinueStatement","parseDebuggerStatement","parseDoStatement","parseForStatement","parseFunctionStatement","parseClass","parseIfStatement","parseReturnStatement","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVarStatement","parseWhileStatement","parseWithStatement","parseEmptyStatement","parseExpressionStatement","parseImport","parseExport","parseLabeledStatement","awaitAt","init$1","await","startsWithLet","isForOf","toAssignable","checkLValPattern","isAsync","declarationPosition","$f0e98b2c23d58ac9$var$FUNC_STATEMENT","$f0e98b2c23d58ac9$var$FUNC_HANGING_STATEMENT","exitScope","$f0e98b2c23d58ac9$var$empty$1","parseCatchClauseParam","parseBindingAtom","simple","allowMissingInitializer","i$1","label$1","statementStart","createNewLexicalScope","exitStrict","isForIn","isFor","parseVarId","$f0e98b2c23d58ac9$var$checkKeyName","statement","allowExpressionBody","forInit","initFunction","checkLValSimple","oldYieldPos","oldAwaitPos","oldAwaitIdentPos","parseFunctionParams","parseFunctionBody","parseBindingList","parseClassId","parseClassSuper","privateNameMap","enterClassBody","classBody","hadConstructor","parseClassElement","superClass","$f0e98b2c23d58ac9$var$isPrivateNameConflicted","curr","static","exitClassBody","constructorAllowsSuper","keyName","isGenerator","isStatic","parseClassStaticBlock","isClassElementNameStart","lastValue","startNodeAt","parseClassElementName","isConstructor","parseClassMethod","parseClassField","parsePrivateIdent","allowsDirectSuper","parseMethod","$f0e98b2c23d58ac9$var$SCOPE_CLASS_STATIC_BLOCK","parseExprSubscripts","declared","used","parseExportAllDeclaration","exported","parseModuleExportName","checkExport","parseExportDefaultDeclaration","shouldParseExportStatement","parseExportDeclaration","checkVariableExport","parseExportSpecifiers","spec","checkUnreserved","local","checkLocalExport","fNode","cNode","checkPatternExport","pat","list$1","elt","decls","parseExportSpecifier","parseImportSpecifiers","parseImportSpecifier","imported","parseImportDefaultSpecifier","parseImportNamespaceSpecifier","stringLiteral","parseLiteral","statements","isDirectiveCandidate","directive","$f0e98b2c23d58ac9$var$pp$7","isBinding","toAssignableList","exprList","parseSpread","parseRestBinding","allowModifiers","rest","parseBindingListItem","parseAssignableListItem","elem","parseMaybeDefault","bindingType","checkClashes","isBind","declareName","checkLValInnerPattern","isExpr","preserveSpace","override","b_stat","b_expr","b_tmpl","p_stat","p_expr","q_tmpl","tryReadTemplateToken","f_stat","f_expr","f_expr_gen","f_gen","$f0e98b2c23d58ac9$var$pp$6","curContext","braceIsBlock","prevType","inGeneratorContext","overrideContext","tokenCtx","statementParens","allowed","$f0e98b2c23d58ac9$var$pp$5","checkPropClash","propHash","shorthand","afterLeftParse","parseYield","ownDestructuringErrors","oldParenAssign","oldTrailingComma","oldDoubleProto","parseExprOps","leftStartPos","leftStartLoc","logical","buildBinary","sawUnary","parseAwait","$f0e98b2c23d58ac9$var$isPrivateFieldAccess","node$1","maybeAsyncArrow","optionalChained","parseSubscript","optional","chainNode","shouldParseAsyncArrow","parseSubscriptAsyncArrow","parseArrowExpression","optionalSupported","node$2","quasi","parseTemplate","isTagged","forNew","canBeArrow","regex","pattern","parseParenAndDistinguishExpression","parseNew","parseExprImport","parseExprAtomDefault","parseImportMeta","parseDynamicImport","errorPos","bigint","shouldParseArrow","spreadStart","innerStartPos","innerStartLoc","lastIsComma","parseParenItem","innerEndPos","innerEndLoc","parseParenArrowList","finishNodeAt","par","$f0e98b2c23d58ac9$var$empty","parseTemplateElement","cooked","tail","curElt","quasis","isAsyncProp","isPattern","parseProperty","parsePropertyValue","parseGetterSetter","paramCount","copyNode","isArrowFunction","isMethod","isExpression","useStrict","checkParams","nonSimple","isSimpleParamList","allowDuplicates","nameHash","re","parseIdentNode","delegate","$f0e98b2c23d58ac9$var$pp$4","$f0e98b2c23d58ac9$var$pp$3","$f0e98b2c23d58ac9$var$Scope","var","lexical","redeclared","scope$1","scope$2","scope$3","$f0e98b2c23d58ac9$var$SCOPE_TOP","$f0e98b2c23d58ac9$var$pp$2","$f0e98b2c23d58ac9$var$finishNodeAt","newNode","$f0e98b2c23d58ac9$var$ecma9BinaryProperties","$f0e98b2c23d58ac9$var$ecma10BinaryProperties","$f0e98b2c23d58ac9$var$ecma12BinaryProperties","$f0e98b2c23d58ac9$var$ecma11BinaryProperties","$f0e98b2c23d58ac9$var$unicodeBinaryProperties","$f0e98b2c23d58ac9$var$unicodeBinaryPropertiesOfStrings","$f0e98b2c23d58ac9$var$unicodeGeneralCategoryValues","$f0e98b2c23d58ac9$var$ecma9ScriptValues","$f0e98b2c23d58ac9$var$ecma10ScriptValues","$f0e98b2c23d58ac9$var$ecma11ScriptValues","$f0e98b2c23d58ac9$var$ecma12ScriptValues","$f0e98b2c23d58ac9$var$ecma13ScriptValues","$f0e98b2c23d58ac9$var$unicodeScriptValues","$f0e98b2c23d58ac9$var$data","$f0e98b2c23d58ac9$var$i","$f0e98b2c23d58ac9$var$list","$f0e98b2c23d58ac9$var$buildUnicodeData","binary","binaryOfStrings","nonBinary","General_Category","Script","Script_Extensions","gc","sc","scx","$f0e98b2c23d58ac9$var$pp$1","$f0e98b2c23d58ac9$var$RegExpValidationState","validFlags","unicodeProperties","switchU","switchV","switchN","lastIntValue","lastStringValue","lastAssertionIsQuantifiable","numCapturingParens","maxBackReference","groupNames","backReferenceNames","$f0e98b2c23d58ac9$var$isSyntaxCharacter","$f0e98b2c23d58ac9$var$isControlLetter","$f0e98b2c23d58ac9$var$isUnicodePropertyNameCharacter","$f0e98b2c23d58ac9$var$isDecimalDigit","$f0e98b2c23d58ac9$var$isHexDigit","$f0e98b2c23d58ac9$var$hexToInt","$f0e98b2c23d58ac9$var$isOctalDigit","unicodeSets","unicode","at","forceU","nextIndex","lookahead","advance","eatChars","chs","validateRegExpFlags","validateRegExpPattern","regexp_pattern","regexp_disjunction","regexp_alternative","regexp_eatQuantifier","regexp_eatTerm","regexp_eatAssertion","regexp_eatAtom","regexp_eatExtendedAtom","lookbehind","noError","regexp_eatQuantifierPrefix","regexp_eatBracedQuantifier","regexp_eatDecimalDigits","regexp_eatPatternCharacters","regexp_eatReverseSolidusAtomEscape","regexp_eatCharacterClass","regexp_eatUncapturingGroup","regexp_eatCapturingGroup","regexp_eatAtomEscape","regexp_groupSpecifier","regexp_eatInvalidBracedQuantifier","regexp_eatExtendedPatternCharacter","regexp_eatSyntaxCharacter","regexp_eatGroupName","regexp_eatRegExpIdentifierName","regexp_eatRegExpIdentifierStart","regexp_eatRegExpIdentifierPart","regexp_eatRegExpUnicodeEscapeSequence","regexp_eatBackReference","regexp_eatCharacterClassEscape","regexp_eatCharacterEscape","regexp_eatKGroupName","regexp_eatDecimalEscape","regexp_eatControlEscape","regexp_eatCControlLetter","regexp_eatZero","regexp_eatHexEscapeSequence","regexp_eatLegacyOctalEscapeSequence","regexp_eatIdentityEscape","regexp_eatControlLetter","regexp_eatFixedHexDigits","lead","leadSurrogateEnd","trail","regexp_eatHexDigits","regexp_eatUnicodePropertyValueExpression","regexp_eatUnicodePropertyName","regexp_eatUnicodePropertyValue","regexp_validateUnicodePropertyNameAndValue","regexp_eatLoneUnicodePropertyNameOrValue","nameOrValue","regexp_validateUnicodePropertyNameOrValue","regexp_classContents","regexp_classSetExpression","regexp_nonEmptyClassRanges","regexp_eatClassAtom","regexp_eatClassEscape","ch$1","regexp_eatClassControlLetter","subResult","regexp_eatClassSetRange","regexp_eatClassSetOperand","regexp_eatClassSetCharacter","regexp_eatClassStringDisjunction","regexp_eatNestedClass","result$1","regexp_classStringDisjunctionContents","regexp_classString","regexp_eatClassSetReservedPunctuator","regexp_eatOctalDigit","n1","n2","$f0e98b2c23d58ac9$var$pp","$f0e98b2c23d58ac9$var$stringToBigInt","BigInt","ignoreEscapeSequenceInKeyword","iterator","this$1$1","done","fullCharCodeAtPos","startSkip","readToken_dot","next2","readToken_slash","readToken_mult_modulo_exp","tokentype","readToken_pipe_amp","readToken_caret","readToken_plus_min","readToken_lt_gt","readToken_eq_excl","readToken_question","next2$1","readToken_numberSign","readRadixNumber","flagsStart","maybeLegacyOctalNumericLiteral","allowSeparators","isLegacyOctalNumericLiteral","lastCode","val$1","readCodePoint","codePos","invalidStringToken","chunkStart","readEscapedChar","$f0e98b2c23d58ac9$var$INVALID_TEMPLATE_ESCAPE_ERROR","inTemplateElement","readTmplToken","readInvalidTemplateToken","inTemplate","octalStr","escStart","Parser","Position","SourceLocation","Node","TokenType","TokContext","tokContexts","Token","isNewLine","lineBreakG","$83a7a00c3abde207$export$2e2bcd8739ae039","layout","tiles","$83a7a00c3abde207$var$layout","solution","$5f77a1132959636d$var$container","$5f77a1132959636d$var$dialog","$5f77a1132959636d$var$help","showModal","scrollIntoView","$2bfca13ad910c056$export$2e2bcd8739ae039","selfOptions","pipes","pipe","pipeArg","processor","lastPipe","nextPipe","nextAfterChildren","hasResult","$4b3a4f9971dfd11f$export$2e2bcd8739ae039","filters","debug","filterName","exiting","resultCheck","msg","shouldHaveResult","should","noResult","$e9b2e8bb279f614c$export$2e2bcd8739ae039","setResult","exit","childName","root","$3383b9bfdfb3a92e$export$2e2bcd8739ae039","$3383b9bfdfb3a92e$var$cloneRegExp","regexMatch","cloned","$ea655194af34c016$export$2e2bcd8739ae039","cloneDiffValues","$fcf8dd03cdbf4430$export$2e2bcd8739ae039","$82864bc3974cd149$export$2e2bcd8739ae039","$cb6bc7c1a2416044$export$32e2de1ca8818233","leftType","rightType","leftIsArray","rightIsArray","$cb6bc7c1a2416044$export$b17cd1eea2ef8348","nested","nonNestedDelta","regexArgs","$cb6bc7c1a2416044$export$9d101d90be8482a0","$fad0d73b9c59b660$export$3b212405c262fd6e","_t","$fad0d73b9c59b660$export$81d88d7d212bb18e","propertyFilter","$fad0d73b9c59b660$export$b17cd1eea2ef8348","nestedDelta","objectDelta","$fad0d73b9c59b660$export$575f4633982343e8","deltaWithChildren","$fad0d73b9c59b660$export$9d101d90be8482a0","$fad0d73b9c59b660$export$84a677efe7258d3b","$f03df935593440df$var$defaultMatch","array1","array2","$f03df935593440df$var$lengthMatrix","len1","len2","$f03df935593440df$var$backtrack","subsequence","sequence","indices1","indices2","valueAtMatrixAbove","$f03df935593440df$export$2e2bcd8739ae039","innerContext","$a19812cbdcd458da$var$matchItems","objectHash","matchByPosition","hashCache1","hash1","hashCache2","hash2","$a19812cbdcd458da$export$32e2de1ca8818233","matchContext","commonHead","commonTail","$a19812cbdcd458da$var$arraysHaveMatchByRef","trimmed1","trimmed2","seq","removedItems","detectMove","arrays","includeValueOnMove","removedItemsLength","indexOnArray2","isMove","removeItemIndex1","$a19812cbdcd458da$var$compare","numerically","numericallyBy","$a19812cbdcd458da$export$b17cd1eea2ef8348","toRemove","toInsert","toModify","removedOrMovedIndex","numberIndex","indexDiff","removedValue","toInsertLength","toModifyLength","modification","$a19812cbdcd458da$export$575f4633982343e8","$a19812cbdcd458da$export$9d101d90be8482a0","newName","arrayMoveDelta","arrayDelta","$a19812cbdcd458da$var$reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","$a19812cbdcd458da$export$84a677efe7258d3b","$db273bf4a2715f93$export$32e2de1ca8818233","$53af34752a83816e$var$cachedDiffPatch","$53af34752a83816e$var$getDiffMatchPatch","required","textDiff","diffMatchPatch","diff_match_patch_not_found","txt1","txt2","patch_toText","patch_make","patch","patch_apply","patch_fromText","textPatchFailed","$53af34752a83816e$export$32e2de1ca8818233","minLength","$53af34752a83816e$export$b17cd1eea2ef8348","textDiffDelta","$53af34752a83816e$var$textDeltaReverse","lineTmp","header","headerRegex","$53af34752a83816e$export$9d101d90be8482a0","$356a848867d17460$export$2e2bcd8739ae039","unpatch","$b8ea597934691048$var$zero$1","buf","$b8ea597934691048$var$extra_lbits","Uint8Array","$b8ea597934691048$var$extra_dbits","$b8ea597934691048$var$extra_blbits","$b8ea597934691048$var$bl_order","$b8ea597934691048$var$static_ltree","$b8ea597934691048$var$static_dtree","$b8ea597934691048$var$D_CODES$1","$b8ea597934691048$var$_dist_code","$b8ea597934691048$var$_length_code","$b8ea597934691048$var$MAX_MATCH$1","$b8ea597934691048$var$base_length","$b8ea597934691048$var$base_dist","$b8ea597934691048$var$StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","$b8ea597934691048$var$TreeDesc","dyn_tree","stat_desc","max_code","$b8ea597934691048$var$d_code","$b8ea597934691048$var$put_short","pending_buf","pending","$b8ea597934691048$var$send_bits","bi_valid","$b8ea597934691048$var$Buf_size","bi_buf","$b8ea597934691048$var$send_code","tree","$b8ea597934691048$var$bi_reverse","$b8ea597934691048$var$bi_flush","$b8ea597934691048$var$gen_bitlen","bits","xbits","stree","extra","bl_count","heap","heap_max","opt_len","static_len","$b8ea597934691048$var$gen_codes","next_code","$b8ea597934691048$var$MAX_BITS$1","$b8ea597934691048$var$tr_static_init","$b8ea597934691048$var$LENGTH_CODES$1","$b8ea597934691048$var$L_CODES$1","$b8ea597934691048$var$LITERALS$1","$b8ea597934691048$var$init_block","dyn_ltree","dyn_dtree","bl_tree","$b8ea597934691048$var$END_BLOCK","sym_next","$b8ea597934691048$var$bi_windup","$b8ea597934691048$var$smaller","depth","_n2","_m2","$b8ea597934691048$var$pqdownheap","heap_len","$b8ea597934691048$var$compress_block","ltree","dtree","lc","sym_buf","$b8ea597934691048$var$build_tree","$b8ea597934691048$var$scan_tree","curlen","prevlen","nextlen","max_count","min_count","$b8ea597934691048$var$REP_3_6","$b8ea597934691048$var$REPZ_3_10","$b8ea597934691048$var$REPZ_11_138","$b8ea597934691048$var$send_tree","$b8ea597934691048$var$build_bl_tree","max_blindex","l_desc","d_desc","bl_desc","$b8ea597934691048$var$BL_CODES$1","$b8ea597934691048$var$send_all_trees","lcodes","dcodes","blcodes","rank","$b8ea597934691048$var$detect_data_type","block_mask","$b8ea597934691048$var$static_init_done","$b8ea597934691048$var$_tr_stored_block$1","stored_len","$b8ea597934691048$var$STORED_BLOCK","subarray","$b8ea597934691048$var$trees","_tr_init","_tr_stored_block","_tr_flush_block","opt_lenb","static_lenb","level","strm","data_type","strategy","$b8ea597934691048$var$STATIC_TREES","$b8ea597934691048$var$DYN_TREES","_tr_tally","sym_end","_tr_align","$b8ea597934691048$var$adler32_1","adler","$b8ea597934691048$var$crcTable","Uint32Array","$b8ea597934691048$var$makeTable","table","$b8ea597934691048$var$crc32_1","crc","$b8ea597934691048$var$messages","$b8ea597934691048$var$constants$2","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","$b8ea597934691048$var$_tr_init","$b8ea597934691048$var$_tr_stored_block","$b8ea597934691048$var$_tr_flush_block","$b8ea597934691048$var$_tr_tally","$b8ea597934691048$var$_tr_align","$b8ea597934691048$var$Z_NO_FLUSH$2","$b8ea597934691048$var$Z_PARTIAL_FLUSH","$b8ea597934691048$var$Z_FULL_FLUSH$1","$b8ea597934691048$var$Z_FINISH$3","$b8ea597934691048$var$Z_BLOCK$1","$b8ea597934691048$var$Z_OK$3","$b8ea597934691048$var$Z_STREAM_END$3","$b8ea597934691048$var$Z_STREAM_ERROR$2","$b8ea597934691048$var$Z_DATA_ERROR$2","$b8ea597934691048$var$Z_BUF_ERROR$1","$b8ea597934691048$var$Z_DEFAULT_COMPRESSION$1","$b8ea597934691048$var$Z_FILTERED","$b8ea597934691048$var$Z_HUFFMAN_ONLY","$b8ea597934691048$var$Z_RLE","$b8ea597934691048$var$Z_FIXED","$b8ea597934691048$var$Z_DEFAULT_STRATEGY$1","$b8ea597934691048$var$Z_UNKNOWN","$b8ea597934691048$var$Z_DEFLATED$2","$b8ea597934691048$var$err","errorCode","$b8ea597934691048$var$rank","$b8ea597934691048$var$zero","$b8ea597934691048$var$slide_hash","wsize","w_size","hash_size","$b8ea597934691048$var$HASH","hash_shift","hash_mask","$b8ea597934691048$var$flush_pending","avail_out","output","pending_out","next_out","total_out","$b8ea597934691048$var$flush_block_only","block_start","strstart","$b8ea597934691048$var$put_byte","$b8ea597934691048$var$putShortMSB","$b8ea597934691048$var$read_buf","avail_in","next_in","wrap","total_in","$b8ea597934691048$var$longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","$b8ea597934691048$var$MAX_MATCH","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","match_start","$b8ea597934691048$var$fill_window","more","_w_size","window_size","ins_h","$b8ea597934691048$var$deflate_stored","flush","min_block","pending_buf_size","have","high_water","$b8ea597934691048$var$deflate_fast","hash_head","bflush","match_length","max_lazy_match","$b8ea597934691048$var$MIN_MATCH","$b8ea597934691048$var$deflate_slow","max_insert","prev_match","match_available","$b8ea597934691048$var$deflate_rle","$b8ea597934691048$var$deflate_huff","$b8ea597934691048$var$Config","good_length","max_lazy","nice_length","max_chain","$b8ea597934691048$var$configuration_table","$b8ea597934691048$var$lm_init","$b8ea597934691048$var$DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","Uint16Array","$b8ea597934691048$var$HEAP_SIZE","$b8ea597934691048$var$MAX_BITS","lit_bufsize","$b8ea597934691048$var$deflateStateCheck","$b8ea597934691048$var$deflateResetKeep","$b8ea597934691048$var$deflateReset","ret","$b8ea597934691048$var$deflateInit2","windowBits","memLevel","$b8ea597934691048$var$deflate_1$2","deflateInit","deflateInit2","deflateReset","deflateResetKeep","deflateSetHeader","deflate","old_flush","level_flags","hcrc","beg","gzhead_extra","bstate","deflateEnd","deflateSetDictionary","dictLength","tmpDict","avail","deflateInfo","$b8ea597934691048$var$_has","$b8ea597934691048$var$common","TypeError","flattenChunks","chunks","chunk","$b8ea597934691048$var$STR_APPLY_UIA_OK","__","$b8ea597934691048$var$_utf8len","$b8ea597934691048$var$buf2binstring","$b8ea597934691048$var$strings","string2buf","TextEncoder","encode","m_pos","str_len","buf_len","buf2string","TextDecoder","decode","utf16buf","c_len","utf8border","$b8ea597934691048$var$zstream","$b8ea597934691048$var$toString$1","$b8ea597934691048$var$Z_NO_FLUSH$1","$b8ea597934691048$var$Z_SYNC_FLUSH","$b8ea597934691048$var$Z_FULL_FLUSH","$b8ea597934691048$var$Z_FINISH$2","$b8ea597934691048$var$Z_OK$2","$b8ea597934691048$var$Z_STREAM_END$2","$b8ea597934691048$var$Z_DEFAULT_COMPRESSION","$b8ea597934691048$var$Z_DEFAULT_STRATEGY","$b8ea597934691048$var$Z_DEFLATED$1","$b8ea597934691048$var$Deflate$1","chunkSize","gzip","ended","dict","_dict_set","$b8ea597934691048$var$deflate$1","deflator","flush_mode","_flush_mode","onData","onEnd","$b8ea597934691048$var$inffast","_out","dmax","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","from_source","lencode","distcode","lenbits","distbits","sane","$b8ea597934691048$var$lbase","$b8ea597934691048$var$lext","$b8ea597934691048$var$dbase","$b8ea597934691048$var$dext","$b8ea597934691048$var$inftrees","lens","lens_index","codes","table_index","work","incr","low","mask","here_bits","here_op","here_val","sym","drop","huff","$b8ea597934691048$var$MAXBITS","offs","$b8ea597934691048$var$Z_FINISH$1","$b8ea597934691048$var$Z_BLOCK","$b8ea597934691048$var$Z_TREES","$b8ea597934691048$var$Z_OK$1","$b8ea597934691048$var$Z_STREAM_END$1","$b8ea597934691048$var$Z_NEED_DICT$1","$b8ea597934691048$var$Z_STREAM_ERROR$1","$b8ea597934691048$var$Z_DATA_ERROR$1","$b8ea597934691048$var$Z_MEM_ERROR$1","$b8ea597934691048$var$Z_BUF_ERROR","$b8ea597934691048$var$Z_DEFLATED","$b8ea597934691048$var$zswap32","$b8ea597934691048$var$InflateState","havedict","wbits","ncode","nlen","ndist","lendyn","distdyn","back","was","$b8ea597934691048$var$inflateStateCheck","$b8ea597934691048$var$inflateResetKeep","Int32Array","$b8ea597934691048$var$inflateReset","$b8ea597934691048$var$inflateReset2","$b8ea597934691048$var$inflateInit2","$b8ea597934691048$var$virgin","$b8ea597934691048$var$fixedtables","$b8ea597934691048$var$updatewindow","$b8ea597934691048$var$inflate_1$2","inflateReset","inflateReset2","inflateResetKeep","inflateInit","inflateInit2","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateEnd","inflateGetHeader","inflateSetDictionary","dictid","inflateInfo","$b8ea597934691048$var$gzheader","$b8ea597934691048$var$toString","$b8ea597934691048$var$Z_NO_FLUSH","$b8ea597934691048$var$Z_FINISH","$b8ea597934691048$var$Z_OK","$b8ea597934691048$var$Z_STREAM_END","$b8ea597934691048$var$Z_NEED_DICT","$b8ea597934691048$var$Z_STREAM_ERROR","$b8ea597934691048$var$Z_DATA_ERROR","$b8ea597934691048$var$Z_MEM_ERROR","$b8ea597934691048$var$Inflate$1","$b8ea597934691048$var$inflate$1","inflator","last_avail_out","next_out_utf8","utf8str","Deflate","$b8ea597934691048$var$Deflate","$b8ea597934691048$var$deflate","deflateRaw","$b8ea597934691048$var$deflateRaw","$b8ea597934691048$var$gzip","constants","Inflate","$b8ea597934691048$var$Inflate","$b8ea597934691048$var$inflate","inflateRaw","$b8ea597934691048$var$inflateRaw","ungzip","$b8ea597934691048$var$ungzip","$b8ea597934691048$export$2e2bcd8739ae039","$c7b2729851fa20d7$exports","factory","limit$2","classToType","type$p","PI$2","utils","clip_rgb","_clipped","_unclipped","limit$1","unpack","keyOrder","type$o","type$n","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","input$h","format","autodetect","last$3","clip_rgb$2","type$m","Color$D","_input","chk","me","_rgb","chroma$k","unpack$A","max$2","unpack$z","unpack$y","type$l","rgb2cmyk","Color$C","cmyk","chroma$j","input$g","unpack$x","last$2","rnd","unpack$w","rgb2hsl_1","Number","unpack$v","last$1","hsl2css","hsla","round$6","unpack$u","round$5","hsl2rgb_1","h_","RE_RGB","RE_RGBA","RE_RGB_PCT","RE_RGBA_PCT","RE_HSL","RE_HSLA","round$4","css2rgb$1","css","input$f","named","rgb$1","rgb$2","i$2","rgb$3","i$3","rgb$4","hsl2rgb","hsl$1","rgb$5","type$k","rgb2css","rgba","rgb2hsl$2","Color$B","chroma$i","input$e","css2rgb","unpack$t","input$d","gl","chroma$h","Color$A","unpack$s","unpack$r","floor$3","unpack$q","type$j","rgb2hcg","Color$z","hcg","chroma$g","input$c","assign$1","assign$2","assign$3","assign$4","assign$5","_g","unpack$p","round$3","rgb2hex_1","hxa","RE_HEX","RE_HEXA","hex2rgb_1","u$1","type$i","Color$y","rgb2hex$1","chroma$f","input$b","unpack$o","TWOPI$2","min$2","sqrt$4","unpack$n","TWOPI$1","cos$4","unpack$m","type$h","rgb2hsi","min_","Color$x","hsi","chroma$e","input$a","unpack$l","type$g","Color$w","rgb2hsl$1","chroma$d","input$9","unpack$k","min$1","max$1","unpack$j","floor$2","unpack$i","type$f","rgb2hsv","max_","Color$v","hsv","chroma$c","input$8","labConstants","Kn","Xn","Yn","Zn","unpack$h","pow$a","rgb_xyz","xyz_lab","LAB_CONSTANTS$3","rgb2lab_1","ref$1","unpack$g","pow$9","xyz_rgb","lab_xyz","LAB_CONSTANTS$2","lab2rgb_1","unpack$f","type$e","Color$u","rgb2lab$1","chroma$b","input$7","unpack$e","sqrt$3","atan2$2","round$2","lab2lch_1","unpack$d","unpack$c","sin$3","cos$3","lch2lab_1","unpack$b","lch2rgb_1","lch2lab$1","lab2rgb","unpack$a","unpack$9","type$d","rgb2lch","rgb2lab","lab2lch$1","Color$t","lch","hcl","chroma$a","input$6","lch2rgb","w3cx11_1","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflower","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","laserlemon","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrod","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","maroon2","maroon3","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","purple2","purple3","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","type$c","Color$s","rgb2hex","w3cx11","input$5","hex2rgb","unpack$8","type$b","type$a","rgb2num","Color$r","chroma$9","input$4","unpack$7","type$9","round$1","Color$q","chroma$8","input$3","log$1","temperature2rgb_1","kelvin","unpack$6","rgb2temperature","minTemp","maxTemp","temperature2rgb","Color$p","temperature","chroma$7","input$2","unpack$5","cbrt","pow$8","sign$1","rgb2oklab_1","rgb2lrgb","lr","lg","lb","unpack$4","pow$7","oklab2rgb_1","L","lrgb2rgb","unpack$3","type$8","Color$o","oklab","rgb2oklab$1","chroma$6","input$1","unpack$2","unpack$1","type$7","rgb2oklch","rgb2oklab","lab2lch","Color$n","oklch","chroma$5","lch2lab","oklab2rgb","type$6","Color$m","mutate","Color$l","Color$k","LAB_CONSTANTS$1","brighten","darker","brighter","Color$j","mc","channel","type$5","pow$6","Color$i","luminance","lum","cur_lum","max_iter","high","lm","rgb2luminance","luminance_x","interpolator$1","type$4","mix$1","col1","col2","interpolator","Color$g","mix","Color$f","premultiply","Color$e","saturate","LAB_CONSTANTS","desaturate","type$3","Color$d","xyz0","xyz1","sqrt$2","pow$5","lrgb","z1","z2","_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","lbv","dh","interpolate_hsx$5","interpolate_hsx$4","interpolate_hsx$3","interpolate_hsx$2","interpolate_hsx$1","interpolate_hsx","clip_rgb$1","pow$4","sqrt$1","PI$1","cos$2","sin$2","atan2$1","_average_lrgb","colors","xyz","type$2","pow$3","scale$2","_mode","_nacol","chroma$4","_spread","_domain","_pos","_padding","_classes","_colors","_min","_max","_correctLightness","_colorCache","_useCache","_gamma","setColors","brewer","c$1","resetCache","getClass","tMapLightness","tMapDomain","bypassMap","classes","analyze","limits","domain","tOut","tBreaks","every","_m","_o","spread","correctLightness","L0","L1","pol","L_actual","L_ideal","L_diff","numColors","dm","dd","__range__","inclusive","ascending","samples","asc","gamma","nodata","binom_row","row","newrow","bezier","I","lab0","lab1","lab2","lab3","labs","RangeError","blend","blend_f","chroma$3","dodge","burn","type$1","pow$2","sin$1","cos$1","floor$1","pow$1","abs$1","MAX_VALUE","min_log","LOG10E","max_log","pb","pr","cluster","assignments","clusterSizes","repeat","nb_iters","centroids","i$4","mindist","best","j$1","newCentroids","j$2","i$5","j$3","j$4","kClusters","j$5","i$6","tmpKMeansBreaks","j$6","i$7","analyze_1","colorbrewer","OrRd","PuBu","BuPu","Oranges","BuGn","YlOrBr","YlGn","Reds","RdPu","Greens","YlGnBu","Purples","GnBu","Greys","YlOrRd","PuRd","Blues","PuBuGn","Viridis","Spectral","RdYlGn","RdBu","PiYG","PRGn","RdYlBu","BrBG","RdGy","PuOr","Set2","Accent","Set1","Set3","Dark2","Paired","Pastel2","Pastel1","chroma","cnt","ci","xyz2","A$1","scale$1","cubehelix","rotations","lightness","dl","fract","amp","cos_a","sin_a","chroma$2","digits","contrast","deltaE","Kl","Kc","Kh","rad2deg","deg2rad","deg","L2","avgL","avgC","C1","G","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","T","deltaHp","deltaCp","sl","sh","deltaTheta","Rt","deltaL","sum_sq","scales","cool","chroma$1","hot","$hFpCu","$c5a0b96abcd6dbcd$var$location","$c5a0b96abcd6dbcd$export$281ad3752a540efe","URLSearchParams","$c5a0b96abcd6dbcd$export$128fa18b7194ef","URL","$c5a0b96abcd6dbcd$export$1bb10639a2cd4297","$c5a0b96abcd6dbcd$export$9cb4719e2e525b7a","$c5a0b96abcd6dbcd$export$afb15ede80c42aab","binString","atob","codePointAt","$c5a0b96abcd6dbcd$export$4e633de97d65d1c8","fromCodePoint","$c5a0b96abcd6dbcd$export$9a00dee1beb8f576","$c5a0b96abcd6dbcd$export$6e5538615c060df7","findLast","xv","yv","$c5a0b96abcd6dbcd$export$e3bf03cc76d2c0a1","detail","dispatchEvent","CustomEvent","$c5a0b96abcd6dbcd$export$c23f9d3341b5fd07","pointA","pointB","maxDiff","$c5a0b96abcd6dbcd$export$3cb91a81090b9eee","span","classList","backgroundColor","title","$c5a0b96abcd6dbcd$export$6d3741128bd5bb7d","some","maxColorIndex","plus","$c5a0b96abcd6dbcd$export$79376507b09a66f","$c5a0b96abcd6dbcd$export$f6292fcace2a1886","$c5a0b96abcd6dbcd$export$78da85ac75754159","$c5a0b96abcd6dbcd$export$bd58da2e19cd17da","direction","$c5a0b96abcd6dbcd$export$c43d7a950587702b","$c5a0b96abcd6dbcd$export$35d6177dfa7903b5","toPaperJs","$c5a0b96abcd6dbcd$export$43941667eccc070","$c5a0b96abcd6dbcd$export$8793edee2d425525","base64decode","base64encode","$77e640c1aaab669f$var$console","$77e640c1aaab669f$var$consoleDebug","$77e640c1aaab669f$export$1c9f709888824e05","has","$1024ef6a63be0e18$export$2e382909194b1aab","toAxialCoordinates","$3f2d62ea7d5da3d6$export$c56d3ccff2456440","isNeighbor","neighbor","directions","toOffsetCoordinates","axial","$92f12ea2067f7a87$export$654f18991713c8c4","setState","getState","structuredClone","updateState","updater","Events","Update","freeze","$7f0d958f0726b89e$export$6d08773d2e66f8f2","uniqueId","sortOrder","configuration","otherItem","getColorElements","getCompoundPath","collidable","onTap","onCollision","collisionStep","onDeselected","onInitialization","onSelected","Types","fromEntries","$7cd91973a7925acd$export$b20b719ec758a20f","$40d8a77a984c51a9$export$94affb487e701bf2","hasKeys","includes","unset","$b8e3951689bc8f9e$export$b0d759d807f751d4","CacheKeys","eventListener","onPointerUp","onPointerDown","onPointerMove","onMouseWheel","offsetX","offsetY","deltaY","onPan","pan","getGesture","GestureKeys","Pan","setGesture","onPinch","pointer0","pointer1","point0","pinch","Pinch","Down","pointerId","Move","Gesture","Tap","maxZoom","minZoom","touchPoint","touchOffset","zoomOffset","vibratePattern","$1f24870028eeabcc$var$modifiersImmutable","$1f24870028eeabcc$var$modifiersMutable","$1f24870028eeabcc$var$navigator","$1f24870028eeabcc$var$uniqueId","$1f24870028eeabcc$export$5acd5e6efc9671b7","selectionTime","timeoutId","immutable","tile","li","deselect","modifier","addModifier","moveFilter","afterModify","Deselected","button","onToggle","lock","clearTimeout","vibrate","$15dbe6491c90ff2e$export$a9753b1ffc289935","Mask","onMask","beforeModify","maskOnTap","tileFilter","removeModifier","toggle","puzzle","fromTile","updateSelectedTile","unmask","Moved","selectedModifier","querySelector","Invoked","$f00c5e8e3b24f55c$export$e49a5ad3dd6df925","movable","onUnmask","moveItems","moved","beam","toTile","$f00c5e8e3b24f55c$export$1288a4f7eae890b0","SuperClass","removeItem","addItem","onMove","$268becbe2ffcc8a3$export$fd55ce593607084a","connected","onAdd","onRemove","pathIndex","segmentIndex","$268becbe2ffcc8a3$export$81262d6ca0162a3","Class","find","Reflect","construct","Collision","collision","Filter","MergeInto","mergeInto","MergeWith","mergeWith","Portal","portal","entryPortal","exitPortal","Reflector","reflector","TerminusConnection","terminusConnection","terminus","opening","$903d7b3eecd4d3a8$export$ec91da630f36d5ea","parameters","circumradius","currentStep","nextStep","$f48c890393349af7$export$152db69a76b6b79e","Names","rotatable","$f48c890393349af7$export$781de49a9284d537","rotationDegrees","getMaxRotation","getDirection","rotateGroup","$d430de8cd820c3cd$export$602eac185826482c","ring","pointer","portalState","stepIndex","entryDirection","existing","stateId","destinationId","moves","destinations","getExitDirection","getStep","destinationTiles","addStep","destinationTile","$6756284c9622095f$export$bea8ebba691c5813","toggled","toggleable","$6756284c9622095f$export$cdb1ce8c4b8a5afe","$ff7d3b28e31d2a30$export$88c9f72b40fcdd85","itemIds","withSelf","mirror","$ff7d3b28e31d2a30$export$20aab196240bbdf2","beams","getColors","$eb2b229f23b512af$export$693b33588b3dd9d8","steps","lastStepIndex","getLastStepIndex","currentPath","previousStep","getItemIndex","getCollision","getOpening","getSteps","getMergeWith","openings","isComplete","isOn","isConnected","isPending","onBeamUpdated","beamLastStep","lastStep","isSelf","findLastIndex","stepPoint","nextStepPoint","isSameSide","isSameDirection","getBeamsUpdateDelay","updateHistory","onModifierInvoked","findIndex","startDirection","currentStepIndex","inradius","getTile","updateStep","nextStepIndex","existingNextStep","lastPathIndex","lastSegmentIndex","getCollisions","collisionIndex","timeout","updatedStep","getUpdatedStep","firstPoint","curveLocation","Set","intersection","drawDebugPoint","spliceIndex","deletedSteps","Connection","Merge","$d8b66316ed43c40f$export$3ad31a823e05e6fb","ui","flatMap","Opening","directionFrom","onConnection","onDisconnection","connect","disconnect","Disconnection","openingOffOpacity","$b41b1d7e9f79d24a$export$edf083caefbff926","midLine","directionTo","beamDirection","reflectorDirection","beamAngle","$c5a0b96abcd6dbcd$export$1a23559e655dacdd","original","reflectorAngle","$3d5ce7d56315a48f$export$cb4338d67ffa8a1d","walls","firstSegment","hexagon","nextDirection","lastSegment","$d12f93ae41726cf2$export$4b0ab9e4fad38dea","$54e671c4824aed95$export$5b9db7ce80343746","$7993f13e9449b6b9$export$bdb5f0a1b77546f4","toItems","fromItems","$e980209ca439f282$export$235cb65c20ad2b7","indicator","wall","swap","selectedTile","deselectedTile","teardown","startingOffsetX","startingOffsetY","dashWidth","Styles","edit","Selected","$99408c3658777a44$export$c84671f46d6a1ca","tilesByAxial","tilesByOffset","layers","tileSize","oddR","widestRow","isOffsetRow","rowByAxial","rowByOffset","rowOffset","getTileByAxial","getTileByOffset","getNeighboringTile","evenR","$01f46eb6f3519d51$export$991dcf7284de63d","$d156ca7729efc9b3$export$88c9f72b40fcdd85","$b090bea9f5eab78e$var$puzzles","test_infinite_loop","test_layout","test_portal","test_reflector","$b090bea9f5eab78e$var$traverse","$b090bea9f5eab78e$var$PuzzleGroup","firstId","lastId","nextId","previousId","$b090bea9f5eab78e$export$f68871ba002ca835","startsWith","titles","$4c3397e7d04ad378$var$history","history","$4c3397e7d04ad378$var$localStorage","localStorage","$4c3397e7d04ad378$export$7254cc27399e90bd","deltasIndex","updateCache","canRedo","canUndo","getCurrent","getTitle","getSelectedTile","redo","clearCache","setSelectedTile","undo","previousIndex","newState","pushState","fromEncoded","fromId","ParamKeys","pathSegments","localState","cachedVersion","originalVersion","$784ae6de7637c8a9$export$a337a674d761bdc2","conditions","condition","conditionFactory","replaceChildren","isSolved","isMet","$784ae6de7637c8a9$var$SolutionCondition","connections","$784ae6de7637c8a9$var$Connections","$784ae6de7637c8a9$var$Moves","completed","eventListeners","connectionId","connectionIndex","connection","Operators","equalTo","Updated","greaterThan","lessThan","$15dbe6491c90ff2e$var$elements","main","puzzleId","solved","beamsUpdateDelay","interact","isUpdatingBeams","maskQueue","termini","onBeamUpdate","onSelect","onKeyup","delay","onStateUpdate","updateDropdown","select","centerOnTile","clearDebugPoints","reload","updateMessage","updateBeams","previouslySelectedTile","updateActions","addLayers","collisionId","addBeam","otherBeam","cause","onSolved","solvedMask","Solved","removeLayers","viewSize","Loaded","selectedTileId","className","disable","innerText","colorElements","rounded","connectedBeams","$796068c1abf8becc$var$script","$796068c1abf8becc$var$dataLayer","dataLayer","$796068c1abf8becc$var$gtag","$43a0370408551d62$var$doorbellOptions","doorbellOptions","appKey","hideButton","$43a0370408551d62$var$script","$b7ac0cf7b7632c81$var$puzzle","$b7ac0cf7b7632c81$var$beaming","beaming"],"version":3,"file":"index.dacb650f.js.map"} \ No newline at end of file diff --git a/index.html b/index.html index af8dabe..6dc0759 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -Beaming

Beaming

Beaming is a free, open source, browser-based puzzle game that involves directing beams through a hexagonal grid. The rules and solution for each puzzle can be inferred by interaction and visual cues. Both desktop and mobile devices are supported.

Give Support
The Basics

The core gameplay involves selecting a hexagonal tile, which will bring up a toolbar at the bottom of the screen that contains actions that can be used to manipulate the items in the puzzle. The solution for each puzzle varies. The requirements for solving a puzzle will be displayed in the upper right corner of the screen.

When looking at the toolbar, you will notice there are two sets of icons on the left and right sides. From here on I will refer to the set of icons on the left side as attributes and on the right side as actions. Attributes define behaviors which belong to a tile. They cannot be interacted with, they are strictly informational. Actions define behaviors which belong to the items inside a tile. A tile which contains at least one action or attribute will have a small, hexagonal indicator displayed towards the top of the tile.

The actions on the right side of the toolbar can be interacted with in the following ways:

  • By tapping on them. This will execute the action on the items in the currently selected tile.
  • By pressing and holding them. This will select the action, if it is valid to do so, which allows it to be moved to another, valid tile. Different actions will have different requirements about which tiles they can be moved to.
  • By swiping them (pressing and holding while moving the finger outside the action button). This will toggle the action, if it is valid to do so. This is currently only applicable to the Rotate action, in order to change the direction of rotation.

Some actions utilize a mask which covers invalid tiles (they will appear darkened). While a mask is active, the action can be cancelled by clicking or tapping outside the puzzle area or on the currently selected tile.

Attributes

As previously mentioned in The Basics above, attributes are the icons on the left-hand side of the toolbar at the bottom of the screen. Click or tap on an icon below to learn more about it.

block - Immutable

The tile, and the items within the tile, cannot be modified in any way. If there are any actions on the tile, they cannot be interacted with either.

lock - Locked

The actions on the right-hand side of the toolbar can be used, but they cannot be selected, and therefore cannot be moved to other tiles. Locked tiles can still receive actions from other tiles, but they will become locked once moved onto a locked tile.

Actions

As previously mentioned in The Basics above, actions are the icons on the right-hand side of the toolbar at the bottom of the screen. Click or tap on an icon below to learn more about it.

toggle_on - Toggle

Any valid (toggleable) items in the tile will have their state toggled. For example, toggling a terminus item will turn beams on and off.

rotate_left - Rotate

Any valid (rotatable) items in the tile will be rotated in the direction indicated by the icon (either clockwise or counter-clockwise).

drag_pan - Move

Any valid (movable) items in the tile will be moved from the currently selected tile to a valid tile of your choice. This action utilizes a mask for selecting the valid tile.

swap_horiz - Swap

Any valid (movable) items in the currently selected tile will trade places with any valid (movable) items in a valid tile of your choice. This action utilizes a mask for selecting the valid tile.

Help

Feedback

If you have a suggestion or encounter any problem, please use the form below to report them. Email address is optional, but you can include it if you want to get a response back.

Troubleshooting

You might be wondering what all that stuff in the URL is. Each URL parameter is separated by a forward slash (/). The parameter after the hash (#) symbol is the puzzle ID. The parameter after that is the state of the current puzzle, stored base64 encoded and compressed. Both of these parameters are optional and will be automatically updated when you load and interact with the game. In addition to storing state in the URL, which is useful when sharing the state of a puzzle with others, state is also stored locally in your browser's localStorage cache. If for some reason you need to clear cache for a puzzle, you can insert ?clearCache=[puzzle ID] in the URL right after the opening forward slash. If you want to clear all cache, omit the =[puzzle ID], or execute localStorage.clear() in your browser's console.

Thanks!

This game was primarily inspired by The Talos Principle and The Witness, two highly recommended puzzle games. Additionally, this game would not have been possible without the Paper.js library.

If you're enjoying the game, please consider sharing it with others!

😁

error
Your browser does not support the HTML5 canvas tag.
\ No newline at end of file +Beaming

Beaming

Beaming is a free, open source, browser-based puzzle game that involves directing beams through a hexagonal grid. The rules and solution for each puzzle can be inferred by interaction and visual cues. Both desktop and mobile devices are supported.

Give Support
The Basics

The core gameplay involves selecting a hexagonal tile, which will bring up a toolbar at the bottom of the screen that contains actions that can be used to manipulate the items in the puzzle. The solution for each puzzle varies. The requirements for solving a puzzle will be displayed in the upper right corner of the screen.

When looking at the toolbar, you will notice there are two sets of icons on the left and right sides. From here on I will refer to the set of icons on the left side as attributes and on the right side as actions. Attributes define behaviors which belong to a tile. They cannot be interacted with, they are strictly informational. Actions define behaviors which belong to the items inside a tile. A tile which contains at least one action or attribute will have a small, hexagonal indicator displayed towards the top of the tile.

The actions on the right side of the toolbar can be interacted with in the following ways:

  • By tapping on them. This will execute the action on the items in the currently selected tile.
  • By pressing and holding them. This will select the action, if it is valid to do so, which allows it to be moved to another, valid tile. Different actions will have different requirements about which tiles they can be moved to.
  • By swiping them (pressing and holding while moving the finger outside the action button). This will toggle the action, if it is valid to do so. This is currently only applicable to the Rotate action, in order to change the direction of rotation.

Some actions utilize a mask which covers invalid tiles (they will appear darkened). While a mask is active, the action can be cancelled by clicking or tapping outside the puzzle area or on the currently selected tile.

Attributes

As previously mentioned in The Basics above, attributes are the icons on the left-hand side of the toolbar at the bottom of the screen. Click or tap on an icon below to learn more about it.

block - Immutable

The tile, and the items within the tile, cannot be modified in any way. If there are any actions on the tile, they cannot be interacted with either.

lock - Locked

The actions on the right-hand side of the toolbar can be used, but they cannot be selected, and therefore cannot be moved to other tiles. Locked tiles can still receive actions from other tiles, but they will become locked once moved onto a locked tile.

Actions

As previously mentioned in The Basics above, actions are the icons on the right-hand side of the toolbar at the bottom of the screen. Click or tap on an icon below to learn more about it.

toggle_on - Toggle

Any valid (toggleable) items in the tile will have their state toggled. For example, toggling a terminus item will turn beams on and off.

rotate_left - Rotate

Any valid (rotatable) items in the tile will be rotated in the direction indicated by the icon (either clockwise or counter-clockwise).

drag_pan - Move

Any valid (movable) items in the tile will be moved from the currently selected tile to a valid tile of your choice. This action utilizes a mask for selecting the valid tile.

swap_horiz - Swap

Any valid (movable) items in the currently selected tile will trade places with any valid (movable) items in a valid tile of your choice. This action utilizes a mask for selecting the valid tile.

Help

Feedback

If you have a suggestion or encounter any problem, please use the form below to report them. Email address is optional, but you can include it if you want to get a response back.

Troubleshooting

You might be wondering what all that stuff in the URL is. Each URL parameter is separated by a forward slash (/). The parameter after the hash (#) symbol is the puzzle ID. The parameter after that is the state of the current puzzle, stored base64 encoded and compressed. Both of these parameters are optional and will be automatically updated when you load and interact with the game. In addition to storing state in the URL, which is useful when sharing the state of a puzzle with others, state is also stored locally in your browser's localStorage cache. If for some reason you need to clear cache for a puzzle, you can insert ?clearCache=[puzzle ID] in the URL right after the opening forward slash. If you want to clear all cache, omit the =[puzzle ID], or execute localStorage.clear() in your browser's console.

Thanks!

This game was primarily inspired by The Talos Principle and The Witness, two highly recommended puzzle games. Additionally, this game would not have been possible without the Paper.js library.

If you're enjoying the game, please consider sharing it with others!

😁

error
Your browser does not support the HTML5 canvas tag.
\ No newline at end of file